From 927f6fa6b2eb935f77e75a75743b62dad1c8e795 Mon Sep 17 00:00:00 2001 From: right-hearted Date: Fri, 4 Apr 2014 15:09:22 +0000 Subject: [PATCH] Adding openjpeg to autobuild git-svn-id: svn://kolibrios.org@4758 a494cfbc-eb01-0410-851d-a64ba20cac60 --- contrib/menuetlibc/Makefile | 2 + contrib/menuetlibc/openjpeg/CHANGES | 817 + .../openjpeg/CMake/CTestCustom.cmake.in | 21 + .../openjpeg/CMake/CheckHaveGetopt.cmake | 15 + .../openjpeg/CMake/OpenJPEGConfig.cmake.in | 48 + contrib/menuetlibc/openjpeg/CMakeLists.txt | 367 + contrib/menuetlibc/openjpeg/CTestConfig.cmake | 7 + .../menuetlibc/openjpeg/CTestCustom.cmake.in | 21 + contrib/menuetlibc/openjpeg/DllOpenJPEG.dsp | 273 + contrib/menuetlibc/openjpeg/DllOpenJPEG.sln | 20 + .../menuetlibc/openjpeg/DllOpenJPEG.vcproj | 670 + contrib/menuetlibc/openjpeg/INSTALL | 105 + .../openjpeg/JavaOpenJPEG/CMakeLists.txt | 40 + .../openjpeg/JavaOpenJPEG/JavaOpenJPEG.c | 1976 ++ .../openjpeg/JavaOpenJPEG/JavaOpenJPEG.dsp | 110 + .../openjpeg/JavaOpenJPEG/JavaOpenJPEG.dsw | 44 + .../openjpeg/JavaOpenJPEG/JavaOpenJPEG.vcproj | 276 + .../JavaOpenJPEG/JavaOpenJPEGDecoder.c | 883 + .../menuetlibc/openjpeg/JavaOpenJPEG/Makefile | 14 + .../JavaOpenJPEG/java-jni/include/jawt.h | 278 + .../java-jni/include/jdwpTransport.h | 237 + .../JavaOpenJPEG/java-jni/include/jni.h | 1951 ++ .../JavaOpenJPEG/java-jni/include/jvmdi.h | 1012 + .../JavaOpenJPEG/java-jni/include/jvmpi.h | 642 + .../JavaOpenJPEG/java-jni/include/jvmti.h | 2181 ++ .../java-jni/include/win32/jawt_md.h | 41 + .../java-jni/include/win32/jni_md.h | 19 + .../JavaOpenJPEG/java-jni/lib/jvm.lib | Bin 0 -> 273276 bytes .../org_openJpeg_OpenJPEGJavaDecoder.h | 21 + .../org_openJpeg_OpenJPEGJavaEncoder.h | 21 + contrib/menuetlibc/openjpeg/LICENSE | 30 + contrib/menuetlibc/openjpeg/LibOpenJPEG.dsp | 262 + contrib/menuetlibc/openjpeg/LibOpenJPEG.dsw | 41 + contrib/menuetlibc/openjpeg/LibOpenJPEG.sln | 20 + .../menuetlibc/openjpeg/LibOpenJPEG.vcproj | 642 + contrib/menuetlibc/openjpeg/Makefile | 776 + contrib/menuetlibc/openjpeg/Makefile.am | 28 + contrib/menuetlibc/openjpeg/Makefile.in | 776 + contrib/menuetlibc/openjpeg/Makefile.nix | 183 + .../menuetlibc/openjpeg/OPJViewer/Makefile | 41 + .../openjpeg/OPJViewer/OPJViewer.dsp | 290 + .../openjpeg/OPJViewer/OPJViewer.dsw | 56 + .../openjpeg/OPJViewer/OPJViewer.iss | 48 + .../menuetlibc/openjpeg/OPJViewer/Readme.txt | 100 + .../openjpeg/OPJViewer/about/about.htm | 36 + .../openjpeg/OPJViewer/about/opj_logo.png | Bin 0 -> 6500 bytes .../openjpeg/OPJViewer/buildupdate.bat | 15 + .../openjpeg/OPJViewer/source/OPJAbout.cpp | 87 + .../openjpeg/OPJViewer/source/OPJChild.ico | Bin 0 -> 1078 bytes .../openjpeg/OPJViewer/source/OPJChild16.xpm | 28 + .../openjpeg/OPJViewer/source/OPJDialogs.cpp | 1373 ++ .../openjpeg/OPJViewer/source/OPJThreads.cpp | 1268 ++ .../openjpeg/OPJViewer/source/OPJViewer.cpp | 1664 ++ .../openjpeg/OPJViewer/source/OPJViewer.h | 811 + .../openjpeg/OPJViewer/source/OPJViewer.ico | Bin 0 -> 1078 bytes .../openjpeg/OPJViewer/source/OPJViewer.rc | 3 + .../openjpeg/OPJViewer/source/OPJViewer16.xpm | 26 + .../openjpeg/OPJViewer/source/about_htm.h | 54 + .../openjpeg/OPJViewer/source/build.h | 1 + .../openjpeg/OPJViewer/source/icon1.xpm | 79 + .../openjpeg/OPJViewer/source/icon2.xpm | 53 + .../openjpeg/OPJViewer/source/icon3.xpm | 79 + .../openjpeg/OPJViewer/source/icon4.xpm | 43 + .../openjpeg/OPJViewer/source/icon5.xpm | 79 + .../OPJViewer/source/imagjpeg2000.cpp | 1464 ++ .../openjpeg/OPJViewer/source/imagjpeg2000.h | 177 + .../openjpeg/OPJViewer/source/imagmxf.cpp | 502 + .../openjpeg/OPJViewer/source/imagmxf.h | 99 + .../openjpeg/OPJViewer/source/license.txt | 14 + .../openjpeg/OPJViewer/source/opj_logo.xpm | 285 + .../openjpeg/OPJViewer/source/readmeafter.txt | 34 + .../OPJViewer/source/readmebefore.txt | 11 + .../openjpeg/OPJViewer/source/wxj2kparser.cpp | 1465 ++ .../openjpeg/OPJViewer/source/wxjp2parser.cpp | 1116 + .../menuetlibc/openjpeg/OPJ_Validate/Makefile | 2 + .../OPJ_Validate/OPJ_Param_File_v0_1.txt | 100 + .../openjpeg/OPJ_Validate/OPJ_Validate.c | 244 + .../openjpeg/OPJ_Validate/OPJ_Validate.dsp | 108 + .../openjpeg/OPJ_Validate/OPJ_Validate.dsw | 29 + .../OPJ_Validate_Candidate_vs_Ref.bat | 8 + .../OPJ_Validate_Candidate_vs_Ref.sh | 16 + .../OPJ_Validate/OPJ_Validate_Create_Ref.bat | 4 + .../OPJ_Validate/OPJ_Validate_Create_Ref.sh | 13 + .../openjpeg/OPJ_Validate/README.txt | 46 + .../linux_OPJ_Param_File_v0_1.txt | 89 + .../menuetlibc/openjpeg/OPJ_Validate/md5.c | 276 + .../menuetlibc/openjpeg/OPJ_Validate/md5.h | 59 + .../openjpeg/OPJ_Validate/original/README.txt | 1 + contrib/menuetlibc/openjpeg/OpenJPEG.rc | 109 + contrib/menuetlibc/openjpeg/README | 1 + contrib/menuetlibc/openjpeg/README.msvc | 40 + contrib/menuetlibc/openjpeg/aclocal.m4 | 8984 ++++++++ contrib/menuetlibc/openjpeg/bootstrap.sh | 3 + contrib/menuetlibc/openjpeg/clean.bat | 25 + .../menuetlibc/openjpeg/codec/.deps/color.Po | 144 + .../openjpeg/codec/.deps/convert.Po | 138 + .../menuetlibc/openjpeg/codec/.deps/getopt.Po | 91 + .../openjpeg/codec/.deps/image_to_j2k.Po | 144 + .../menuetlibc/openjpeg/codec/.deps/index.Po | 77 + .../openjpeg/codec/.deps/j2k_dump.Po | 148 + .../openjpeg/codec/.deps/j2k_to_image.Po | 166 + .../menuetlibc/openjpeg/codec/CMakeLists.txt | 102 + contrib/menuetlibc/openjpeg/codec/Makefile | 622 + contrib/menuetlibc/openjpeg/codec/Makefile.am | 52 + contrib/menuetlibc/openjpeg/codec/Makefile.in | 622 + .../menuetlibc/openjpeg/codec/Makefile.nix | 68 + contrib/menuetlibc/openjpeg/codec/README | 8 + contrib/menuetlibc/openjpeg/codec/convert.c | 2686 +++ contrib/menuetlibc/openjpeg/codec/convert.h | 82 + .../menuetlibc/openjpeg/codec/image_to_j2k.c | 1789 ++ .../openjpeg/codec/image_to_j2k.dsp | 118 + .../openjpeg/codec/image_to_j2k.dsw | 44 + .../openjpeg/codec/image_to_j2k.sln | Bin 0 -> 1506 bytes .../openjpeg/codec/image_to_j2k.vcproj | 292 + contrib/menuetlibc/openjpeg/codec/index.c | 391 + contrib/menuetlibc/openjpeg/codec/index.h | 49 + contrib/menuetlibc/openjpeg/codec/j2k_dump.c | 634 + .../menuetlibc/openjpeg/codec/j2k_to_image.c | 845 + .../openjpeg/codec/j2k_to_image.dsp | 117 + .../openjpeg/codec/j2k_to_image.dsw | 44 + .../openjpeg/codec/j2k_to_image.sln | Bin 0 -> 1506 bytes .../openjpeg/codec/j2k_to_image.vcproj | 291 + contrib/menuetlibc/openjpeg/codec/windirent.h | 677 + contrib/menuetlibc/openjpeg/common/color.c | 463 + contrib/menuetlibc/openjpeg/common/color.h | 38 + .../menuetlibc/openjpeg/common/format_defs.h | 48 + contrib/menuetlibc/openjpeg/common/getopt.c | 261 + contrib/menuetlibc/openjpeg/common/getopt.h | 29 + contrib/menuetlibc/openjpeg/config.guess | 1501 ++ contrib/menuetlibc/openjpeg/config.log | 1199 + contrib/menuetlibc/openjpeg/config.nix | 49 + contrib/menuetlibc/openjpeg/config.status | 2348 ++ contrib/menuetlibc/openjpeg/config.sub | 1705 ++ contrib/menuetlibc/openjpeg/configure | 18880 ++++++++++++++++ contrib/menuetlibc/openjpeg/configure.ac | 458 + contrib/menuetlibc/openjpeg/depcomp | 630 + .../menuetlibc/openjpeg/doc/CMakeLists.txt | 15 + contrib/menuetlibc/openjpeg/doc/Doxyfile.dox | 234 + contrib/menuetlibc/openjpeg/doc/Makefile | 422 + contrib/menuetlibc/openjpeg/doc/Makefile.am | 49 + contrib/menuetlibc/openjpeg/doc/Makefile.in | 422 + contrib/menuetlibc/openjpeg/doc/Makefile.nix | 47 + .../menuetlibc/openjpeg/doc/image_to_j2k.1 | 222 + contrib/menuetlibc/openjpeg/doc/j2k_dump.1 | 62 + .../menuetlibc/openjpeg/doc/j2k_to_image.1 | 109 + contrib/menuetlibc/openjpeg/doc/libopenjpeg.3 | 337 + .../openjpeg/doc/man/man1/image_to_j2k.1 | 222 + .../openjpeg/doc/man/man1/j2k_dump.1 | 62 + .../openjpeg/doc/man/man1/j2k_to_image.1 | 109 + .../openjpeg/doc/man/man3/libopenjpeg.3 | 337 + .../openjpeg/indexer_JPIP/CMakeLists.txt | 5 + .../menuetlibc/openjpeg/indexer_JPIP/Makefile | 23 + .../menuetlibc/openjpeg/indexer_JPIP/bio.c | 125 + .../menuetlibc/openjpeg/indexer_JPIP/bio.h | 38 + .../menuetlibc/openjpeg/indexer_JPIP/cio.c | 129 + .../menuetlibc/openjpeg/indexer_JPIP/cio.h | 44 + .../menuetlibc/openjpeg/indexer_JPIP/fix.c | 44 + .../menuetlibc/openjpeg/indexer_JPIP/fix.h | 34 + .../openjpeg/indexer_JPIP/index_create.c | 1219 + .../menuetlibc/openjpeg/indexer_JPIP/int.c | 89 + .../menuetlibc/openjpeg/indexer_JPIP/int.h | 41 + .../menuetlibc/openjpeg/indexer_JPIP/j2k.h | 288 + .../menuetlibc/openjpeg/indexer_JPIP/jp2.c | 302 + .../menuetlibc/openjpeg/indexer_JPIP/jp2.h | 44 + .../menuetlibc/openjpeg/indexer_JPIP/jpip.c | 768 + .../menuetlibc/openjpeg/indexer_JPIP/jpip.h | 42 + contrib/menuetlibc/openjpeg/indexer_JPIP/pi.c | 465 + contrib/menuetlibc/openjpeg/indexer_JPIP/pi.h | 72 + contrib/menuetlibc/openjpeg/indexer_JPIP/t2.c | 389 + contrib/menuetlibc/openjpeg/indexer_JPIP/t2.h | 46 + .../menuetlibc/openjpeg/indexer_JPIP/tcd.c | 285 + .../menuetlibc/openjpeg/indexer_JPIP/tcd.h | 137 + .../menuetlibc/openjpeg/indexer_JPIP/tgt.c | 170 + .../menuetlibc/openjpeg/indexer_JPIP/tgt.h | 80 + contrib/menuetlibc/openjpeg/install-sh | 520 + .../menuetlibc/openjpeg/jp3d/CMakeLists.txt | 15 + .../menuetlibc/openjpeg/jp3d/DllJp3dVM.dsp | 273 + .../menuetlibc/openjpeg/jp3d/DllJp3dVM.sln | 21 + .../menuetlibc/openjpeg/jp3d/DllJp3dVM.vcproj | 278 + contrib/menuetlibc/openjpeg/jp3d/LICENSE.txt | 30 + .../menuetlibc/openjpeg/jp3d/LibJp3dVM.sln | 21 + .../menuetlibc/openjpeg/jp3d/LibJp3dVM.vcproj | 249 + contrib/menuetlibc/openjpeg/jp3d/Makefile | 580 + contrib/menuetlibc/openjpeg/jp3d/Makefile.am | 1 + contrib/menuetlibc/openjpeg/jp3d/Makefile.in | 580 + contrib/menuetlibc/openjpeg/jp3d/Makefile.nix | 108 + contrib/menuetlibc/openjpeg/jp3d/README.txt | 285 + .../openjpeg/jp3d/codec/.deps/convert.Po | 1 + .../openjpeg/jp3d/codec/.deps/getopt.Po | 1 + .../jp3d/codec/.deps/jp3d_to_volume.Po | 1 + .../jp3d/codec/.deps/volume_to_jp3d.Po | 1 + .../openjpeg/jp3d/codec/CMakeLists.txt | 47 + .../menuetlibc/openjpeg/jp3d/codec/Makefile | 564 + .../openjpeg/jp3d/codec/Makefile.am | 27 + .../openjpeg/jp3d/codec/Makefile.in | 564 + .../openjpeg/jp3d/codec/Makefile.nix | 37 + .../menuetlibc/openjpeg/jp3d/codec/convert.c | 997 + .../menuetlibc/openjpeg/jp3d/codec/convert.h | 51 + .../menuetlibc/openjpeg/jp3d/codec/getopt.c | 109 + .../menuetlibc/openjpeg/jp3d/codec/getopt.h | 14 + .../openjpeg/jp3d/codec/jp3d_to_volume.c | 540 + .../openjpeg/jp3d/codec/jp3d_vm_dec.ncb | Bin 0 -> 470016 bytes .../openjpeg/jp3d/codec/jp3d_vm_dec.sln | 30 + .../openjpeg/jp3d/codec/jp3d_vm_dec.suo | Bin 0 -> 13312 bytes .../openjpeg/jp3d/codec/jp3d_vm_dec.vcproj | 157 + .../openjpeg/jp3d/codec/jp3d_vm_enc.ncb | Bin 0 -> 568320 bytes .../openjpeg/jp3d/codec/jp3d_vm_enc.sln | 35 + .../openjpeg/jp3d/codec/jp3d_vm_enc.suo | Bin 0 -> 21504 bytes .../openjpeg/jp3d/codec/jp3d_vm_enc.vcproj | 157 + .../openjpeg/jp3d/codec/volume_to_jp3d.c | 906 + .../openjpeg/jp3d/codec/windirent.h | 676 + .../openjpeg/jp3d/libjp3dvm/.deps/bio.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/cio.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/dwt.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/event.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/jp3d.Plo | 1 + .../jp3d/libjp3dvm/.deps/jp3d_lib.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/mct.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/mqc.Plo | 1 + .../jp3d/libjp3dvm/.deps/openjpeg.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/pi.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/raw.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/t1.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/t1_3d.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/t2.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/tcd.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/tgt.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/.deps/volume.Plo | 1 + .../openjpeg/jp3d/libjp3dvm/CMakeLists.txt | 39 + .../openjpeg/jp3d/libjp3dvm/Makefile | 647 + .../openjpeg/jp3d/libjp3dvm/Makefile.am | 69 + .../openjpeg/jp3d/libjp3dvm/Makefile.in | 647 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/bio.c | 189 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/bio.h | 132 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/cio.c | 217 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/cio.h | 100 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/dwt.c | 1016 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/dwt.h | 100 + .../openjpeg/jp3d/libjp3dvm/event.c | 181 + .../openjpeg/jp3d/libjp3dvm/event.h | 58 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/fix.h | 62 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/int.h | 122 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d.c | 2328 ++ .../menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d.h | 518 + .../openjpeg/jp3d/libjp3dvm/jp3d_lib.c | 76 + .../openjpeg/jp3d/libjp3dvm/jp3d_lib.h | 75 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/mct.c | 131 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/mct.h | 97 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/mqc.c | 548 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/mqc.h | 201 + .../openjpeg/jp3d/libjp3dvm/openjpeg.c | 207 + .../openjpeg/jp3d/libjp3dvm/openjpeg3d.h | 713 + .../openjpeg/jp3d/libjp3dvm/opj_includes.h | 81 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/pi.c | 630 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/pi.h | 145 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/raw.c | 86 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/raw.h | 99 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/t1.c | 1181 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/t1.h | 173 + .../openjpeg/jp3d/libjp3dvm/t1_3d.c | 1230 + .../openjpeg/jp3d/libjp3dvm/t1_3d.h | 173 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/t2.c | 675 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/t2.h | 101 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/tcd.c | 1738 ++ .../menuetlibc/openjpeg/jp3d/libjp3dvm/tcd.h | 334 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/tgt.c | 256 + .../menuetlibc/openjpeg/jp3d/libjp3dvm/tgt.h | 124 + .../openjpeg/jp3d/libjp3dvm/volume.c | 89 + .../openjpeg/jp3d/libjp3dvm/volume.h | 43 + .../openjpeg/jp3d/tcltk/LPI_JP3D_VM.tcl | 114 + contrib/menuetlibc/openjpeg/jp3d/tcltk/README | 13 + .../menuetlibc/openjpeg/jp3d/tcltk/Thumbs.db | Bin 0 -> 18944 bytes .../openjpeg/jp3d/tcltk/decoder.tcl | 272 + .../openjpeg/jp3d/tcltk/encoder.tcl | 470 + .../openjpeg/jp3d/tcltk/logoLPI.gif | Bin 0 -> 5212 bytes .../jpwl/.deps/JPWL_image_to_j2k-convert.Po | 1 + .../jpwl/.deps/JPWL_image_to_j2k-getopt.Po | 1 + .../.deps/JPWL_image_to_j2k-image_to_j2k.Po | 1 + .../jpwl/.deps/JPWL_image_to_j2k-index.Po | 1 + .../jpwl/.deps/JPWL_j2k_to_image-color.Po | 1 + .../jpwl/.deps/JPWL_j2k_to_image-convert.Po | 1 + .../jpwl/.deps/JPWL_j2k_to_image-getopt.Po | 1 + .../jpwl/.deps/JPWL_j2k_to_image-index.Po | 1 + .../.deps/JPWL_j2k_to_image-j2k_to_image.Po | 1 + .../menuetlibc/openjpeg/jpwl/.deps/bio.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/cio.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/crc.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/dwt.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/event.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/image.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/j2k.Plo | 1 + .../openjpeg/jpwl/.deps/j2k_lib.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/jp2.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/jpt.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/jpwl.Plo | 1 + .../openjpeg/jpwl/.deps/jpwl_lib.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/mct.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/mqc.Plo | 1 + .../openjpeg/jpwl/.deps/openjpeg.Plo | 1 + contrib/menuetlibc/openjpeg/jpwl/.deps/pi.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/raw.Plo | 1 + contrib/menuetlibc/openjpeg/jpwl/.deps/rs.Plo | 1 + contrib/menuetlibc/openjpeg/jpwl/.deps/t1.Plo | 1 + contrib/menuetlibc/openjpeg/jpwl/.deps/t2.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/tcd.Plo | 1 + .../menuetlibc/openjpeg/jpwl/.deps/tgt.Plo | 1 + .../menuetlibc/openjpeg/jpwl/CMakeLists.txt | 107 + .../openjpeg/jpwl/JPWL_image_to_j2k.dsp | 127 + .../openjpeg/jpwl/JPWL_image_to_j2k.dsw | 44 + .../openjpeg/jpwl/JPWL_j2k_to_image.dsp | 135 + .../openjpeg/jpwl/JPWL_j2k_to_image.dsw | 44 + .../openjpeg/jpwl/LibOpenJPEG_JPWL.dsp | 282 + contrib/menuetlibc/openjpeg/jpwl/Makefile | 997 + contrib/menuetlibc/openjpeg/jpwl/Makefile.am | 109 + contrib/menuetlibc/openjpeg/jpwl/Makefile.in | 997 + contrib/menuetlibc/openjpeg/jpwl/Makefile.nix | 152 + contrib/menuetlibc/openjpeg/jpwl/README.txt | 136 + contrib/menuetlibc/openjpeg/jpwl/crc.c | 160 + contrib/menuetlibc/openjpeg/jpwl/crc.h | 84 + contrib/menuetlibc/openjpeg/jpwl/jpwl.c | 1357 ++ contrib/menuetlibc/openjpeg/jpwl/jpwl.h | 425 + contrib/menuetlibc/openjpeg/jpwl/jpwl_lib.c | 1796 ++ contrib/menuetlibc/openjpeg/jpwl/rs.c | 594 + contrib/menuetlibc/openjpeg/jpwl/rs.h | 111 + contrib/menuetlibc/openjpeg/libopenjpeg.pc | 11 + contrib/menuetlibc/openjpeg/libopenjpeg.pc.in | 11 + .../openjpeg/libopenjpeg/.deps/bio.Plo | 160 + .../openjpeg/libopenjpeg/.deps/cio.Plo | 160 + .../openjpeg/libopenjpeg/.deps/dwt.Plo | 173 + .../openjpeg/libopenjpeg/.deps/event.Plo | 160 + .../openjpeg/libopenjpeg/.deps/image.Plo | 160 + .../openjpeg/libopenjpeg/.deps/j2k.Plo | 160 + .../openjpeg/libopenjpeg/.deps/j2k_lib.Plo | 184 + .../openjpeg/libopenjpeg/.deps/jp2.Plo | 160 + .../openjpeg/libopenjpeg/.deps/jpt.Plo | 160 + .../openjpeg/libopenjpeg/.deps/mct.Plo | 173 + .../openjpeg/libopenjpeg/.deps/mqc.Plo | 160 + .../openjpeg/libopenjpeg/.deps/openjpeg.Plo | 163 + .../openjpeg/libopenjpeg/.deps/pi.Plo | 160 + .../openjpeg/libopenjpeg/.deps/raw.Plo | 160 + .../openjpeg/libopenjpeg/.deps/t1.Plo | 162 + .../openjpeg/libopenjpeg/.deps/t2.Plo | 160 + .../openjpeg/libopenjpeg/.deps/tcd.Plo | 160 + .../openjpeg/libopenjpeg/.deps/tgt.Plo | 160 + .../openjpeg/libopenjpeg/CMakeLists.txt | 51 + .../menuetlibc/openjpeg/libopenjpeg/Makefile | 645 + .../openjpeg/libopenjpeg/Makefile.am | 68 + .../openjpeg/libopenjpeg/Makefile.in | 645 + contrib/menuetlibc/openjpeg/libopenjpeg/bio.c | 187 + contrib/menuetlibc/openjpeg/libopenjpeg/bio.h | 125 + contrib/menuetlibc/openjpeg/libopenjpeg/cio.c | 191 + contrib/menuetlibc/openjpeg/libopenjpeg/cio.h | 86 + contrib/menuetlibc/openjpeg/libopenjpeg/dwt.c | 858 + contrib/menuetlibc/openjpeg/libopenjpeg/dwt.h | 113 + .../menuetlibc/openjpeg/libopenjpeg/event.c | 121 + .../menuetlibc/openjpeg/libopenjpeg/event.h | 58 + contrib/menuetlibc/openjpeg/libopenjpeg/fix.h | 64 + .../menuetlibc/openjpeg/libopenjpeg/image.c | 89 + .../menuetlibc/openjpeg/libopenjpeg/image.h | 48 + contrib/menuetlibc/openjpeg/libopenjpeg/int.h | 119 + contrib/menuetlibc/openjpeg/libopenjpeg/j2k.c | 2434 ++ contrib/menuetlibc/openjpeg/libopenjpeg/j2k.h | 446 + .../menuetlibc/openjpeg/libopenjpeg/j2k_lib.c | 59 + .../menuetlibc/openjpeg/libopenjpeg/j2k_lib.h | 54 + contrib/menuetlibc/openjpeg/libopenjpeg/jp2.c | 1089 + contrib/menuetlibc/openjpeg/libopenjpeg/jp2.h | 231 + contrib/menuetlibc/openjpeg/libopenjpeg/jpt.c | 155 + contrib/menuetlibc/openjpeg/libopenjpeg/jpt.h | 75 + .../menuetlibc/openjpeg/libopenjpeg/lrintf.c | 5 + contrib/menuetlibc/openjpeg/libopenjpeg/mct.c | 190 + contrib/menuetlibc/openjpeg/libopenjpeg/mct.h | 98 + contrib/menuetlibc/openjpeg/libopenjpeg/mqc.c | 593 + contrib/menuetlibc/openjpeg/libopenjpeg/mqc.h | 200 + .../openjpeg/libopenjpeg/openjpeg.c | 337 + .../openjpeg/libopenjpeg/openjpeg.h | 915 + .../openjpeg/libopenjpeg/opj_includes.h | 136 + .../openjpeg/libopenjpeg/opj_malloc.h | 166 + contrib/menuetlibc/openjpeg/libopenjpeg/pi.c | 963 + contrib/menuetlibc/openjpeg/libopenjpeg/pi.h | 156 + contrib/menuetlibc/openjpeg/libopenjpeg/raw.c | 87 + contrib/menuetlibc/openjpeg/libopenjpeg/raw.h | 100 + contrib/menuetlibc/openjpeg/libopenjpeg/t1.c | 1581 ++ contrib/menuetlibc/openjpeg/libopenjpeg/t1.h | 147 + .../openjpeg/libopenjpeg/t1_generate_luts.c | 275 + .../menuetlibc/openjpeg/libopenjpeg/t1_luts.h | 143 + contrib/menuetlibc/openjpeg/libopenjpeg/t2.c | 791 + contrib/menuetlibc/openjpeg/libopenjpeg/t2.h | 105 + contrib/menuetlibc/openjpeg/libopenjpeg/tcd.c | 1516 ++ contrib/menuetlibc/openjpeg/libopenjpeg/tcd.h | 286 + contrib/menuetlibc/openjpeg/libopenjpeg/tgt.c | 213 + contrib/menuetlibc/openjpeg/libopenjpeg/tgt.h | 114 + .../menuetlibc/openjpeg/libs/lcms2/lcms2.h | 1722 ++ .../openjpeg/libs/lcms2/lcms2_plugin.h | 533 + .../openjpeg/libs/lcms2/lcms2_static.lib | Bin 0 -> 1312736 bytes .../openjpeg/libs/libtiff/libtiff.lib | Bin 0 -> 543310 bytes .../menuetlibc/openjpeg/libs/libtiff/tiff.h | 645 + .../openjpeg/libs/libtiff/tiffconf.h | 128 + .../menuetlibc/openjpeg/libs/libtiff/tiffio.h | 550 + .../openjpeg/libs/libtiff/tiffio.hxx | 49 + .../openjpeg/libs/libtiff/tiffvers.h | 9 + .../menuetlibc/openjpeg/libs/png/libpng14.lib | Bin 0 -> 800554 bytes contrib/menuetlibc/openjpeg/libs/png/png.h | 2699 +++ .../menuetlibc/openjpeg/libs/png/pngconf.h | 1540 ++ contrib/menuetlibc/openjpeg/libs/png/zconf.h | 332 + contrib/menuetlibc/openjpeg/libs/png/zlib.h | 1357 ++ contrib/menuetlibc/openjpeg/libs/png/zlib.lib | Bin 0 -> 240696 bytes contrib/menuetlibc/openjpeg/libtool | 9417 ++++++++ contrib/menuetlibc/openjpeg/ltmain.sh | 8750 +++++++ contrib/menuetlibc/openjpeg/missing | 376 + .../menuetlibc/openjpeg/mj2/.deps/color.Po | 144 + .../mj2/.deps/extract_j2k_from_mj2.Po | 100 + .../openjpeg/mj2/.deps/frames_to_mj2.Po | 109 + .../menuetlibc/openjpeg/mj2/.deps/getopt.Po | 91 + contrib/menuetlibc/openjpeg/mj2/.deps/mj2.Po | 175 + .../openjpeg/mj2/.deps/mj2_convert.Po | 176 + .../openjpeg/mj2/.deps/mj2_to_frames.Po | 155 + .../openjpeg/mj2/.deps/wrap_j2k_in_mj2.Po | 102 + .../menuetlibc/openjpeg/mj2/CMakeLists.txt | 87 + .../menuetlibc/openjpeg/mj2/MJ2_Extractor.dsp | 196 + .../menuetlibc/openjpeg/mj2/MJ2_Extractor.dsw | 44 + .../menuetlibc/openjpeg/mj2/MJ2_Extractor.sln | 29 + .../openjpeg/mj2/MJ2_Extractor.vcproj | 354 + .../menuetlibc/openjpeg/mj2/MJ2_Wrapper.dsp | 195 + .../menuetlibc/openjpeg/mj2/MJ2_Wrapper.dsw | 44 + .../menuetlibc/openjpeg/mj2/MJ2_Wrapper.sln | 29 + .../openjpeg/mj2/MJ2_Wrapper.vcproj | 353 + contrib/menuetlibc/openjpeg/mj2/Makefile | 629 + contrib/menuetlibc/openjpeg/mj2/Makefile.am | 45 + contrib/menuetlibc/openjpeg/mj2/Makefile.in | 629 + contrib/menuetlibc/openjpeg/mj2/Makefile.nix | 64 + .../openjpeg/mj2/extract_j2k_from_mj2.c | 148 + .../menuetlibc/openjpeg/mj2/frames_to_mj2.c | 806 + .../menuetlibc/openjpeg/mj2/frames_to_mj2.dsp | 212 + .../menuetlibc/openjpeg/mj2/frames_to_mj2.dsw | 44 + .../menuetlibc/openjpeg/mj2/frames_to_mj2.sln | Bin 0 -> 1508 bytes .../openjpeg/mj2/frames_to_mj2.vcproj | 406 + contrib/menuetlibc/openjpeg/mj2/meta_out.c | 2181 ++ contrib/menuetlibc/openjpeg/mj2/meta_out.h | 13 + contrib/menuetlibc/openjpeg/mj2/mj2.c | 2911 +++ contrib/menuetlibc/openjpeg/mj2/mj2.h | 391 + contrib/menuetlibc/openjpeg/mj2/mj2_convert.c | 329 + contrib/menuetlibc/openjpeg/mj2/mj2_convert.h | 45 + .../menuetlibc/openjpeg/mj2/mj2_to_frames.c | 250 + .../menuetlibc/openjpeg/mj2/mj2_to_frames.dsp | 159 + .../menuetlibc/openjpeg/mj2/mj2_to_frames.dsw | 44 + .../menuetlibc/openjpeg/mj2/mj2_to_frames.sln | 29 + .../openjpeg/mj2/mj2_to_frames.vcproj | 324 + .../menuetlibc/openjpeg/mj2/mj2_to_metadata.c | 312 + .../openjpeg/mj2/mj2_to_metadata.dsp | 140 + .../openjpeg/mj2/mj2_to_metadata.dsw | 44 + .../openjpeg/mj2/mj2_to_metadata.dtd | 425 + .../menuetlibc/openjpeg/mj2/mj2_to_metadata.h | 9 + .../openjpeg/mj2/mj2_to_metadata.sln | 29 + .../openjpeg/mj2/mj2_to_metadata.vcproj | 349 + .../openjpeg/mj2/mj2_to_metadata_Notes.doc | Bin 0 -> 35328 bytes contrib/menuetlibc/openjpeg/mj2/readme.txt | 3 + .../menuetlibc/openjpeg/mj2/wrap_j2k_in_mj2.c | 371 + .../openjpeg.xcodeproj/project.pbxproj | 2115 ++ contrib/menuetlibc/openjpeg/opj_config.h | 105 + contrib/menuetlibc/openjpeg/opj_config.h.in | 104 + .../menuetlibc/openjpeg/opj_config.h.in.user | 41 + .../menuetlibc/openjpeg/opj_configh.cmake.in | 22 + contrib/menuetlibc/openjpeg/stamp-h1 | 1 + data/it/Makefile | 8 +- .../libraries/menuetlibc/linuxtools/Makefile | 7 +- .../develop/libraries/menuetlibc/src/Makefile | 3 - 466 files changed, 178399 insertions(+), 10 deletions(-) create mode 100644 contrib/menuetlibc/Makefile create mode 100644 contrib/menuetlibc/openjpeg/CHANGES create mode 100644 contrib/menuetlibc/openjpeg/CMake/CTestCustom.cmake.in create mode 100644 contrib/menuetlibc/openjpeg/CMake/CheckHaveGetopt.cmake create mode 100644 contrib/menuetlibc/openjpeg/CMake/OpenJPEGConfig.cmake.in create mode 100644 contrib/menuetlibc/openjpeg/CMakeLists.txt create mode 100644 contrib/menuetlibc/openjpeg/CTestConfig.cmake create mode 100644 contrib/menuetlibc/openjpeg/CTestCustom.cmake.in create mode 100644 contrib/menuetlibc/openjpeg/DllOpenJPEG.dsp create mode 100644 contrib/menuetlibc/openjpeg/DllOpenJPEG.sln create mode 100644 contrib/menuetlibc/openjpeg/DllOpenJPEG.vcproj create mode 100644 contrib/menuetlibc/openjpeg/INSTALL create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/CMakeLists.txt create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.c create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.dsp create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.dsw create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.vcproj create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEGDecoder.c create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/Makefile create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jawt.h create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jdwpTransport.h create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jni.h create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmdi.h create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmpi.h create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmti.h create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/win32/jawt_md.h create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/win32/jni_md.h create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/lib/jvm.lib create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/org_openJpeg_OpenJPEGJavaDecoder.h create mode 100644 contrib/menuetlibc/openjpeg/JavaOpenJPEG/org_openJpeg_OpenJPEGJavaEncoder.h create mode 100644 contrib/menuetlibc/openjpeg/LICENSE create mode 100644 contrib/menuetlibc/openjpeg/LibOpenJPEG.dsp create mode 100644 contrib/menuetlibc/openjpeg/LibOpenJPEG.dsw create mode 100644 contrib/menuetlibc/openjpeg/LibOpenJPEG.sln create mode 100644 contrib/menuetlibc/openjpeg/LibOpenJPEG.vcproj create mode 100644 contrib/menuetlibc/openjpeg/Makefile create mode 100644 contrib/menuetlibc/openjpeg/Makefile.am create mode 100644 contrib/menuetlibc/openjpeg/Makefile.in create mode 100644 contrib/menuetlibc/openjpeg/Makefile.nix create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/Makefile create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.dsp create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.dsw create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.iss create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/Readme.txt create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/about/about.htm create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/about/opj_logo.png create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/buildupdate.bat create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/OPJAbout.cpp create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/OPJChild.ico create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/OPJChild16.xpm create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/OPJDialogs.cpp create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/OPJThreads.cpp create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.cpp create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.h create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.ico create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.rc create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer16.xpm create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/about_htm.h create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/build.h create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/icon1.xpm create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/icon2.xpm create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/icon3.xpm create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/icon4.xpm create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/icon5.xpm create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/imagjpeg2000.cpp create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/imagjpeg2000.h create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/imagmxf.cpp create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/imagmxf.h create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/license.txt create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/opj_logo.xpm create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/readmeafter.txt create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/readmebefore.txt create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/wxj2kparser.cpp create mode 100644 contrib/menuetlibc/openjpeg/OPJViewer/source/wxjp2parser.cpp create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/Makefile create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Param_File_v0_1.txt create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.c create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.dsp create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.dsw create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Candidate_vs_Ref.bat create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Candidate_vs_Ref.sh create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Create_Ref.bat create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Create_Ref.sh create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/README.txt create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/linux_OPJ_Param_File_v0_1.txt create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/md5.c create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/md5.h create mode 100644 contrib/menuetlibc/openjpeg/OPJ_Validate/original/README.txt create mode 100644 contrib/menuetlibc/openjpeg/OpenJPEG.rc create mode 100644 contrib/menuetlibc/openjpeg/README create mode 100644 contrib/menuetlibc/openjpeg/README.msvc create mode 100644 contrib/menuetlibc/openjpeg/aclocal.m4 create mode 100755 contrib/menuetlibc/openjpeg/bootstrap.sh create mode 100644 contrib/menuetlibc/openjpeg/clean.bat create mode 100644 contrib/menuetlibc/openjpeg/codec/.deps/color.Po create mode 100644 contrib/menuetlibc/openjpeg/codec/.deps/convert.Po create mode 100644 contrib/menuetlibc/openjpeg/codec/.deps/getopt.Po create mode 100644 contrib/menuetlibc/openjpeg/codec/.deps/image_to_j2k.Po create mode 100644 contrib/menuetlibc/openjpeg/codec/.deps/index.Po create mode 100644 contrib/menuetlibc/openjpeg/codec/.deps/j2k_dump.Po create mode 100644 contrib/menuetlibc/openjpeg/codec/.deps/j2k_to_image.Po create mode 100644 contrib/menuetlibc/openjpeg/codec/CMakeLists.txt create mode 100644 contrib/menuetlibc/openjpeg/codec/Makefile create mode 100644 contrib/menuetlibc/openjpeg/codec/Makefile.am create mode 100644 contrib/menuetlibc/openjpeg/codec/Makefile.in create mode 100644 contrib/menuetlibc/openjpeg/codec/Makefile.nix create mode 100644 contrib/menuetlibc/openjpeg/codec/README create mode 100644 contrib/menuetlibc/openjpeg/codec/convert.c create mode 100644 contrib/menuetlibc/openjpeg/codec/convert.h create mode 100644 contrib/menuetlibc/openjpeg/codec/image_to_j2k.c create mode 100644 contrib/menuetlibc/openjpeg/codec/image_to_j2k.dsp create mode 100644 contrib/menuetlibc/openjpeg/codec/image_to_j2k.dsw create mode 100644 contrib/menuetlibc/openjpeg/codec/image_to_j2k.sln create mode 100644 contrib/menuetlibc/openjpeg/codec/image_to_j2k.vcproj create mode 100644 contrib/menuetlibc/openjpeg/codec/index.c create mode 100644 contrib/menuetlibc/openjpeg/codec/index.h create mode 100644 contrib/menuetlibc/openjpeg/codec/j2k_dump.c create mode 100644 contrib/menuetlibc/openjpeg/codec/j2k_to_image.c create mode 100644 contrib/menuetlibc/openjpeg/codec/j2k_to_image.dsp create mode 100644 contrib/menuetlibc/openjpeg/codec/j2k_to_image.dsw create mode 100644 contrib/menuetlibc/openjpeg/codec/j2k_to_image.sln create mode 100644 contrib/menuetlibc/openjpeg/codec/j2k_to_image.vcproj create mode 100644 contrib/menuetlibc/openjpeg/codec/windirent.h create mode 100644 contrib/menuetlibc/openjpeg/common/color.c create mode 100644 contrib/menuetlibc/openjpeg/common/color.h create mode 100644 contrib/menuetlibc/openjpeg/common/format_defs.h create mode 100644 contrib/menuetlibc/openjpeg/common/getopt.c create mode 100644 contrib/menuetlibc/openjpeg/common/getopt.h create mode 100755 contrib/menuetlibc/openjpeg/config.guess create mode 100644 contrib/menuetlibc/openjpeg/config.log create mode 100644 contrib/menuetlibc/openjpeg/config.nix create mode 100755 contrib/menuetlibc/openjpeg/config.status create mode 100755 contrib/menuetlibc/openjpeg/config.sub create mode 100755 contrib/menuetlibc/openjpeg/configure create mode 100644 contrib/menuetlibc/openjpeg/configure.ac create mode 100755 contrib/menuetlibc/openjpeg/depcomp create mode 100644 contrib/menuetlibc/openjpeg/doc/CMakeLists.txt create mode 100644 contrib/menuetlibc/openjpeg/doc/Doxyfile.dox create mode 100644 contrib/menuetlibc/openjpeg/doc/Makefile create mode 100644 contrib/menuetlibc/openjpeg/doc/Makefile.am create mode 100644 contrib/menuetlibc/openjpeg/doc/Makefile.in create mode 100644 contrib/menuetlibc/openjpeg/doc/Makefile.nix create mode 100644 contrib/menuetlibc/openjpeg/doc/image_to_j2k.1 create mode 100644 contrib/menuetlibc/openjpeg/doc/j2k_dump.1 create mode 100644 contrib/menuetlibc/openjpeg/doc/j2k_to_image.1 create mode 100644 contrib/menuetlibc/openjpeg/doc/libopenjpeg.3 create mode 100644 contrib/menuetlibc/openjpeg/doc/man/man1/image_to_j2k.1 create mode 100644 contrib/menuetlibc/openjpeg/doc/man/man1/j2k_dump.1 create mode 100644 contrib/menuetlibc/openjpeg/doc/man/man1/j2k_to_image.1 create mode 100644 contrib/menuetlibc/openjpeg/doc/man/man3/libopenjpeg.3 create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/CMakeLists.txt create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/Makefile create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/bio.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/bio.h create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/cio.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/cio.h create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/fix.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/fix.h create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/index_create.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/int.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/int.h create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/j2k.h create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/jp2.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/jp2.h create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/jpip.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/jpip.h create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/pi.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/pi.h create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/t2.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/t2.h create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/tcd.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/tcd.h create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/tgt.c create mode 100644 contrib/menuetlibc/openjpeg/indexer_JPIP/tgt.h create mode 100755 contrib/menuetlibc/openjpeg/install-sh create mode 100644 contrib/menuetlibc/openjpeg/jp3d/CMakeLists.txt create mode 100755 contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.dsp create mode 100755 contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.sln create mode 100755 contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.vcproj create mode 100755 contrib/menuetlibc/openjpeg/jp3d/LICENSE.txt create mode 100755 contrib/menuetlibc/openjpeg/jp3d/LibJp3dVM.sln create mode 100755 contrib/menuetlibc/openjpeg/jp3d/LibJp3dVM.vcproj create mode 100644 contrib/menuetlibc/openjpeg/jp3d/Makefile create mode 100644 contrib/menuetlibc/openjpeg/jp3d/Makefile.am create mode 100644 contrib/menuetlibc/openjpeg/jp3d/Makefile.in create mode 100644 contrib/menuetlibc/openjpeg/jp3d/Makefile.nix create mode 100755 contrib/menuetlibc/openjpeg/jp3d/README.txt create mode 100644 contrib/menuetlibc/openjpeg/jp3d/codec/.deps/convert.Po create mode 100644 contrib/menuetlibc/openjpeg/jp3d/codec/.deps/getopt.Po create mode 100644 contrib/menuetlibc/openjpeg/jp3d/codec/.deps/jp3d_to_volume.Po create mode 100644 contrib/menuetlibc/openjpeg/jp3d/codec/.deps/volume_to_jp3d.Po create mode 100644 contrib/menuetlibc/openjpeg/jp3d/codec/CMakeLists.txt create mode 100644 contrib/menuetlibc/openjpeg/jp3d/codec/Makefile create mode 100644 contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.am create mode 100644 contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.in create mode 100644 contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.nix create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/convert.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/convert.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/getopt.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/getopt.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_to_volume.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.ncb create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.sln create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.suo create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.vcproj create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.ncb create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.sln create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.suo create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.vcproj create mode 100755 contrib/menuetlibc/openjpeg/jp3d/codec/volume_to_jp3d.c create mode 100644 contrib/menuetlibc/openjpeg/jp3d/codec/windirent.h create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/bio.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/cio.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/dwt.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/event.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/jp3d.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/jp3d_lib.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/mct.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/mqc.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/openjpeg.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/pi.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/raw.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t1.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t1_3d.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t2.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/tcd.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/tgt.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/volume.Plo create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/CMakeLists.txt create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile.am create mode 100644 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile.in create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/bio.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/bio.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/cio.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/cio.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/dwt.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/dwt.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/event.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/event.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/fix.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/int.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d_lib.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d_lib.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mct.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mct.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mqc.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mqc.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/openjpeg.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/openjpeg3d.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/opj_includes.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/pi.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/pi.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/raw.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/raw.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1_3d.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1_3d.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t2.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t2.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tcd.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tcd.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tgt.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tgt.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/volume.c create mode 100755 contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/volume.h create mode 100755 contrib/menuetlibc/openjpeg/jp3d/tcltk/LPI_JP3D_VM.tcl create mode 100644 contrib/menuetlibc/openjpeg/jp3d/tcltk/README create mode 100755 contrib/menuetlibc/openjpeg/jp3d/tcltk/Thumbs.db create mode 100755 contrib/menuetlibc/openjpeg/jp3d/tcltk/decoder.tcl create mode 100755 contrib/menuetlibc/openjpeg/jp3d/tcltk/encoder.tcl create mode 100755 contrib/menuetlibc/openjpeg/jp3d/tcltk/logoLPI.gif create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-convert.Po create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-getopt.Po create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-image_to_j2k.Po create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-index.Po create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-color.Po create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-convert.Po create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-getopt.Po create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-index.Po create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-j2k_to_image.Po create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/bio.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/cio.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/crc.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/dwt.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/event.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/image.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/j2k.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/j2k_lib.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/jp2.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/jpt.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/jpwl.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/jpwl_lib.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/mct.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/mqc.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/openjpeg.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/pi.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/raw.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/rs.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/t1.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/t2.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/tcd.Plo create mode 100644 contrib/menuetlibc/openjpeg/jpwl/.deps/tgt.Plo create mode 100755 contrib/menuetlibc/openjpeg/jpwl/CMakeLists.txt create mode 100644 contrib/menuetlibc/openjpeg/jpwl/JPWL_image_to_j2k.dsp create mode 100644 contrib/menuetlibc/openjpeg/jpwl/JPWL_image_to_j2k.dsw create mode 100644 contrib/menuetlibc/openjpeg/jpwl/JPWL_j2k_to_image.dsp create mode 100644 contrib/menuetlibc/openjpeg/jpwl/JPWL_j2k_to_image.dsw create mode 100644 contrib/menuetlibc/openjpeg/jpwl/LibOpenJPEG_JPWL.dsp create mode 100644 contrib/menuetlibc/openjpeg/jpwl/Makefile create mode 100644 contrib/menuetlibc/openjpeg/jpwl/Makefile.am create mode 100644 contrib/menuetlibc/openjpeg/jpwl/Makefile.in create mode 100644 contrib/menuetlibc/openjpeg/jpwl/Makefile.nix create mode 100644 contrib/menuetlibc/openjpeg/jpwl/README.txt create mode 100644 contrib/menuetlibc/openjpeg/jpwl/crc.c create mode 100644 contrib/menuetlibc/openjpeg/jpwl/crc.h create mode 100644 contrib/menuetlibc/openjpeg/jpwl/jpwl.c create mode 100644 contrib/menuetlibc/openjpeg/jpwl/jpwl.h create mode 100644 contrib/menuetlibc/openjpeg/jpwl/jpwl_lib.c create mode 100644 contrib/menuetlibc/openjpeg/jpwl/rs.c create mode 100644 contrib/menuetlibc/openjpeg/jpwl/rs.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg.pc create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg.pc.in create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/bio.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/cio.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/dwt.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/event.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/image.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/j2k.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/j2k_lib.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/jp2.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/jpt.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/mct.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/mqc.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/openjpeg.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/pi.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/raw.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/t1.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/t2.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/tcd.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/.deps/tgt.Plo create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/CMakeLists.txt create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/Makefile create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/Makefile.am create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/Makefile.in create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/bio.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/bio.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/cio.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/cio.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/dwt.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/dwt.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/event.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/event.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/fix.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/image.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/image.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/int.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/j2k.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/j2k.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/j2k_lib.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/j2k_lib.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/jp2.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/jp2.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/jpt.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/jpt.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/lrintf.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/mct.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/mct.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/mqc.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/mqc.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/openjpeg.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/openjpeg.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/opj_includes.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/opj_malloc.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/pi.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/pi.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/raw.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/raw.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/t1.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/t1.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/t1_generate_luts.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/t1_luts.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/t2.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/t2.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/tcd.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/tcd.h create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/tgt.c create mode 100644 contrib/menuetlibc/openjpeg/libopenjpeg/tgt.h create mode 100755 contrib/menuetlibc/openjpeg/libs/lcms2/lcms2.h create mode 100755 contrib/menuetlibc/openjpeg/libs/lcms2/lcms2_plugin.h create mode 100755 contrib/menuetlibc/openjpeg/libs/lcms2/lcms2_static.lib create mode 100644 contrib/menuetlibc/openjpeg/libs/libtiff/libtiff.lib create mode 100644 contrib/menuetlibc/openjpeg/libs/libtiff/tiff.h create mode 100644 contrib/menuetlibc/openjpeg/libs/libtiff/tiffconf.h create mode 100644 contrib/menuetlibc/openjpeg/libs/libtiff/tiffio.h create mode 100755 contrib/menuetlibc/openjpeg/libs/libtiff/tiffio.hxx create mode 100644 contrib/menuetlibc/openjpeg/libs/libtiff/tiffvers.h create mode 100755 contrib/menuetlibc/openjpeg/libs/png/libpng14.lib create mode 100755 contrib/menuetlibc/openjpeg/libs/png/png.h create mode 100755 contrib/menuetlibc/openjpeg/libs/png/pngconf.h create mode 100755 contrib/menuetlibc/openjpeg/libs/png/zconf.h create mode 100755 contrib/menuetlibc/openjpeg/libs/png/zlib.h create mode 100755 contrib/menuetlibc/openjpeg/libs/png/zlib.lib create mode 100755 contrib/menuetlibc/openjpeg/libtool create mode 100755 contrib/menuetlibc/openjpeg/ltmain.sh create mode 100755 contrib/menuetlibc/openjpeg/missing create mode 100644 contrib/menuetlibc/openjpeg/mj2/.deps/color.Po create mode 100644 contrib/menuetlibc/openjpeg/mj2/.deps/extract_j2k_from_mj2.Po create mode 100644 contrib/menuetlibc/openjpeg/mj2/.deps/frames_to_mj2.Po create mode 100644 contrib/menuetlibc/openjpeg/mj2/.deps/getopt.Po create mode 100644 contrib/menuetlibc/openjpeg/mj2/.deps/mj2.Po create mode 100644 contrib/menuetlibc/openjpeg/mj2/.deps/mj2_convert.Po create mode 100644 contrib/menuetlibc/openjpeg/mj2/.deps/mj2_to_frames.Po create mode 100644 contrib/menuetlibc/openjpeg/mj2/.deps/wrap_j2k_in_mj2.Po create mode 100644 contrib/menuetlibc/openjpeg/mj2/CMakeLists.txt create mode 100644 contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.dsp create mode 100644 contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.dsw create mode 100644 contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.sln create mode 100644 contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.vcproj create mode 100644 contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.dsp create mode 100644 contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.dsw create mode 100644 contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.sln create mode 100644 contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.vcproj create mode 100644 contrib/menuetlibc/openjpeg/mj2/Makefile create mode 100644 contrib/menuetlibc/openjpeg/mj2/Makefile.am create mode 100644 contrib/menuetlibc/openjpeg/mj2/Makefile.in create mode 100644 contrib/menuetlibc/openjpeg/mj2/Makefile.nix create mode 100644 contrib/menuetlibc/openjpeg/mj2/extract_j2k_from_mj2.c create mode 100644 contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.c create mode 100644 contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.dsp create mode 100644 contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.dsw create mode 100644 contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.sln create mode 100644 contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.vcproj create mode 100644 contrib/menuetlibc/openjpeg/mj2/meta_out.c create mode 100644 contrib/menuetlibc/openjpeg/mj2/meta_out.h create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2.c create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2.h create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_convert.c create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_convert.h create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.c create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.dsp create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.dsw create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.sln create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.vcproj create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.c create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dsp create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dsw create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dtd create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.h create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.sln create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.vcproj create mode 100644 contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata_Notes.doc create mode 100644 contrib/menuetlibc/openjpeg/mj2/readme.txt create mode 100644 contrib/menuetlibc/openjpeg/mj2/wrap_j2k_in_mj2.c create mode 100644 contrib/menuetlibc/openjpeg/openjpeg.xcodeproj/project.pbxproj create mode 100644 contrib/menuetlibc/openjpeg/opj_config.h create mode 100644 contrib/menuetlibc/openjpeg/opj_config.h.in create mode 100644 contrib/menuetlibc/openjpeg/opj_config.h.in.user create mode 100644 contrib/menuetlibc/openjpeg/opj_configh.cmake.in create mode 100644 contrib/menuetlibc/openjpeg/stamp-h1 diff --git a/contrib/menuetlibc/Makefile b/contrib/menuetlibc/Makefile new file mode 100644 index 0000000000..4481c63216 --- /dev/null +++ b/contrib/menuetlibc/Makefile @@ -0,0 +1,2 @@ +default: + make -C openjpeg -I$(REPOSITORY)/programs/develop/libraries/menuetlibc/include \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/CHANGES b/contrib/menuetlibc/openjpeg/CHANGES new file mode 100644 index 0000000000..18a1c9894f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/CHANGES @@ -0,0 +1,817 @@ +What's New for OpenJPEG + +* : fixed +- : removed +! : changed ++ : added + +January 2, 2011 +* [antonin] bug fixes to enable cmake compilation on WIN32 platform + - fixed getopt bug in jpwl/CMakeLists.txt + - added png, zlib and lcms win32 libraries to libs directory + - updated libs/libtiff library + - moved j2k_dump_{image,cp} to j2k_dump.c to remain consistent with API interface + - changed mj2 cmake compilation method: as long as mj2 binaries do not strictly use the API interface, libopenjpeg source files are directly included in mj2 executables compilation. +! [antonin] small update to xcode project + +December 14, 2010 +! [szukw000] adapted Makefile.am/Makefile.nix to build + choice: shared xor static + +December 11, 2010 +* [antonin] fixed flags when building jp3d with MinGW + +December 10, 2010 +! [szukw000] changed build choice in configure.ac/Makefile.am/Makefile.nix: + shared xor static + +December 9, 2010 +! [antonin] removed LCMS dependency in jp3d/libjp3dvm/CMakeLists.txt +! [antonin] updated xcode project +! [antonin] renamed jp3d/libjp3dvm/openjpeg.h => jp3d/libjp3dvm/openjpeg3d.h +- [antonin] removed "codec/compat/" directory +* [szukw000] updated Makefile.in +! [szukw000] removed LCMS dependencies from Makefile.am/Makefile.nix + +December 8, 2010 + (thanks to Winfried for his help) +* [antonin] changed remaining "WIN32" to "_WIN32" +! [antonin] libopenjpeg has no more dependency on LCMS lib. Everything concerning color (icc profile, conversion to rgb, etc) has been put outside libopenjpeg and is used in j2k_to_image.c and mj2_to_frames.c. +- [antonin] removed 'opj_convert{.c,.h}' ++ [antonin] added a directory 'common/' that contains 'getopt{.c,.h}' (previously in 'codec/compat'). ++ [antonin] added files 'color{.c,.h}' in 'common/' that define the code for icc profile management and sycc_to_rgb conversion ++ [antonin] added 'common/format_defs.h' that contains common definitions used in image_to_j2k, j2k_to_image, j2k_dump. + +December 5, 2010 +! [antonin] revert to previous behaviour for cmake: builds (and links) dynamically by default. Static build only if -DBUILD_SHARED_LIBS is set to OFF. +* [antonin] added a definition in getopt.h and an initial value in convert.c + +December 3, 2010 +* [antonin] workaround for name clash when building static and dynamic on WIN32 (see http://www.vtk.org/Bug/view.php?id=10190 for description) + +November 28, 2010 +* [antonin] fixed a bug in codec/convert.c that prevented to build executables with WIN32 compiler (thanks winfried) +! [antonin] changed cmake behaviour: executables are now always statically linked. When -DBUIL_SHARED_LIBS option is ON (the default), the shared versions of the libraries are also built (but executables remain linked against the static libraries). + +November 25, 2010 +* [antonin] fix compilation and DLL creation of libopenjpeg with MSYS/MinGW (from vincent.torri, see issue 47 on googlecode) + +November 22, 2010 +! [antonin] xcode : changed to native architecture build by default +* [antonin] reverted 'include "../opj_config.h"' to 'include "opj_config.h"' + +November 17, 2010 +! [antonin] install man pages by default. install CHANGES and LICENSE +! [antonin] minor changes in cmake files (from winfried) + +November 16, 2010 +! [antonin] minor changes in cmake flags + +November 15, 2010 +! [antonin] xcode project rewrite. +! [antonin] changed imagetopng() function to correctly deal with non-standard bit-depths. Add png support for win32. (from winfried) +* [antonin] minor changes in header inclusions +* [antonin] complete rewrite of opj_convert.c with correct values (from winfried) + +November 11, 2010 +- [antonin] removed call to dirent.h in jp3d; + +October 28, 2010 +* [ben.boeckel] Set the soname and soversion on the jpwl library with CMake ++ [ben.boeckel] Install jpwl binaries with CMake + +October 26, 2010 +* [ben.boeckel] Install symlinks to versioned directory headers when using CMake ++ [ben.boeckel] Set the library version on jp3d when using CMake + +October 25, 2010 +* [ben.boeckel] Fix jp3d version + +October 24, 2010 +* [antonin] Fixed doxygen data inside source code (from winfried) + +October 22, 2010 +* [ben.boeckel] Don't install jp3d and libopenjpeg headers to the same place + +October 22, 2010 +* [ben.boeckel] Install man pages when using CMake + +October 22, 2010 +! [ben.boeckel] Default to building shared libraries + +October 22, 2010 +* [antonin] Patch to support the MSVC Win 64 builds (from szekerest) + +October 22, 2010 +* [antonin] Currently the Visual Studio builds are broken in the SVN. Attached a patch to fix this issue (from szekerest) + +October 22, 2010 +* [szukw000] replaced 'cp -d' with 'cp -P' for MacOSX + +October 22, 2010 +* [szukw000] 'jpwl/Makefile.am': added CFLAGS for bin_PROGRAMS + +October 22, 2010 ++ [szukw000] added 'libopenjpeg.pc.in' +! [szukw000] changed 'configure.ac' to create 'libopenjpeg.pc' +! [szukw000] changed 'Makefile.am' to [un]install 'libopenjpeg.pc' +! [szukw000] changed 'doc/Makefile.am' : 'uninstall-hook' added + +October 20, 2010 +* [antonin] fixed help display (patch from winfried) + +October 20, 2010 +* [antonin] + fixed paths to png and tiff in CMakeLists.txt (patch from winfried) + fixed link to lcms library (patch from winfried) + +October 18, 2010 +* [antonin] fixed options and help display (patch from winfried) + +October 18, 2010 +! [szukw000] + doc/Makefile.am + doc/Makefile.nix + jp3d/Makefile.nix + jpwl/Makefile.nix + Makefile.nix + config.nix + +October 17, 2010 +! [szukw000] + configure.ac : 'enable_shared' YES by default + doc/Makefile.am : + 'all-local' and 'install-data-hook' added + 'with_doxygen' conditional added + Makefile.am : 'doc' directory no longer substituted in SUBDIRS + + to link binaries statically: '-static' added to: + codec/Makefile.am + mj2/Makefile.am + jpwl/Makefile.am + jp3d/codec/Makefile.am + + mj2/Makefile.am : 'with_libjpwl' removed + mj2/Makefile.nix : 'with_libjpwl' removed + + config.nix : 'WITH_JPWL', 'WITH_JP3D' added + doc/Makefile.nix : 'clean', 'install', 'uninstall' added + Makefile.nix : 'WITH_JPWL', 'WITH_JP3D' added + + INSTALL : topic 3) changed regarding the changes in 'config.nix' + +October 13, 2010 +! [szukw000] + configure.ac + bootstrap.sh + + 'with_libjpwl' removed from: + libopenjpeg/Makefile.am + codec/Makefile.am + codec/Makefile.nix + Makefile.nix + +October 10, 2010 +* [antonin] Patch from winfried + + 1. The jp3d/libjp3dvm/Makefile.am has been changed: + + Installing: /usr/local/TEST_CONFIG/include/openjpeg3d-1.3/ + Installing: /usr/local/TEST_CONFIG/include/openjpeg3d-1.3/openjpeg3d.h + + PREFIX/include: + + 23 openjpeg.h -> openjpeg-1.4/openjpeg.h + 27 openjpeg3d.h -> openjpeg3d-1.3/openjpeg3d.h + + 28773 openjpeg-1.4/openjpeg.h + 22158 openjpeg3d-1.3/openjpeg3d.h + + 2. The jp3d/Makefile.nix has been changed respectivly. + + 3. The mj2/Makefile.nix contained a wrong path to 'compat/' + + 4. opj_config.h.in.user contained a comment within a comment. + + 5. 'autoreconf' reported that AC_PROG_RANLIB is no longer + necessary in 'configure.ac'. + +October 08, 2010 +* [antonin] fixed a bug in mj2.c that prevented extract_j2k_from_mj2 to build properly. Patch from winfried. + +October 04, 2010 ++ [antonin] Added files to let people build openjpeg with 'configure' tools ++ [antonin] Added makefiles to let people manually build openjpeg on *nix platforms +- [antonin] Removed obsolete Makefiles +! [antonin] Renamed dirent.h to windirent.h +! [antonin] Made optional the PNG, TIFF, and LCMS support in CMake files ++ [antonin] Added opj_config* files to configure openjpeg before building it (opj_config.h generated by 'configure', cmake, or manually by the user) +! [antonin] Renamed this file from ChangeLog to CHANGES +! [antonin] Renamed 'License.txt' to 'LICENSE' +! [antonin] Updated README files ++ [antonin] Added INSTALL and LICENSE files ++ [antonin] Added man pages + +June 22, 2010 ++ [MM] Apply patch from w. szukalski (sent to list) ++ [MM] Also dump the image info as well as cp info. + +June 21, 2010 ++ [MM] Added a j2k_dump to simply dump the parameter of a J2K file + +May 26, 2010 ++ [antonin] Added CTestConfig.cmake to the root directory to incorporate the testing dashboard. ++ [antonin] MACOSX : Added a "build all" target to the XCode project file. + +April 16, 2010 +* [antonin] MACOSX : Fixed the XCode project file to link with the PNG library. Library and header should be located in /usr/local/lib/ and /usr/local/include/, respectively. Check http://ethan.tira-thompson.org/Mac_OS_X_Ports.html if it is not the case on your mac. + +April 8, 2010 +* [FOD] Fixed issue 6 on google code. Variable "pi" not freed or pointed-to in function "pi_create_encode". Thanks to Kent Mein for reporting this. +* [FOD] Fixed problem with Borland C++ Builder (Borland C do not have lrintf). Thanks Marek Mauder for this fix. +* [FOD] Fixed pi.c bug (issue 15 on google code). Thanks to Anton Lionel for catching this. +* [FOD] Fixed MJ2 codec bugs (issues 23-24 on google code). Thanks to Winfried for these patches +* [FOD] Fixed JP3D codec file format analyzer. Thanks to Kristóf Ralovich for this patch. +! [FOD] Significant optimizations of MCT, DWT, MQ and T1 modules by Peter Wimmer (thanks Peter) + +March 26, 2010 ++ [FOD] Added support for "jpc" codestreams which are equivalent to "j2c" codestreams. Thanks to Winfried for this patch +* [FOD] Added support for PNG image format [Not yet functional under WIN32]. Thanks to Winfried for this patch. See details here http://code.google.com/p/openjpeg/issues/detail?id=16 + +March 24, 2010 +* [FOD] Code improvements using 'g++-4.4.0' to trace the code. Thanks to Winfried for this patch. + +March 7, 2010 +* [FOD] Fixed small compatibility issues with win32 in codec (moved include ) + +March 5, 2010 +! [FOD] Updated makefiles for v1.4 and v2.0 ++ [FOD] First import of OPJ_Validate tool + +February 18, 2010 +* [FOD] JP3D Module. Fixed issue when computing the number of elements in an array that leads to crash (thanks Kristof). Updated JP3D makefiles. + +January 20, 2010 +! [FOD] Created a new constant in openjpeg.h to differentiate the case when the colorspace is not supported by the library and when it is not specified in the codestream. Suggested by Matteo Italia. + +November 5, 2009 +* [antonin] fixed MCT check bug in t1_getwmsedec. See http://groups.google.com/group/openjpeg/browse_thread/thread/d9d96dd4ec3e7443 for info. + +November 5, 2009 +* [antonin] fixed "tiffio" header inclusion to use user version on Win32 system only (otherwise assume its existence in system headers). + +September 10, 2009 +* [antonin] fixed minor bugs which were triggering warnings at compilation (different signedness, wrong pointer type, etc) + +September 8, 2009 +* [antonin] openjpeg.c : fixed initialization of parameters->cp_disto_alloc/fixed_quality/fixed_alloc/tcp_numlayers because they were preventing to use the -q and -f options. + +August 31, 2009 +* [antonin] JavaOpenJpegDecoder.c : fixed a signed/unsigned behaviour when returning form C to JAVA + +August 21, 2008 +* [antonin] found a bug in tcd.c that was preventing to find the correct threshold in tcd_rateallocate.c for high-precision images. Applied a temporary patch but a better solution should be found. + +August 21, 2008 +* [antonin] fixed a bug in image_to_j2k.c that was preventing the 'r' option to work properly (everything was compressed lossless regardless of the specified rate). + +August 8, 2008 +! [FOD] Modified the way raw images with more that 8bpp are read and written + +July 9, 2008 ++ [Parvatha] Added the default lossless parameter to opj_set_default_encoder_parameters in openjpeg.c. + +June 12, 2008 +* [antonin] fixed a bug in dirent.h that prevented codec on Linux Alpha Systems to compile correctly. Thanks to RobinC. + +May 22, 2008 +* [antonin] fixed a bug in j2k.c (j2k_write_sod) that allowed to get negative rates, thanks zhong1985624 for pointing this. + +May 22, 2008 +* [antonin] additional test to avoid crash due to invalid image size, patch by Christopher Layne + +May 20, 2008 +* [antonin] memory leak fixed in openjpeg.c (opj_destroy_cstr_info()), patch by Carsten Juttner + +March 12, 2008 ++ [GB] help line for the -F option in j2k_to_image + +March 4, 2008 +! [FOD] Changed Java files copyright in JavaOpenJPEG module + +February 28, 2008 +* [FOD] Fixed openjpeg.c for proper initialization of codec context structures (dinfo in opj_create_compress() + and opj_create_decompress(). Bug fix suggested by Andrey V. Kiselev +* [FOD] Clean up of opj_aligned_malloc(), to just forgo the use of posix_memalign(), + as apparently memalign() is what is working better for everyone. Patch by Callum. + +February 28, 2008 +- [FOD] Removed the J2KViewer module, which has been replaced by OPJViewer +* [FOD] Fixed the error handling of j2k_decode in jp2.c, thanks to Robin Cornelius + +February 11, 2008 +* [GB] Minor style modifications to comply with c99 compiler flag; removed Microsoft-specific "union-in-struct" syntax; Re-enabled cstr_info struct creation when -W switch is specified +! [GB] Changed a number of things in opjviewer (e.g., decoding thread does not execute GUI calls anymore), to have it running under linux --> it is better than before, but still crashes + +February 5, 2008 +! [Parvatha] In convert.c, corrected imagetobmp() conversion for grayscale. In tcd.c, corrected Rate modification in + tcd_init_encode(). Thanks to Jeremy Furtek and Jérôme Fimes. + +January 31, 2008 +! [GB] In opjviewer, unification of JPEG 2000 family handlers (*.jp2, *.mj2, *.j2k) in a single file + +January 22, 2008 +! [FOD] In image.c, changed the opj_image_create0() memory allocation from malloc() to calloc() in order + to avoid segfaults when freeing the memory allocated for the coding of bad images. + Thanks to Christopher Layne for this improvement. + +January 17, 2008 ++ [antonin] Initial commit of Xcode project directory (XCode 2.5 for macosx) + available targets : libopenjpeg (stat and dyn), image_to_j2k, j2k_to_image + +January 16, 2008 +* [antonin] fixed opj_malloc.h for macosx (bugfix provided by janpeder, thanks) + +January 11, 2008 ++ [FOD] Added missing files to JavaOpenJPEG project (files from Patrick Piscaglia) + +January 4, 2008 +* [Parvatha] Patch by Callum Lerwick. Fixed bug during encoding using tile option in tcd.c + +---------------------- +December 21, 2007 +VERSION 1.3.0 RELEASED +---------------------- + +December 21, 2007 +* [FOD] Bug fixed by David Bruken. Fixed memory allocation issue in opj_malloc.h +! [FOD] Possible errors in pi_create_encode handled + +December 19, 2007 +* [Antonin] changed variables names alpha, beta, gamma, delta in dwt.c to avoid re-declarations on Macosx +! [Parvatha] In pi.c, removed the Recursive function pi_check_next_level() and modified the code. +* [FOD] Fixed allocation problem in pi.c + +December 19, 2007 ++ [FOD] In mqc.h, changed MQC_NUMCTXS from 32 to 19 as there are only 19 possible contexts + +December 10, 2007 ++ [FOD] First import of JAVAOpenJPEG, a Java wrapper of OpenJPEG, developed by Patrick Piscaglia of Telemis (www.telemis.com). + Thank you Patrick for this new module ! + +November 29, 2007 +! [GB] Added index.h and index.c in VC6 projects; wrapped index.h in the C++ preprocessor; modified OPJViewer project and some files. + +November 14, 2007 ++ [FOD] Created the file index.c in the codec directory. This file handles the creation of index files, + at encoding and decoding. +* [FOD] Fixed bugs during the creation of the index (PCRL progression order) +* [FOD] Fixed the maximum number of resolutions a user can discard while decoding. + Added an error state in J2K_STATE (j2k.c) + +November 14, 2007 +! [FOD] - First Patch by Callum Lerwick. Instead of reinventing realloc, j2k_read_sod now just uses opj_realloc in j2k.c + - Second Patch by Callum Lerwick. This patch rearranges the largest memory allocations so they're allocated as + late as possible, and freed as soon as possible. This cuts memory usage by about half on two large test images. + - Third Patch by Callum Lerwick. The opj_tcd_cblk array is one of the largest allocations, because it + contains a bunch of static buffers. This also makes it a major source of cache thrashing. This patch allocates + the buffers from the heap, and dynamically sizes them in the decoder. I have not yet managed to dynamically size + them in the encoder, getting the decoder to do it was tricky enough... I also split opj_tcd_cblk_t into separate + encode and decode versions. A lot of fields were not used by both, so this cuts its size even further. + +* [FOD] Avoided ABI breakage + +November 13, 2007 +! [FOD] Patch by Dzonatas and Callum Lerwick. + Fp/vectorization patch which basically converts most of the irreversible decode codepath to floating point, + eliminating a few rounds of int/fp conversion, resulting in a vast performance improvement, + and an increase in accuracy. + +November 8, 2007 +! [FOD] In t1.c, small change to avoid calling twice t1_getwmsedec() + Patches from Callum Lewick: + - Basic gcc optimization flags in cmake and makefile match. + - Fixed some spelling errors in dwt.c. + +November 5, 2007 +*+ [GB] Fixed a bug which prevented JPWL from working on multi-tiled images; added some more fields in the interface info structures +(keep a list of markers, save start packet number for each tile) + +October 23, 2007 +* [GB] Improved success for the linux build; OPJViewer shows all the COM contents + +October 18, 2007 +* [FOD] Changed the ROI parameter in the image_to_j2k codec to make it correspond to the documentation (i.e. -ROI c=0,U=25) +* [FOD] Patch from Callum Lewick. Memset patch. + The main idea of the patch is that currently opj_malloc clears all allocations, which unnecessarily + dirties up the cache and eats bandwidth. This patch makes it no longer do so, and I've painstakingly determined which allocations actually need + to be cleared and changed them to use opj_calloc() instead. I previously tried to just get rid of the opj_*alloc wrappers but that + idea was nixed, so this time I'm trying it with macros. I also put in a gcc pragma that helps enforce their use. Which got messy. :) It caught a + few places they weren't used but it also revealed that the mj2 tools are not very cleanly separated from the library. It includes all the + internal headers, but it wasn't using the malloc wrappers. I figured the binaries should be "external" and have minimal knowledge of the + internals of the library. I patched them to not include opj_includes.h, and include only the internal headers they actually need. However, + they're using the opj_clock() function, which is in with the malloc wrappers. So I decided to move the malloc wrappers to their own header. + But mj2.c seems to want to be "internal", so I patched it to use the wrappers. Note that this patch changes the semantics of opj_malloc, it no longer + clears the memory it allocates. If you need it to be cleared, you must use opj_calloc instead, or memset it yourself. It is also somewhat + invasive, please test it extensively. I've been pounding on it all summer with my test suite, Second Life, and valgrind, and it checks out clean. + +October 12, 2007 +* [FOD] Changed the way the image structure is allocated when the decoding parameters include some resolutions to discard. + This should have a significant impact for the decoding of huge images when some resolutions are discarder (-r parameter) + Warning: The output image size is now reduced when discarding resolutions ! + +October 10, 2007 +* [FOD] Patch from Callum Lewick. Clean up of j2klib.h for the aligned malloc stuff. + It makes it work right with mingw, as _mm_malloc() isn't a macro, attempts to pave the way to using cmake + to check for this stuff and combines a patch from Dana Fagerstrom at Sun that makes it use memalign() on Solaris + convert.c: Changed some error comments for TIFF images + +September 27, 2007 +* [FOD] Patch from Callum Lewick. Fixed dwt.c where an alignment in buffer was problematic under x86_64. + +September 25, 2007 +* [Mathieu Malaterre] BUG: Fix previous patch from Callum Lerwick. I have no + clue what CMAKE_INSTALL_LIBDIR refers too. Bump up cmake 2.2 restriction to + cmake 2.4 because of previous patch (not backward compatible). Properly set the SOVERSION in a cross plateform way (yes WIN32 is a platform) + +September 19, 2007 +* [Parvatha] Fixed issues with generation of SOP marker. + +September 18, 2007 +* [Parvatha] Fixed issues with Reading and Writing TIF images in convert.c to avoid segmentation fault. +* [Parvatha] Fixed issues relating to using user specified rates for CINEMA option for multiple images. + +September 17, 2007 +* [FOD] Fixed issues with cstr_info when codestream has components with different number of resolutions. +! [FOD] OpenJPEG library interface modified to retain compatibility with version 1.2 + +September 12, 2007 +* [FOD] Patch from Callum Lerwick. + Fixed the library linking so it links with the soversion properly set. + Fixes up the install targets so that it interacts properly with RPM. + Install target for MJ2. Sets some necessary and useful CFLAGS if gcc is in use. +* [FOD] Updated the MJ2 codec to be compatible with the recent changes in the OpenJPEG library + +September 11, 2007 +* [GB] JPWL encoding is finalized correctly into the JP2 file format; added an additional structure in opj_codestream_info, to keep a record of the written markers + +September 8, 2007 +* [GB] Adapted the JPWL and OPJViewer code to new interface; fixed a samll bug in JPWL which created large EPBs even when null protection was specified + +September 7, 2007 ++ [FOD] Indexes can now be generated when decoding J2K codestreams. +* [Mathieu Malaterre] Upon failure, properly return error code (!=0). +* [Mathieu Malaterre] CMake: Add cmake code to do testing if user has properly setup a testimages directory + +September 6, 2007 ++ [Mathieu Malaterre] CMake: start compiling mj2, jpwl and jp3d ++ [Mathieu Malaterre] CMake: output all executable/libs into one single directory ++ [Mathieu Malaterre] CMake: start compiling index_create ++ [Mathieu Malaterre] OpenJPEG.rc update copyright year ++ [Mathieu Malaterre] CMake: add Java j2kviewer but do not compile it using cmake since cmake has too poor support for Java. Should create a custom command running ant instead. ++ [Mathieu Malaterre] CMake: Add doxygen output ++ [GB] One more field in the codestream_info struct for recording the number of packets per tile part; JPWL now distributes the EPBs in all the tile part headers ++ [Mathieu Malaterre] CMake: Add very simple tests (simply run command line with no option) +* [Mathieu Malaterre] Fix unitialized read in img_fol (we may need a smarter initialize than memset) + +September 4, 2007 ++ [GB] Added some fields in the codestream_info structure: they are used to record the position of single tile parts. + Changed also the write_index function in the codec, to reflect the presence of this new information. + +September 3, 2007 ++ [GB] Added the knowledge of JPSEC SEC and INSEC markers (you have to compile the JPWL project). Management of these markers is limited to skipping them without crashing: + no real security function at this stage. Deprecated USE_JPSEC will be removed next + +August 31, 2007 +* [GB] Fixed save capabilities in OPJViewer due to recent code upgrade + +August 30, 2007 +* [FOD] Changed the OpenJPEG library interface to enable users to access information regarding the codestream (also called codestream index). + This index is usefull for all applications requiring to have a scalable acces to the codestream (like JPIP applications, ...) + Currently, this information is only available when encoding an image. ++ [FOD] Added the information regarding the end of packet position in the index + +August 28, 2007 +* [FOD] Fixed wrong destructors called in openjpeg.c +* [FOD] Fixed bug in j2k_decode_jpt_stream + +August 24, 2007 +* [Parvatha] The end of main header is calculated after TLM and POC marker for Dcinema. + +August 21, 2007 ++ [FOD] Added support for Visual Studio 2005 +* [FOD] Robustified MJ2 codecs +* [Parvatha] Solved problems with codec reading from image file directory when filename had more than one "." in name +* [Callum Lerwick] Minor cleanup patch, that gets rid of a bunch of "old style declaration" warnings from Intel's compiler +* [Callum Lerwick] Aligned malloc using Intel's _mm_malloc(). Cleanup on the t1 memory allocation, getting rid of some leftover debug code +* [Callum Lerwick] Memory leaks fixed +* [Callum Lerwick] Reworks of t1_updateflags to get rid of the shift operation +* [Callum Lerwick] mqc_setcurctx moved to the header to allow it to be inlined into the t1. +* [Callum Lerwick] Consolidated some calls to mqc_setcurctx. +* [Callum Lerwick] Cleaned up t1_generate_luts to output the proper types. +* [Callum Lerwick] Replaced the large ctxno_mag lookup table with a small bit of inline-able branchless code +* [Callum Lerwick] Moved the orient flipping into the ctxno_zc table. + +August 20, 2007 ++ [FOD] Added support for the TGA file format in the codec + +August 08, 2007 +* [Parvatha] Fixed the DCinema filesize allocation. It now includes the SOT marker size + +August 02, 2007 ++ [GB] Added a basic saving capability to OPJViewer + +July 18, 2007 +! [FOD] Updated libtiff library version to 3.8.2 (for WIN32) +* [FOD] Updated BMP and PxM truncation when decoding J2K files with more than 8 bits + +July 17, 2007 +* [FOD] Fixed raw option for images with more than three components + +July 17, 2007 ++ [FOD] Added support for RAW images. This module has been developped by the University of Perugia team. Thanks to them ! [image_to_j2k.c j2k_to_image.c convert.c convert.h] + +July 13, 2007 +! [FOD] Modified the memory allocation for codestreams containing multiple tiles. The memory is now allocated for each tile indenpendently, + leading to an important decrease of the virtual memory needed. [j2k.c tcd.h tcd.c] +! [FOD] Modified old comments about the ability to decode mega-images and comments about the disk size necessary to do this. [image_to_j2k.c and frames_to_mj2.c] +* [FOD] Added 2000 bytes for the memory allocation in cio.c for the minimum size of headers (useful in case of very small images) [cio.c] + +July 12, 2007 +* [GB] fixed a bug in JPWL module, which prevented to exploit the full error correction capability of RS codes (e.g. it gave up at 5 errors, + even if 6 were correctable); defined a JPWL_MAXIMUM_EPB_ROOM for better customization of the maximum dimension of EPBs (the dimension + is pre-calculated on an hypothesis, if it goes beyond 65535 there will be problems, thus we give a little less than the max, let's say 65450) + +July 8, 2007 +* [ANTONIN] fixed the size of the memory allocation in cio.c (confusion between bits and bytes) + +June 21, 2007 +* [FOD] Output image color space set when decoding a JP2 file in jp2.c ++ [GB] Previous, home, and next frame buttons for exploring MJ2 files in OPJViewer + +June 18, 2007 +* [GB] Reload image doesn't crash in OPJViewer; more settings saved to registry + +June 16, 2007 ++ [GB] Possibility to disable parsing in OPJViewer; also, saves common settings to the registry + +June 15, 2007 +* [FOD] Fixed the generation of index files + + +---------------------- +MAY 4, 2007 +VERSION 1.2.0 RELEASED +---------------------- + +May 4, 2007 +* [FOD] Bugs corrected in decoding of command line (getopt.c), in the handling of 16 bit files (t1.c and tcd.c) and the calculation of elapsed time for multiple tiles parts (tcd.c and tdc.h). + +June 2, 2007 ++ [GB] OPJViewer opens now BMP, PNG, GIF, PNM, TIFF (with wxWidgets internals); added an encoder settings tab, for future integration with "save file as..." in JPEG 2000 format + +May 31, 2007 +* [FOD] Fixed the handling of 16bit TIFF files for cinema compression. Modified "convert.c" +* [FOD] Fixed the parameters used for cinema compression (9-7 transform used instead of 5-3). Modified "image_to_j2k.c" + +May 24, 2007 +* [FOD] Bug fixed by Sylvain Munaut. Change in the reading of the POC marker. Since COD/COC can be anywhere in the header, the decoder cannot always know while decoding the POC marker + the value of numlayers and numresolution. + +May 23, 2007 +! [FOD] Patch suggested by Callum Lerwick : "This makes the t1 data arrays dynamic, which greatly reduces cache thrashing. Also, some minor cleanup to prevent unnecessary casts" + +May 22, 2007 +! [FOD] Patch suggested by Callum Lerwick : "Some formatting cleanups, + so that the long function definitions and calls fit on screen. Use of prefix increment which is theoretically faster, in practice any sane compiler can optimize a postfix + increment but its best not to count on such things. Consolidation of some redundant calculations in the inner loops, which becomes very useful in the future autovectorize patch." +! [FOD] Patch suggested by Callum Lerwick : "This changes the flag code in t1 to use a flag_t type, which can then be changed to reduce RAM usage. It is now typedef to a short." +! [FOD] Patch suggested by Callum Lerwick : "This patch makes the t1 LUTs static. I actually intend this as a prelude to possibly eliminating some or all of the LUTs entirely." + +May 11, 2007 +- [FOD] JP3D library Binaries removed from SVN. +! [FOD] MJ2 codec updated from LibOpenJPEG version 0.97 to LibOpenJPEG version 1. Hence, the MJ2 codec will now take advantage of all the improvements and optimizations done on the LibOpenJPEG library. +! [FOD] Possibility to choose to apply MCT (multiple component transform) enabled, and new decoding_limit: DECODE_ALL_BUT_PACKETS (openjpeg.h) + +April 26, 2007 ++ [gdcm] Add basic steps on how to use CMake for building examples (README.cmake) + +April 25, 2007 ++ [FOD] Modification of the openjpeg.h file to avoid and ABI break with v1.1, removed the dangerous #IFDEF JPWL and added tcp_mct in cparameters. + +April 23, 2007 ++ [GB] Enable/disable image decoding in OPJViewer + +April 12,2007 +* [Parvatha] Fixed Error in tiftoimage(). Modification in convert.c. + +April 10,2007 ++ [Parvatha] Accepting "j2c" as format for Encoding and Decoding. Modification in image_to_j2k.c. +* [Parvatha] Modified imagetotif() to read images with signed data. Modification in convert.c. + +April 5, 2007 +! [FOD] fix.h optimized. Thanks a lot to Dzonatas ! +! [FOD] dwt.c optimized. Thanks a lot to Dzonatas ! +! [FOD] t1.c optimized. Thanks a lot to Callum Lerwick ! + +April 4,2007 ++ [Parvatha] Digital cinema compliance for 4K chosen by "-cinema4K" option. Modification in image_to_j2k.c. ++ [Parvatha] Bit rate limitation for each color component. Modification in image_to_j2k.c, t2.c. +* [Parvatha] Modified and tested Progression order change "-POC" option. Modification in image_to_j2k.c, j2k.c, pi.c. ++ [Parvatha] Function j2k_check_poc_val() to check for possible loss of packets in case of wrong POC declaration. Modification in j2k.c. ++ [Parvatha] Structure T2_MODE. This tells if the t2_encode_packets() is called during Threshold calculation or in Final pass. Modification in j2k.h, tcd.c + +March 30, 2007 +* [GB] OPJViewer should now work under Linux, at least with not big j2k files. Tested under Suse 10.1 64 bit. + +March 29, 2007 +* [Parvatha] Enable accepting file names with `-´ symbol .Modification getopt.c +* [Parvatha] Rsiz profile name generation to be STD_RSIZ for profiles which are not DCI compliant.Modification in image_to_j2k.c +! [Parvatha] renamed convert_progression_order to j2k_convert_progression_order. Modification j2k.c +* [Parvatha] Calculation of number of tile part in each tile in j2k_calculate_tp. Modification j2k.c +! [Parvatha] j2k_setup_encoder to set bit rate limitation for digital cinema compliance with quality option. Modification in j2k.c +* [Parvatha] Equation to check multiple tile precincts. Modification pi.c +! [Parvatha] array size generation of pi->include in pi_initialise_encode().Modification in pi.c +* [Parvatha] modification in pi_create_encode for tile part generation.Modification in pi.c ++ [Parvatha] In tcd_rateallocate a variable stable_threshold which holds the valid threshold value. + This is used to avoid error in case of a wrong threshold value in the last iteration. Modification in tcd.c. + +March 28, 2007 +* [FOD] Fixed an historical bug in t1.c that leaded to the inclusion of useless 0xFF in the codestream. Thanks to Sylvain, Pascal and Parvatha ! + +March 27, 2007 ++ [GB] Improved parsing in OPJViewer, as well some minor aesthetic modifications; support for image rendering with bit depths lower than 8 bits; + can display an arbitrary frame of an MJ2 file (only in B/W, though); can reload a file; better resizing capabilities +* [GB] Following to Hervé's suggestions, all the exit() calls, added by JPWL strict checking in t2.c and j2k.c, + have been substituted with (object free'ing + opj_evt_message(EVT_ERROR) + return) ++ [GB] Added linking to TIFF library in the JPWL VC6 workspaces + +March 23, 2007 +* [antonin] Fixed Makefile.osx and changed Readme.osx accordingly + +March 21, 2007 +* [Parvatha] Fixed j2k_prog_order_list[]. Modifications in j2k.c. +* [Parvatha] Fixed t1_decode_cblks. Modifications in t1.c. + +March 20, 2007 ++ [Parvatha] Added feature for generation of tile parts. Modifications in image_to_j2k.c, openjpeg.c, j2k.c, pi.c ++ [Parvatha] Added function j2k_write_tlm(),to generate TLM marker for a Digital cinema compliant codestream. Modifications in j2k.c. + +March 14, 2007 +* [FOD] Fixed linux makefile, with help from David Fries and Guido + +March 7, 2007 ++ [Parvatha] Added option for Digital cinema profile compliant codestream. This can be chosen by "-cinema2K" or "-cinema4K" for a 2K and 4K compliance respectively. The feature for tileparts has not been implemented in this version. Modification in image_to_j2k.c ++ [Parvatha] Added the Digital Cinema profiles (CINEMA2K and CINEMA4K) to the list of profiles recognized in the codestream SIZ marker segment. Modification in openjpeg.h,j2k.c ++ [Parvatha] Added feature for constant quality within bitrate defined in Digital cinema standards. Modification in tcd.c +! [Parvatha] Modified the method of generation of buffer length. Modification in cio.c + + +March 1, 2007 +* [FOD] Modified codec projects (*.dsp) and makefile to include the tiff library (modified codec/image_to_j2k.dsp codec/j2k_to_image.dsp and codec/makefile) ++ [GB] Zoom capability and decoder settings dialog in OPJViewer; modified JPWL library .dsp project in order to create a library with embedded JPWL functions + +February 28, 2007 ++ [Parvatha] Enabled compression of TIF image format to j2k by tifftoimage() and decompression of codestream to TIF image format using imagetotif(). Modifications in image_to_j2k.c, j2k_to_image.c, convert.c, convert.h +* [antonin] fixed a bug in context numerotation that prevented the RESET switch to work correctly : mqc_reset_enc in mqc.c +* [Fod] Corrected codec Makefile by adding the compilation of "compat/getopt.c" + +February 27, 2007 +* [Parvatha] Made get_file_format function more robust. Modifications in image_to_j2k.c, j2k_to_image.c, getopt.c, getopt.h + +February 26, 2007 ++ [Parvatha] Option to read images from a Folder whose path is specified in the Input parameters by "-ImgDir" along with output decod format specified by "-OutFor" . Modifications in image_to_j2k.c, j2k_to_image.c, getopt.c, getopt.h ++ [Parvatha] Enabling use of multi character input parameters in the codec. Modifications in image_to_j2k.c, j2k_to_image.c, getopt.c, getopt.h + +---------------------- +February 23, 2007 +VERSION 1.1.1 RELEASED +---------------------- + +February 23, 2007 +* [GB] Fixed a copy-and-paste type assignment error (bool instead of int) in the JPWL section of decoder parameters structure in openjpeg.h; minor type-casting in jpwl_lib.c. + As a result, now OPJViewer should run correctly when built against the most current SVN trunk of LibOpenJPEG.lib ++ [GB] Linux makefile for the JPWL module; newlines at end of JPWL files + +February 22, 2007 ++ [FOD] Added the OPJViewer Module (/OPJViewer), developed by Giuseppe Baruffa of the university of Perugia + +February 21, 2007 ++ [FOD] Algorithmic optimizations in t1.c, thanks to Guido J. ! + +February 19, 2007 ++ [FOD] Added OPJ_LIMIT_DECODING enabling us to limit the decoding to main header (modified openjpeg.c, openjpeg.h, j2k.c and j2k.h) + +February 13, 2007 +! [FOD] David Fries suggestions. In image_to_j2k and j2k_to_image, strncpy() functions: instead of specifying the path size macro, let the compiler read the length out of the array entry. +! [FOD] David Fries suggestions. Makefile modified. -fPIC flag used for 64-bit compilation. Move operation (rather than copy) for the dist library creation, and -p flag added. + +January 31, 2007 +! [FOD] Extra tokens at the end of #endif directive corrected in openjpeg.c, j2k.c and image_to_j2k.c -> no more warnings in linux compilation +! [FOD] Linux Makefile added for the codec + +January 30, 2007 +! [FOD] Use of OPJ_PATH_LEN (defined as 4096) to be the maximum allowed size for filenames instead of MAX_PATH which is not always defined. This caused some programs using OpenJPEG to crash. Modifications in openjpeg.h j2k_to_image.c and image_to_j2k.c +! [FOD] Correction of the syntax usage in MJ2_codec/mj2_to_frames.c + +January 23, 2007 +! [FOD] Modification in the context numbers, to reflect what has been specified in standard, in libopenjpeg/t1.h + +December 07, 2006 ++ [Giuseppe Baruffa] Antonin verified that the MacOS build suffered from a missing definition of the "min" macro; I've added this definition (properly #ifndef'ed) into both jpwl.h and rs.h + +December 05, 2006 +* [Giuseppe Baruffa] Better fix of the TPH EPBs bug in JPWL module +* [GB] Fixed the UEP bug in JPWL module; now, during a UEP specification, RS protection or CRC check can be switched off for selected range of packets, and consequently reswitched on without confusing the decoder ++ [GB] Added some lines in the help of JPWL_image_to_j2k, specifying that when using error protection on data packets, this must be paired with header protection, i.e. there cannot be packet protection without header protection + +December 04, 2006 + ++ [Francois-Olivier Devaux] New tag: version1.0 (includes codec and libopenjpeg directories) +Total update of JPWL module + - [FOD] removed directories jpwl/decoder, jpwl/encoder, jpwl/decoder_02, jpwl/encoder_02 + + [FOD] added in JPWL directory crc.h, jpwl.h, rs.h, crc.c, jpwl.c, jpwl_lib.c, rs.c, JPWL_image_to_j2k.dsp, JPWL_j2k_to_image.dsp, LibOpenJPEG_JPWL.dsp, JPWL_image_to_j2k.dsw, JPWL_j2k_to_image.dsw + ! [FOD] Modifications of libopenjpeg to integrate JPWL module (in libopenjpeg directory): j2k.c, j2k.h, openjpeg.c, openjpeg.h, opj_includes.g, t2.c + ! [FOD] Modification of codec to integrate JPWL module (in codec directory): image_to_j2k.c, j2k_to_image.c +* [FOD] Corrected incorrect fprintf() formatting in codec/convert.c +* [FOD] Code optimization usinq vsprintf() command in libopenjpeg/event.c +* [Giuseppe Baruffa] Fixed a bug in TPH EPBs parameters: now, "last in current header" information is correctly signaled + +October 31, 2006 +* [Antonin] fixed a bug in the computation of the mantissa (mu) ++ [Antonin] added the ability to specify the rate as "float" (before : integer) + +August 18, 2006 +* [Antonin] fixed a bug in j2k_to_image.c, that prevented the -l option to work correctly. + +August 4, 2006 +* [Antonin] fixed a bug in pi.c, line 473, that appeared when more than 100 precincts were generated in a resolution level. + +July 28, 2006 ++ [Antonin Descampe] added a readme in /mj2 to warn people that it only works with opj0.97 + +July 21, 2006 +* [Mathieu Malaterre] Install exe and lib and include correctly +* [Mathieu Malaterre] Fixed mem leaks and greyscale bmp +* [Mathieu Malaterre] Fix pgx name length + random memory access +! [Mathieu Malaterre] API is now const + +March 19, 2006 +* [Antonin] fixed a bug in t1.c that prevented in some cases a true lossless compression (thanks to Don Mimlitch for reporting this bug) + +February 12, 2006 +- [Herve Drolon] removed unneeded working variables in opj_tcd_t + +February 04, 2006 +* [galt] fixed a bug in codec/convert.c::imagetobmp + +February 01, 2006 +! [Herve Drolon] changed function definitions of INT and FIX modules to 'inline' ++ [Herve Drolon] added a VERSION resource to the DLL version of OpenJPEG + +January 31, 2006 +* [Mathieu Malaterre] Fix compilation using default openjpeg.dsw +* [Herve Drolon] fixed various minor warnings occuring under icc9 and bcc32 +- [Mathieu Malaterre] Remove all references to OPJ_EXPORT, no declspec in header file anymore ++ [Mathieu Malaterre] Add a def.in file which is a template for Module Definition ++ [Herve Drolon] added MSVC project and compiler directives to build a 'standard' WIN32 DLL +! [Mathieu Malaterre] Update CMake to match the new shared lib system (no more def file) + +January 27, 2006 +* [Antonin Descampe] fixed a two initialization problems in t1.c and tcd.c + +January 26, 2006 +* [Herve Drolon] fixed various minor warnings occuring under gcc +* [__david__] fixed a segfault in codec/image_to_j2k.c & codec/j2k_to_image.c +* [__david__] fixed help option in codec/j2k_to_image & codec/image_to_j2k + +January 25, 2006 +! [Mathieu Malaterre] Sync with ITK repository, also add ref to doxygen +! [Mathieu Malaterre] Add a lot of comments on the CMake build system +! [Mathieu Malaterre] Fix MINGW32 and BORLAND compilation problems. + +January 25, 2006 +* [Antonin Descampe] fixed a problem in convert.c when multiple comments ++ [Antonin Descampe] added cmake files to the project +! [Antonin Descampe] fix.c : replaced "WIN32" by "_MSC_VER" for int64 ++ [Antonin Descampe] added "OPJ_EXPORT" in openjpeg.h to generate shared lib with win32 +! [Antonin Descampe] removed all CtrlM from files + +January 24, 2006 +! [Antonin Descampe] event.c : replaced "WIN32" by "_MSC_VER" for i2a + +January 20, 2006 +* [Antonin Descampe] fixed various minor warnings with gdcm patches + +January 19, 2006 +* [Herve Drolon] fixed a bug in jp2_read_ihdr (need to allocate jp2->comps) + +January 18, 2006 +* [Herve Drolon] changed the name of j2k_realloc to opj_realloc +* [Herve Drolon] fixed a bug in opj_cio_open when saving 48-bit images (wrong buffer size calculation) + +December 8, 2005 +* [Antonin Descampe] fixed a bug when specifying a rate '-r' => no distortion info was available in the index +* [Antonin Descampe] fixed a bug in t1_getwmsedec (stepsize was divided by 8192) + +December 5, 2005 - 1.1.0 diff --git a/contrib/menuetlibc/openjpeg/CMake/CTestCustom.cmake.in b/contrib/menuetlibc/openjpeg/CMake/CTestCustom.cmake.in new file mode 100644 index 0000000000..00ad66703b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/CMake/CTestCustom.cmake.in @@ -0,0 +1,21 @@ +# +# For further details regarding this file, +# see http://www.vtk.org/Wiki/CMake_Testing_With_CTest#Customizing_CTest +# + +SET (CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS 50) +SET (CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS 50) + +SET(CTEST_CUSTOM_COVERAGE_EXCLUDE + ${CTEST_CUSTOM_COVERAGE_EXCLUDE} + + # Exclude files from the Testing directories + ".*/Testing/.*" + ) + +SET(CTEST_CUSTOM_WARNING_EXCEPTION + ${CTEST_CUSTOM_WARNING_EXCEPTION} + + # Suppress warning caused by intentional messages about deprecation + ".*warning,.* is deprecated" +) diff --git a/contrib/menuetlibc/openjpeg/CMake/CheckHaveGetopt.cmake b/contrib/menuetlibc/openjpeg/CMake/CheckHaveGetopt.cmake new file mode 100644 index 0000000000..c0fd5dcf91 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/CMake/CheckHaveGetopt.cmake @@ -0,0 +1,15 @@ +# Check if getopt is present: +INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake) +SET(DONT_HAVE_GETOPT 1) +IF(UNIX) #I am pretty sure only *nix sys have this anyway + CHECK_INCLUDE_FILE("getopt.h" CMAKE_HAVE_GETOPT_H) + # Seems like we need the contrary: + IF(CMAKE_HAVE_GETOPT_H) + SET(DONT_HAVE_GETOPT 0) + ENDIF(CMAKE_HAVE_GETOPT_H) +ENDIF(UNIX) + +IF(DONT_HAVE_GETOPT) + ADD_DEFINITIONS(-DDONT_HAVE_GETOPT) +ENDIF(DONT_HAVE_GETOPT) + diff --git a/contrib/menuetlibc/openjpeg/CMake/OpenJPEGConfig.cmake.in b/contrib/menuetlibc/openjpeg/CMake/OpenJPEGConfig.cmake.in new file mode 100644 index 0000000000..91f9a4d510 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/CMake/OpenJPEGConfig.cmake.in @@ -0,0 +1,48 @@ +#----------------------------------------------------------------------------- +# +# OPENJPEGConfig.cmake - CMake configuration file for external projects. +# +# This file is configured by OPENJPEG and used by the UseOPENJPEG.cmake +# module to load OPENJPEG's settings for an external project. +@OPENJPEG_CONFIG_INSTALL_ONLY@ +# The OPENJPEG version number. +SET(OPENJPEG_MAJOR_VERSION "@OPENJPEG_VERSION_MAJOR@") +SET(OPENJPEG_MINOR_VERSION "@OPENJPEG_VERSION_MINOR@") +SET(OPENJPEG_BUILD_VERSION "@OPENJPEG_VERSION_BUILD@") + +# The libraries. +SET(OPENJPEG_LIBRARIES "@OPENJPEG_LIBRARIES@") + +# The CMake macros dir. +SET(OPENJPEG_CMAKE_DIR "@OPENJPEG_CMAKE_DIR_CONFIG@") + +# The configuration options. +SET(OPENJPEG_BUILD_SHARED_LIBS "@OPENJPEG_BUILD_SHARED_LIBS@") + +# The "use" file. +SET(OPENJPEG_USE_FILE "@OPENJPEG_USE_FILE_CONFIG@") + +get_filename_component(SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +if(EXISTS ${SELF_DIR}/OpenJPEGTargets.cmake) + # This is an install tree + include(${SELF_DIR}/OpenJPEGTargets.cmake) + get_filename_component(OPENJPEG_INCLUDE_ROOT "${SELF_DIR}/../../@OPENJPEG_INSTALL_INCLUDE_DIR@" ABSOLUTE) + set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG_INCLUDE_ROOT}) + +else(EXISTS ${SELF_DIR}/OpenJPEGTargets.cmake) + if(EXISTS ${SELF_DIR}/OpenJPEGExports.cmake) + # This is a build tree + SET( OPENJPEG_INCLUDE_DIRS @OPENJPEG_INCLUDE_PATH@) + + include(${SELF_DIR}/OpenJPEGExports.cmake) + + else(EXISTS ${SELF_DIR}/OpenJPEGExports.cmake) + message(FATAL_ERROR "ooops") + endif(EXISTS ${SELF_DIR}/OpenJPEGExports.cmake) +endif(EXISTS ${SELF_DIR}/OpenJPEGTargets.cmake) + +set(OPENJPEG_USE_FILE ${SELF_DIR}/UseOPENJPEG.cmake) + +# Backward compatible part: +SET(OPENJPEG_FOUND TRUE) + diff --git a/contrib/menuetlibc/openjpeg/CMakeLists.txt b/contrib/menuetlibc/openjpeg/CMakeLists.txt new file mode 100644 index 0000000000..52150f5fd9 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/CMakeLists.txt @@ -0,0 +1,367 @@ +# Main CMakeLists.txt to build the OpenJPEG project using CMake (www.cmake.org) +# Written by Mathieu Malaterre + +# This CMake project will by default create a library called openjpeg +# But if you want to use this project within your own (CMake) project +# you will eventually like to prefix the library to avoid linking confusion +# For this purpose you can define a CMake var: OPENJPEG_NAMESPACE to whatever you like +# e.g.: +# SET(OPENJPEG_NAMESPACE "GDCMOPENJPEG") +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +IF(COMMAND CMAKE_POLICY) + CMAKE_POLICY(SET CMP0003 NEW) +ENDIF(COMMAND CMAKE_POLICY) + +IF(NOT OPENJPEG_NAMESPACE) + SET(OPENJPEG_NAMESPACE "OPENJPEG") + SET(OPENJPEG_STANDALONE 1) +ENDIF(NOT OPENJPEG_NAMESPACE) +# In all cases: +STRING(TOLOWER ${OPENJPEG_NAMESPACE} OPENJPEG_LIBRARY_NAME) + +PROJECT(${OPENJPEG_NAMESPACE} C) + +# Do full dependency headers. +INCLUDE_REGULAR_EXPRESSION("^.*$") + +#----------------------------------------------------------------------------- +# OPENJPEG version number, useful for packaging and doxygen doc: +SET(OPENJPEG_VERSION_MAJOR 1) +SET(OPENJPEG_VERSION_MINOR 4) +SET(OPENJPEG_VERSION_BUILD 0) +SET(OPENJPEG_VERSION + "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}") +SET(PACKAGE_VERSION + "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}") +# This setting of SOVERSION assumes that any API change +# will increment either the minor or major version number of openjpeg +SET(OPENJPEG_LIBRARY_PROPERTIES + VERSION "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}" + SOVERSION "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}" +) +# You will also need to define a value for the following variables: +# OPENJPEG_INSTALL_BIN_DIR - binary dir (executables) +# OPENJPEG_INSTALL_LIB_DIR - library dir (libs) +# OPENJPEG_INSTALL_DATA_DIR - share dir (say, examples, data, etc) +# OPENJPEG_INSTALL_INCLUDE_DIR - include dir (headers) + + +# On Visual Studio 8 MS deprecated C. This removes all 1.276E1265 security +# warnings +IF(WIN32) + IF(NOT BORLAND) + IF(NOT CYGWIN) + IF(NOT MINGW) + IF(NOT ITK_ENABLE_VISUAL_STUDIO_DEPRECATED_C_WARNINGS) + ADD_DEFINITIONS( + -D_CRT_FAR_MAPPINGS_NO_DEPRECATE + -D_CRT_IS_WCTYPE_NO_DEPRECATE + -D_CRT_MANAGED_FP_NO_DEPRECATE + -D_CRT_NONSTDC_NO_DEPRECATE + -D_CRT_SECURE_NO_DEPRECATE + -D_CRT_SECURE_NO_DEPRECATE_GLOBALS + -D_CRT_SETERRORMODE_BEEP_SLEEP_NO_DEPRECATE + -D_CRT_TIME_FUNCTIONS_NO_DEPRECATE + -D_CRT_VCCLRIT_NO_DEPRECATE + -D_SCL_SECURE_NO_DEPRECATE + ) + ENDIF(NOT ITK_ENABLE_VISUAL_STUDIO_DEPRECATED_C_WARNINGS) + ENDIF(NOT MINGW) + ENDIF(NOT CYGWIN) + ENDIF(NOT BORLAND) +ENDIF(WIN32) + + +# -------------------------------------------------------------------------- +# Install directories + +STRING(TOLOWER ${PROJECT_NAME} projectname) +SET(subdir "${projectname}-${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}") + +IF(NOT OPENJPEG_INSTALL_BIN_DIR) + SET(OPENJPEG_INSTALL_BIN_DIR "bin") +ENDIF(NOT OPENJPEG_INSTALL_BIN_DIR) + +IF(NOT OPENJPEG_INSTALL_LIB_DIR) + SET(OPENJPEG_INSTALL_LIB_DIR "lib") +ENDIF(NOT OPENJPEG_INSTALL_LIB_DIR) + +IF(NOT OPENJPEG_INSTALL_DATA_DIR) + SET(OPENJPEG_INSTALL_DATA_DIR "share/${subdir}") +ENDIF(NOT OPENJPEG_INSTALL_DATA_DIR) + +IF(NOT OPENJPEG_INSTALL_INCLUDE_DIR) + SET(OPENJPEG_INSTALL_INCLUDE_DIR "include/") +ENDIF(NOT OPENJPEG_INSTALL_INCLUDE_DIR) + +IF(NOT OPENJPEG_INSTALL_MAN_DIR) + SET(OPENJPEG_INSTALL_MAN_DIR "share/man/") +ENDIF(NOT OPENJPEG_INSTALL_MAN_DIR) + +IF(NOT OPENJPEG_INSTALL_DOC_DIR) + SET(OPENJPEG_INSTALL_DOC_DIR "share/doc/${subdir}") +ENDIF(NOT OPENJPEG_INSTALL_DOC_DIR) + +IF(NOT OPENJPEG_INSTALL_PACKAGE_DIR) + SET(OPENJPEG_INSTALL_PACKAGE_DIR ${OPENJPEG_INSTALL_LIB_DIR}/${subdir} + CACHE INTERNAL "") +ENDIF(NOT OPENJPEG_INSTALL_PACKAGE_DIR) + +#----------------------------------------------------------------------------- +# Test for some required system information. +INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityC.cmake) + +#----------------------------------------------------------------------------- +# Test for getopt being available in this system +INCLUDE (${PROJECT_SOURCE_DIR}/CMake/CheckHaveGetopt.cmake ) + +#----------------------------------------------------------------------------- +# Setup file for setting custom ctest vars +CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/CMake/CTestCustom.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake + @ONLY + ) + +#----------------------------------------------------------------------------- +# OpenJPEG build configuration options. +OPTION(BUILD_SHARED_LIBS "Build OpenJPEG shared library and link executables against it." ON) + +#----------------------------------------------------------------------------- +SET (EXECUTABLE_OUTPUT_PATH ${OPENJPEG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all executables.") +SET (LIBRARY_OUTPUT_PATH ${OPENJPEG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all libraries.") +MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH) + + +# configure name mangling to allow multiple libraries to coexist +# peacefully +IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in) +SET(MANGLE_PREFIX ${OPENJPEG_LIBRARY_NAME}) +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in + ${CMAKE_CURRENT_BINARY_DIR}/openjpeg_mangle.h + @ONLY IMMEDIATE) +ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in) + +#----------------------------------------------------------------------------- +# Always build the library +INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) +SUBDIRS(libopenjpeg) + +#----------------------------------------------------------------------------- +# Build CODEC executables ? +OPTION(BUILD_CODEC "Build the CODEC executables" ON) +IF(BUILD_CODEC) + SUBDIRS(codec) +ENDIF(BUILD_CODEC) + +#----------------------------------------------------------------------------- +# Build MJ2 executables ? +OPTION(BUILD_MJ2 "Build the MJ2 executables." OFF) +IF(BUILD_MJ2) + SUBDIRS(mj2) +ENDIF(BUILD_MJ2) + +#----------------------------------------------------------------------------- +# Build JPWL executables ? +OPTION(BUILD_JPWL "Build the JPWL executables" OFF) +IF(BUILD_JPWL) + SUBDIRS(jpwl) +ENDIF(BUILD_JPWL) + +#----------------------------------------------------------------------------- +# Build JP3D executables ? +OPTION(BUILD_JP3D "Build the JP3D executables" OFF) +IF(BUILD_JP3D) + SUBDIRS(jp3d) +ENDIF(BUILD_JP3D) + +#----------------------------------------------------------------------------- +# Build INDEXER_JPIP executables ? +OPTION(BUILD_INDEXER_JPIP "Build the INDEXER_JPIP executables" OFF) +IF(BUILD_INDEXER_JPIP AND NOT UNIX) + SUBDIRS(indexer_JPIP) +ENDIF(BUILD_INDEXER_JPIP AND NOT UNIX) + +#----------------------------------------------------------------------------- +# Build DOCUMENTATION ? +OPTION(BUILD_DOC "Build the doxygen documentation" OFF) +IF(BUILD_DOC) + SUBDIRS(doc) +ENDIF(BUILD_DOC) + +#----------------------------------------------------------------------------- +# For openjpeg team if they ever want CDash+CMake +OPTION(BUILD_TESTING "Build the tests." OFF) +IF(BUILD_TESTING) + ENABLE_TESTING() + INCLUDE(CTest) +ENDIF(BUILD_TESTING) + +# Adding test with dataset from: +# http://www.crc.ricoh.com/~gormish/jpeg2000conformance/ +# -> wget http://www.crc.ricoh.com/~gormish/jpeg2000conformance/j2kp4files_v1_5.zip +# http://www.jpeg.org/jpeg2000guide/testimages/testimages.html +#----------------------------------------------------------------------------- +# Adding JPEG2000_CONFORMANCE_DATA_ROOT +FIND_PATH(JPEG2000_CONFORMANCE_DATA_ROOT testimages.html + ${OPENJPEG_SOURCE_DIR}/../jpeg2000testimages + $ENV{JPEG2000_CONFORMANCE_DATA_ROOT} +) + +#----------------------------------------------------------------------------- +# Compiler specific flags: +IF(CMAKE_COMPILER_IS_GNUCC) + # For all builds, make sure openjpeg is std99 compliant: + # SET(CMAKE_C_FLAGS "-Wall -std=c99 ${CMAKE_C_FLAGS}") # FIXME: this setting prevented us from setting a coverage build. + # Do not use ffast-math for all build, it would produce incorrect results, only set for release: + SET(CMAKE_C_FLAGS_RELEASE "-ffast-math ${CMAKE_C_FLAGS_RELEASE}") +ENDIF(CMAKE_COMPILER_IS_GNUCC) + +# install all targets referenced as OPENJPEGTargets +install(EXPORT OpenJPEGTargets DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR}) +CONFIGURE_FILE( ${OPENJPEG_SOURCE_DIR}/CMake/OpenJPEGConfig.cmake.in + ${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake + @ONLY +) +INSTALL( FILES ${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake + DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR} +) +# install CHANGES and LICENSE +INSTALL( + FILES CHANGES + LICENSE + DESTINATION ${OPENJPEG_INSTALL_DOC_DIR}) +# +IF(UNIX OR CYGWIN) + SET(CMAKE_INCLUDE_PATH /usr/include /usr/local/include /opt/include + /opt/local/include /usr/include/libpng /usr/include/libpng14 + /usr/include/libpng12 /usr/local/include/libpng + /usr/local/include/libpng14 /usr/local/include/libpng12 + /opt/include/libpng /opt/include/libpng14 /opt/include/libpng12 + /opt/local/include/libpng /opt/local/include/libpng14 + /opt/local/include/libpng12 ) + SET(CMAKE_LIBRARY_PATH /usr/lib /usr/local/lib /opt/lib /opt/local/lib) +ELSEIF(WIN32) + SET(CMAKE_INCLUDE_PATH ${OPENJPEG_SOURCE_DIR}/libs/libtiff + ${OPENJPEG_SOURCE_DIR}/libs/png ${OPENJPEG_SOURCE_DIR}/libs/lcms2 + C:/WINDOWS/system32/user ) + SET(CMAKE_LIBRARY_PATH ${OPENJPEG_SOURCE_DIR}/libs/libtiff + ${OPENJPEG_SOURCE_DIR}/libs/png ${OPENJPEG_SOURCE_DIR}/libs/lcms2 + C:/WINDOWS/system32/user ) +ENDIF() +# +FIND_FILE(HAVE_STRINGS_H_FOUND strings.h) +IF(NOT HAVE_STRINGS_H_FOUND STREQUAL "HAVE_STRINGS_H_FOUND-NOTFOUND") + FIND_FILE(HAVE_STRINGS_H strings.h) + SET(HAS_STRINGS_H 1) +ENDIF() +FIND_FILE(HAVE_INTTYPES_H_FOUND inttypes.h) +IF(NOT HAVE_INTTYPES_H_FOUND STREQUAL "HAVE_INTTYPES_H_FOUND-NOTFOUND") + FIND_FILE(HAVE_INTTYPES_H inttypes.h) + SET(HAS_INTTYPES_H 1) +ENDIF() +FIND_FILE(HAVE_MEMORY_H_FOUND memory.h) +IF(NOT HAVE_MEMORY_H_FOUND STREQUAL "HAVE_MEMORY_H_FOUND-NOTFOUND") + FIND_FILE(HAVE_MEMORY_H memory.h) + SET(HAS_MEMORY_H 1) +ENDIF() +FIND_FILE(HAVE_STDINT_H_FOUND stdint.h) +IF(NOT HAVE_STDINT_H_FOUND STREQUAL "HAVE_STDINT_H_FOUND-NOTFOUND") + FIND_FILE(HAVE_STDINT_H stdint.h) + SET(HAS_STDINT_H 1) +ENDIF() +FIND_FILE(HAVE_STDLIB_H_FOUND stdlib.h) +IF(NOT HAVE_STDLIB_H_FOUND STREQUAL "HAVE_STDLIB_H_FOUND-NOTFOUND") + FIND_FILE(HAVE_STDLIB_H stdlib.h) + SET(HAS_STDLIB_H 1) +ENDIF() +FIND_FILE(HAVE_STRING_H_FOUND string.h) +IF(NOT HAVE_STRING_H_FOUND STREQUAL "HAVE_STRING_H_FOUND-NOTFOUND") + FIND_FILE(HAVE_STRING_H string.h) + SET(HAS_STRING_H 1) +ENDIF() +FIND_FILE(HAVE_SYS_STAT_H_FOUND sys/stat.h) +IF(NOT HAVE_SYS_STAT_H_FOUND STREQUAL "HAVE_SYS_STAT_H_FOUND-NOTFOUND") + FIND_FILE(HAVE_SYS_STAT_H sys/stat.h) + SET(HAS_SYS_STAT_H 1) +ENDIF() +FIND_FILE(HAVE_SYS_TYPES_H_FOUND sys/types.h) +IF(NOT HAVE_SYS_TYPES_H_FOUND STREQUAL "HAVE_SYS_TYPES_H_FOUND-NOTFOUND") + FIND_FILE(HAVE_SYS_TYPES_H sys/types.h) + SET(HAS_SYS_TYPES_H 1) +ENDIF() +FIND_FILE(HAVE_UNISTD_H_FOUND unistd.h) +IF(NOT HAVE_UNISTD_H_FOUND STREQUAL "HAVE_UNISTD_H_FOUND-NOTFOUND") + FIND_FILE(HAVE_UNISTD_H unistd.h) + SET(HAS_UNISTD_H 1) +ENDIF() +# +# Does the system have png library installed ? +# +FIND_PACKAGE(PNG) +# +IF(PNG_FOUND) + SET(HAVE_PNG_H 1) + SET(HAVE_LIBPNG 1) +ENDIF() +# +# Does the system have tiff library installed ? +# +FIND_PACKAGE(TIFF) +# +IF(TIFF_FOUND) + SET(HAVE_TIFF_H 1) + SET(HAVE_LIBTIFF 1) +ENDIF() +# +# +# Does the system have lcms library installed ? +# +SET(LCMS_LIB "") +FIND_FILE(LCMS2_HEADER_FOUND lcms2.h) +# +IF(LCMS2_HEADER_FOUND STREQUAL "LCMS2_HEADER_FOUND-NOTFOUND") + SET(LCMS2_HEADER_FOUND "") +ENDIF() +IF(LCMS2_HEADER_FOUND) + FIND_PATH(LCMS_INCLUDE_DIR lcms2.h) + IF(UNIX OR CYGWIN) + FIND_LIBRARY(HAVE_LIBLCMS2 lcms2) + ELSE() + FIND_LIBRARY(HAVE_LIBLCMS2 lcms2_static.lib) + ENDIF() + IF(HAVE_LIBLCMS2 STREQUAL "HAVE_LIBLCMS2-NOTFOUND") + SET(HAVE_LIBLCMS2 "") + ENDIF() + IF(HAVE_LIBLCMS2) + SET(LCMS_LIB "${HAVE_LIBLCMS2}") + SET(HAVE_LCMS2_LIB 1) + SET(HAVE_LCMS2_H 1) + ENDIF() +ENDIF() +IF(NOT LCMS2_HEADER_FOUND) + FIND_FILE(LCMS1_HEADER_FOUND lcms.h) + IF(LCMS1_HEADER_FOUND STREQUAL "LCMS1_HEADER_FOUND-NOTFOUND") + SET(LCMS1_HEADER_FOUND "") + ENDIF() + IF(LCMS1_HEADER_FOUND) + FIND_PATH(LCMS_INCLUDE_DIR lcms.h) + FIND_LIBRARY(HAVE_LIBLCMS1 lcms) + IF(HAVE_LIBLCMS1 STREQUAL "HAVE_LIBLCMS1-NOTFOUND") + SET(HAVE_LIBLCMS1 "") + ENDIF() + IF(HAVE_LIBLCMS1) + SET(LCMS_LIB "${HAVE_LIBLCMS1}") + SET(HAVE_LCMS1_LIB 1) + SET(HAVE_LCMS1_H 1) + ENDIF() + ENDIF() +ENDIF() +# +# generate opj_config.h +CONFIGURE_FILE("${OPENJPEG_SOURCE_DIR}/opj_configh.cmake.in" + "${OPENJPEG_BINARY_DIR}/opj_config.h" + @ONLY +) + diff --git a/contrib/menuetlibc/openjpeg/CTestConfig.cmake b/contrib/menuetlibc/openjpeg/CTestConfig.cmake new file mode 100644 index 0000000000..6d3866ef18 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/CTestConfig.cmake @@ -0,0 +1,7 @@ +set(CTEST_PROJECT_NAME "OPENJPEG") +set(CTEST_NIGHTLY_START_TIME "3:00:00 UTC") + +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "my.cdash.org") +set(CTEST_DROP_LOCATION "/submit.php?project=OPENJPEG") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/contrib/menuetlibc/openjpeg/CTestCustom.cmake.in b/contrib/menuetlibc/openjpeg/CTestCustom.cmake.in new file mode 100644 index 0000000000..00ad66703b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/CTestCustom.cmake.in @@ -0,0 +1,21 @@ +# +# For further details regarding this file, +# see http://www.vtk.org/Wiki/CMake_Testing_With_CTest#Customizing_CTest +# + +SET (CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS 50) +SET (CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS 50) + +SET(CTEST_CUSTOM_COVERAGE_EXCLUDE + ${CTEST_CUSTOM_COVERAGE_EXCLUDE} + + # Exclude files from the Testing directories + ".*/Testing/.*" + ) + +SET(CTEST_CUSTOM_WARNING_EXCEPTION + ${CTEST_CUSTOM_WARNING_EXCEPTION} + + # Suppress warning caused by intentional messages about deprecation + ".*warning,.* is deprecated" +) diff --git a/contrib/menuetlibc/openjpeg/DllOpenJPEG.dsp b/contrib/menuetlibc/openjpeg/DllOpenJPEG.dsp new file mode 100644 index 0000000000..6408c63954 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/DllOpenJPEG.dsp @@ -0,0 +1,273 @@ +# Microsoft Developer Studio Project File - Name="DllOpenJPEG" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=DllOpenJPEG - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "DllOpenJPEG.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "DllOpenJPEG.mak" CFG="DllOpenJPEG - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "DllOpenJPEG - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "DllOpenJPEG - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "DllOpenJPEG - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLOPENJPEG_EXPORTS" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPJ_EXPORTS" /FD /c +# SUBTRACT CPP /YX /Yc /Yu +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/OpenJPEG.dll" +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=if not exist dist mkdir dist copy libopenjpeg\openjpeg.h dist copy Release\OpenJPEG.dll dist copy Release\OpenJPEG.lib dist +# End Special Build Tool + +!ELSEIF "$(CFG)" == "DllOpenJPEG - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLOPENJPEG_EXPORTS" /Yu"stdafx.h" /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPJ_EXPORTS" /FD /GZ /c +# SUBTRACT CPP /YX /Yc /Yu +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/OpenJPEGd.dll" /pdbtype:sept +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=if not exist dist mkdir dist copy libopenjpeg\openjpeg.h dist copy Debug\OpenJPEGd.dll dist copy Debug\OpenJPEGd.lib dist +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "DllOpenJPEG - Win32 Release" +# Name "DllOpenJPEG - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\libopenjpeg\bio.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\cio.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\dwt.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\event.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\image.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\j2k.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\j2k_lib.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\jp2.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\jpt.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\mct.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\mqc.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\openjpeg.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\pi.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\raw.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\t1.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\t2.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\tcd.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\tgt.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\libopenjpeg\bio.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\cio.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\dwt.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\event.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\fix.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\image.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\int.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\j2k.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\j2k_lib.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\jp2.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\jpt.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\mct.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\mqc.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\openjpeg.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\opj_includes.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\pi.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\raw.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\t1.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\t2.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\tcd.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\tgt.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\OpenJPEG.rc +# End Source File +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/DllOpenJPEG.sln b/contrib/menuetlibc/openjpeg/DllOpenJPEG.sln new file mode 100644 index 0000000000..5125e739d8 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/DllOpenJPEG.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DllOpenJPEG", "DllOpenJPEG.vcproj", "{89AC992C-5E2C-4E6B-A453-61C1DF446216}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|Win32.ActiveCfg = Debug|Win32 + {89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|Win32.Build.0 = Debug|Win32 + {89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|Win32.ActiveCfg = Release|Win32 + {89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/contrib/menuetlibc/openjpeg/DllOpenJPEG.vcproj b/contrib/menuetlibc/openjpeg/DllOpenJPEG.vcproj new file mode 100644 index 0000000000..a035b9858b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/DllOpenJPEG.vcproj @@ -0,0 +1,670 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/INSTALL b/contrib/menuetlibc/openjpeg/INSTALL new file mode 100644 index 0000000000..f205256cde --- /dev/null +++ b/contrib/menuetlibc/openjpeg/INSTALL @@ -0,0 +1,105 @@ + +How to build and install openjpeg binaries +========================================== + +UNIX/LINUX similar systems +-------------------------- + +1) Using configure tools + +You can simply type + ./configure [--prefix=/path] + make + +If you are root: + make install + make clean + make distclean + +else: + sudo make install + make clean + make distclean + +Binaries are located in the 'bin' directory. + +If 'configure' does not work on your system please +call './bootstrap.sh'. + +If 'configure' does not find a library or header file, +or to see available configure options, please try +'./configure --help'. + +Note: if Doxygen is found on your system, a target 'docs' +will automatically be created in 'doc/Makefile'. To build +the documentation (it will create an 'html' directory): + cd doc + make docs + +2) Using cmake (see www.cmake.org) + +Type: + cmake . + make + +If you are root: + make install + make clean + +else: + sudo make install + make clean + +Binaries are located in the 'bin' directory. + +Main available cmake flags: +* To specify the install path: '-DCMAKE_INSTALL_PREFIX=/path' +* To build the shared libraries and links the executables against it: '-DBUILD_SHARED_LIBS:bool=on' (default: 'ON') + Note: when using this option, static libraries are not built and executables are dynamically linked. +* To build the CODEC executables: '-DBUILD_CODEC:bool=on' (default: 'ON') +* To build the MJ2 executables: '-DBUILD_MJ2:bool=on' (default: 'OFF') +* To build the JPWL executables and JPWL library: '-DBUILD_JPWL:bool=on' (default: 'OFF') +* To build the JP3D executables and JP3D library: '-DBUILD_JP3D:bool=on' (default: 'OFF') +* [WIN32 ONLY] To build the INDEXER_JPIP executable: '-DBUILD_INDEXER_JPIP:bool=on' (default: 'OFF') +* To build the doxygen documentation: '-DBUILD_DOC:bool=on' (default: 'OFF') +* To enable testing (and automatic result upload to http://my.cdash.org/index.php?project=OPENJPEG): + cmake . -DBUILD_TESTING:BOOL=ON -DJPEG2000_CONFORMANCE_DATA_ROOT:PATH=/path/to/your/JPEG2000/test/files + make + make Experimental + Note : JPEG2000 test files are available here : http://www.crc.ricoh.com/~gormish/jpeg2000conformance/ + +3) Manually using Makefile.nix: +- Manually edit the config.nix file +- Manually create an opj_config.h file from opj_config.h.in.user + and edit this opj_config.h +- Then : (if 'WITH_JPWL' and/or 'WITH_JP3D' are defined in config.nix) + make -f Makefile.nix all + make -f Makefile.nix install + make -f Makefile.nix clean + make -f Makefile.nix uninstall +- If neither 'WITH_JPWL' nor 'WITH_JP3D' is defined in config.nix + and you want to clean/compile/install/uninstall JPWL/JP3D: + call the respective target in the respective directory. + +MACOSX +------ + +The same building procedures as above will soon be available for MACOSX. +The xcode project file has also to be updated. +Right now, the CMake procedure is the only one working. Please refer to instructions above. +If it does not work, try adding the following flag to the cmake command : + '-DCMAKE_OSX_ARCHITECTURES:STRING=i386' + +WINDOWS +------- + +If you're using cygwin, the same procedures as for Unix should work. Otherwise: + +1) Using cmake to generate project files + +Use the cmake procedure above with the '-G ' flag to generate the project +files for the IDE you are using. Type 'cmake --help' for available generators on your platform. + +2) Using the provided project files + +These files are obsolete and will be updated soon. diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/CMakeLists.txt b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/CMakeLists.txt new file mode 100644 index 0000000000..6b1720b3fd --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/CMakeLists.txt @@ -0,0 +1,40 @@ +#JavaOpenJPEG/CMakeLists.txt + +# First thing define the common source: +SET(common_SRCS + ../codec/convert.c + ../codec/index.c + ) + +# If not getopt was found then add it to the lib: +IF(DONT_HAVE_GETOPT) + SET(common_SRCS + ${common_SRCS} + ../common/getopt.c + ) +ENDIF(DONT_HAVE_GETOPT) + + +# Headers file are located here: +INCLUDE_DIRECTORIES( + ${OPENJPEG_SOURCE_DIR}/libopenjpeg + ${LCMS_INCLUDE_DIR} + ${PNG_INCLUDE_DIR} + ${ZLIB_INCLUDE_DIR} + ${TIFF_INCLUDE_DIR} + ) + +# Loop over all executables: +FOREACH(exe j2k_to_image image_to_j2k) + ADD_EXECUTABLE(${exe} ${exe}.c ${common_SRCS}) + TARGET_LINK_LIBRARIES(${exe} ${OPJ_PREFIX}openjpeg ${TIFF_LIBRARIES} + ${PNG_LIBRARIES} ${ZLIB_LIBRARY} ${LCMS_LIB}) + # On unix you need to link to the math library: + IF(UNIX) + TARGET_LINK_LIBRARIES(${exe} -lm) + ENDIF(UNIX) + # Install exe + INSTALL_TARGETS(/bin/ ${exe}) +ENDFOREACH(exe) + + diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.c b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.c new file mode 100644 index 0000000000..b1f03028c5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.c @@ -0,0 +1,1976 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2006-2007, Parvatha Elangovan + * Copyright (c) 2007, Patrick Piscaglia (Telemis) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#include +#include +#include +#include +#include + +#include "openjpeg.h" +#include "getopt.h" +#include "convert.h" +#include "index.h" +#include "dirent.h" +#include "org_openJpeg_OpenJPEGJavaEncoder.h" + +#ifndef _WIN32 +#define stricmp strcasecmp +#define strnicmp strncasecmp +#endif + +#include "format_defs.h" + +#define CINEMA_24_CS 1302083 /*Codestream length for 24fps*/ +#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/ +#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/ +#define COMP_48_CS 520833 /*Maximum size per color component for 2K @ 48fps*/ + +extern int get_file_format(char *filename); +extern void error_callback(const char *msg, void *client_data); +extern warning_callback(const char *msg, void *client_data); +extern void info_callback(const char *msg, void *client_data); + +typedef struct callback_variables { + JNIEnv *env; + /** 'jclass' object used to call a Java method from the C */ + jobject *jobj; + /** 'jclass' object used to call a Java method from the C */ + jmethodID message_mid; + jmethodID error_mid; +} callback_variables_t; + +typedef struct dircnt{ + /** Buffer for holding images read from Directory*/ + char *filename_buf; + /** Pointer to the buffer*/ + char **filename; +}dircnt_t; + +typedef struct img_folder{ + /** The directory path of the folder containing input images*/ + char *imgdirpath; + /** Output format*/ + char *out_format; + /** Enable option*/ + char set_imgdir; + /** Enable Cod Format for output*/ + char set_out_format; + /** User specified rate stored in case of cinema option*/ + float *rates; +}img_fol_t; + +void encode_help_display() { + fprintf(stdout,"HELP\n----\n\n"); + fprintf(stdout,"- the -h option displays this help information on screen\n\n"); + +/* UniPG>> */ + fprintf(stdout,"List of parameters for the JPEG 2000 " +#ifdef USE_JPWL + "+ JPWL " +#endif /* USE_JPWL */ + "encoder:\n"); +/* <> */ +#ifdef USE_JPWL + fprintf(stdout," * No JPWL protection\n"); +#endif /* USE_JPWL */ +/* < \n"); + fprintf(stdout," Currently accepts PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA formats\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-i : source file (-i source.pnm also *.pgm, *.ppm, *.bmp, *.tif, *.raw, *.tga) \n"); + fprintf(stdout," When using this option -o must be used\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-o : destination file (-o dest.j2k or .jp2) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"Optional Parameters:\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-h : display the help information \n "); + fprintf(stdout,"\n"); + fprintf(stdout,"-cinema2K : Digital Cinema 2K profile compliant codestream for 2K resolution.(-cinema2k 24 or 48) \n"); + fprintf(stdout," Need to specify the frames per second for a 2K resolution. Only 24 or 48 fps is allowed\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-cinema4K : Digital Cinema 4K profile compliant codestream for 4K resolution \n"); + fprintf(stdout," Frames per second not required. Default value is 24fps\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-r : different compression ratios for successive layers (-r 20,10,5)\n "); + fprintf(stdout," - The rate specified for each quality level is the desired \n"); + fprintf(stdout," compression factor.\n"); + fprintf(stdout," Example: -r 20,10,1 means quality 1: compress 20x, \n"); + fprintf(stdout," quality 2: compress 10x and quality 3: compress lossless\n"); + fprintf(stdout,"\n"); + fprintf(stdout," (options -r and -q cannot be used together)\n "); + fprintf(stdout,"\n"); + + fprintf(stdout,"-q : different psnr for successive layers (-q 30,40,50) \n "); + + fprintf(stdout," (options -r and -q cannot be used together)\n "); + + fprintf(stdout,"\n"); + fprintf(stdout,"-n : number of resolutions (-n 3) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-b : size of code block (-b 32,32) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-c : size of precinct (-c 128,128) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-t : size of tile (-t 512,512) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-s : subsampling factor (-s 2,2) [-s X,Y] \n"); + fprintf(stdout," Remark: subsampling bigger than 2 can produce error\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-POC : Progression order change (-POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL) \n"); + fprintf(stdout," Example: T1=0,0,1,5,3,CPRL \n"); + fprintf(stdout," : Ttilenumber=Resolution num start,Component num start,Layer num end,Resolution num end,Component num end,Progression order\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-SOP : write SOP marker before each packet \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-EPH : write EPH marker after each header packet \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-M : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n"); + fprintf(stdout," 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n"); + fprintf(stdout," Indicate multiple modes by adding their values. \n"); + fprintf(stdout," ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-x : create an index file *.Idx (-x index_name.Idx) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-ROI : c=%%d,U=%%d : quantization indices upshifted \n"); + fprintf(stdout," for component c=%%d [%%d = 0,1,2]\n"); + fprintf(stdout," with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI c=0,U=25) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-d : offset of the origin of the image (-d 150,300) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-T : offset of the origin of the tiles (-T 100,75) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-I : use the irreversible DWT 9-7 (-I) \n"); + fprintf(stdout,"\n"); +/* UniPG>> */ +#ifdef USE_JPWL + fprintf(stdout,"-W : adoption of JPWL (Part 11) capabilities (-W params)\n"); + fprintf(stdout," The parameters can be written and repeated in any order:\n"); + fprintf(stdout," [h<=type>,s<=method>,a=,...\n"); + fprintf(stdout," ...,z=,g=,p<=type>]\n"); + fprintf(stdout,"\n"); + fprintf(stdout," h selects the header error protection (EPB): 'type' can be\n"); + fprintf(stdout," [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n"); + fprintf(stdout," if 'tilepart' is absent, it is for main and tile headers\n"); + fprintf(stdout," if 'tilepart' is present, it applies from that tile\n"); + fprintf(stdout," onwards, up to the next h<> spec, or to the last tilepart\n"); + fprintf(stdout," in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS); + fprintf(stdout,"\n"); + fprintf(stdout," p selects the packet error protection (EEP/UEP with EPBs)\n"); + fprintf(stdout," to be applied to raw data: 'type' can be\n"); + fprintf(stdout," [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n"); + fprintf(stdout," if 'tilepart:pack' is absent, it is from tile 0, packet 0\n"); + fprintf(stdout," if 'tilepart:pack' is present, it applies from that tile\n"); + fprintf(stdout," and that packet onwards, up to the next packet spec\n"); + fprintf(stdout," or to the last packet in the last tilepart in the stream\n"); + fprintf(stdout," (max. %d specs)\n", JPWL_MAX_NO_PACKSPECS); + fprintf(stdout,"\n"); + fprintf(stdout," s enables sensitivity data insertion (ESD): 'method' can be\n"); + fprintf(stdout," [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n"); + fprintf(stdout," 4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n"); + fprintf(stdout," if 'tilepart' is absent, it is for main header only\n"); + fprintf(stdout," if 'tilepart' is present, it applies from that tile\n"); + fprintf(stdout," onwards, up to the next s<> spec, or to the last tilepart\n"); + fprintf(stdout," in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS); + fprintf(stdout,"\n"); + fprintf(stdout," g determines the addressing mode: can be\n"); + fprintf(stdout," [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n"); + fprintf(stdout,"\n"); + fprintf(stdout," a determines the size of data addressing: can be\n"); + fprintf(stdout," 2/4 bytes (small/large codestreams). If not set, auto-mode\n"); + fprintf(stdout,"\n"); + fprintf(stdout," z determines the size of sensitivity values: can be\n"); + fprintf(stdout," 1/2 bytes, for the transformed pseudo-floating point value\n"); + fprintf(stdout,"\n"); + fprintf(stdout," ex.:\n"); + fprintf(stdout," h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n"); + fprintf(stdout," s0=6,s3=-1,a=0,g=1,z=1\n"); + fprintf(stdout," means\n"); + fprintf(stdout," predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n"); + fprintf(stdout," CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n"); + fprintf(stdout," UEP rs(78,32) for packets 0 to 23 of tile 0,\n"); + fprintf(stdout," UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n"); + fprintf(stdout," UEP rs default for packets of tilepart 1,\n"); + fprintf(stdout," no UEP for packets 0 to 19 of tilepart 3,\n"); + fprintf(stdout," UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n"); + fprintf(stdout," relative sensitivity ESD for MH,\n"); + fprintf(stdout," TSE ESD from TPH 0 to TPH 2, byte range with automatic\n"); + fprintf(stdout," size of addresses and 1 byte for each sensitivity value\n"); + fprintf(stdout,"\n"); + fprintf(stdout," ex.:\n"); + fprintf(stdout," h,s,p\n"); + fprintf(stdout," means\n"); + fprintf(stdout," default protection to headers (MH and TPHs) as well as\n"); + fprintf(stdout," data packets, one ESD in MH\n"); + fprintf(stdout,"\n"); + fprintf(stdout," N.B.: use the following recommendations when specifying\n"); + fprintf(stdout," the JPWL parameters list\n"); + fprintf(stdout," - when you use UEP, always pair the 'p' option with 'h'\n"); + fprintf(stdout," \n"); +#endif /* USE_JPWL */ +/* < +/// Get logarithm of an integer and round downwards. +/// +int int_floorlog2(int a) { + int l; + for (l=0; a>1; l++) { + a>>=1; + } + return l; +} + +static int initialise_4K_poc(opj_poc_t *POC, int numres){ + POC[0].tile = 1; + POC[0].resno0 = 0; + POC[0].compno0 = 0; + POC[0].layno1 = 1; + POC[0].resno1 = numres-1; + POC[0].compno1 = 3; + POC[0].prg1 = CPRL; + POC[1].tile = 1; + POC[1].resno0 = numres-1; + POC[1].compno0 = 0; + POC[1].layno1 = 1; + POC[1].resno1 = numres; + POC[1].compno1 = 3; + POC[1].prg1 = CPRL; + return 2; +} + +void cinema_parameters(opj_cparameters_t *parameters){ + parameters->tile_size_on = false; + parameters->cp_tdx=1; + parameters->cp_tdy=1; + + /*Tile part*/ + parameters->tp_flag = 'C'; + parameters->tp_on = 1; + + /*Tile and Image shall be at (0,0)*/ + parameters->cp_tx0 = 0; + parameters->cp_ty0 = 0; + parameters->image_offset_x0 = 0; + parameters->image_offset_y0 = 0; + + /*Codeblock size= 32*32*/ + parameters->cblockw_init = 32; + parameters->cblockh_init = 32; + parameters->csty |= 0x01; + + /*The progression order shall be CPRL*/ + parameters->prog_order = CPRL; + + /* No ROI */ + parameters->roi_compno = -1; + + parameters->subsampling_dx = 1; parameters->subsampling_dy = 1; + + /* 9-7 transform */ + parameters->irreversible = 1; + +} + +void cinema_setup_encoder(opj_cparameters_t *parameters,opj_image_t *image, img_fol_t *img_fol){ + int i; + float temp_rate; + opj_poc_t *POC = NULL; + + switch (parameters->cp_cinema){ + case CINEMA2K_24: + case CINEMA2K_48: + if(parameters->numresolution > 6){ + parameters->numresolution = 6; + } + if (!((image->comps[0].w == 2048) | (image->comps[0].h == 1080))){ + fprintf(stdout,"Image coordinates %d x %d is not 2K compliant.\nJPEG Digital Cinema Profile-3" + "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080\n", + image->comps[0].w,image->comps[0].h); + parameters->cp_rsiz = STD_RSIZ; + } + break; + + case CINEMA4K_24: + if(parameters->numresolution < 1){ + parameters->numresolution = 1; + }else if(parameters->numresolution > 7){ + parameters->numresolution = 7; + } + if (!((image->comps[0].w == 4096) | (image->comps[0].h == 2160))){ + fprintf(stdout,"Image coordinates %d x %d is not 4K compliant.\nJPEG Digital Cinema Profile-4" + "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160\n", + image->comps[0].w,image->comps[0].h); + parameters->cp_rsiz = STD_RSIZ; + } + parameters->numpocs = initialise_4K_poc(parameters->POC,parameters->numresolution); + break; + } + + switch (parameters->cp_cinema){ + case CINEMA2K_24: + case CINEMA4K_24: + for(i=0 ; itcp_numlayers ; i++){ + temp_rate = 0 ; + if (img_fol->rates[i]== 0){ + parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy); + }else{ + temp_rate =((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy); + if (temp_rate > CINEMA_24_CS ){ + parameters->tcp_rates[i]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy); + }else{ + parameters->tcp_rates[i]= img_fol->rates[i]; + } + } + } + parameters->max_comp_size = COMP_24_CS; + break; + + case CINEMA2K_48: + for(i=0 ; itcp_numlayers ; i++){ + temp_rate = 0 ; + if (img_fol->rates[i]== 0){ + parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy); + }else{ + temp_rate =((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy); + if (temp_rate > CINEMA_48_CS ){ + parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy); + }else{ + parameters->tcp_rates[i]= img_fol->rates[i]; + } + } + } + parameters->max_comp_size = COMP_48_CS; + break; + } + parameters->cp_disto_alloc = 1; +} + + +/* ------------------------------------------------------------------------------------ */ +int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters, + img_fol_t *img_fol, char *indexfilename) { + int i, j,totlen; + option_t long_option[]={ + {"cinema2K",REQ_ARG, NULL ,'w'}, + {"cinema4K",NO_ARG, NULL ,'y'}, + {"ImgDir",REQ_ARG, NULL ,'z'}, + {"TP",REQ_ARG, NULL ,'v'}, + {"SOP",NO_ARG, NULL ,'S'}, + {"EPH",NO_ARG, NULL ,'E'}, + {"OutFor",REQ_ARG, NULL ,'O'}, + {"POC",REQ_ARG, NULL ,'P'}, + {"ROI",REQ_ARG, NULL ,'R'}, + }; + + /* parse the command line */ +/* UniPG>> */ + const char optlist[] = "i:o:hr:q:n:b:c:t:p:s:SEM:x:R:d:T:If:P:C:F:" +#ifdef USE_JPWL + "W:" +#endif /* USE_JPWL */ + ; + + /*printf("C: parse_cmdline_encoder:"); + for (i=0; iset_out_format=0; + reset_options_reading(); + + while (1) { + int c = getopt_long(argc, argv, optlist,long_option,totlen); + if (c == -1) + break; + switch (c) { + + /* ----------------------------------------------------- */ + + case 'o': /* output file */ + { + char *outfile = optarg; + parameters->cod_format = get_file_format(outfile); + switch(parameters->cod_format) { + case J2K_CFMT: + case JP2_CFMT: + break; + default: + fprintf(stderr, "Unknown output format image %s [only *.j2k, *.j2c or *.jp2]!! \n", outfile); + return 1; + } + strncpy(parameters->outfile, outfile, sizeof(parameters->outfile)-1); + } + break; + + /* ----------------------------------------------------- */ + case 'O': /* output format */ + { + char outformat[50]; + char *of = optarg; + sprintf(outformat,".%s",of); + img_fol->set_out_format = 1; + parameters->cod_format = get_file_format(outformat); + switch(parameters->cod_format) { + case J2K_CFMT: + case JP2_CFMT: + img_fol->out_format = optarg; + break; + default: + fprintf(stderr, "Unknown output format image [only j2k, j2c, jp2]!! \n"); + return 1; + } + } + break; + + + /* ----------------------------------------------------- */ + + + case 'r': /* rates rates/distorsion */ + { + char *s = optarg; + while (sscanf(s, "%f", ¶meters->tcp_rates[parameters->tcp_numlayers]) == 1) { + parameters->tcp_numlayers++; + while (*s && *s != ',') { + s++; + } + if (!*s) + break; + s++; + } + parameters->cp_disto_alloc = 1; + } + break; + + /* ----------------------------------------------------- */ + + case 'q': /* add fixed_quality */ + { + char *s = optarg; + while (sscanf(s, "%f", ¶meters->tcp_distoratio[parameters->tcp_numlayers]) == 1) { + parameters->tcp_numlayers++; + while (*s && *s != ',') { + s++; + } + if (!*s) + break; + s++; + } + parameters->cp_fixed_quality = 1; + } + break; + + /* dda */ + /* ----------------------------------------------------- */ + + case 'f': /* mod fixed_quality (before : -q) */ + { + int *row = NULL, *col = NULL; + int numlayers = 0, numresolution = 0, matrix_width = 0; + + char *s = optarg; + sscanf(s, "%d", &numlayers); + s++; + if (numlayers > 9) + s++; + + parameters->tcp_numlayers = numlayers; + numresolution = parameters->numresolution; + matrix_width = numresolution * 3; + parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int)); + s = s + 2; + + for (i = 0; i < numlayers; i++) { + row = ¶meters->cp_matrice[i * matrix_width]; + col = row; + parameters->tcp_rates[i] = 1; + sscanf(s, "%d,", &col[0]); + s += 2; + if (col[0] > 9) + s++; + col[1] = 0; + col[2] = 0; + for (j = 1; j < numresolution; j++) { + col += 3; + sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]); + s += 6; + if (col[0] > 9) + s++; + if (col[1] > 9) + s++; + if (col[2] > 9) + s++; + } + if (i < numlayers - 1) + s++; + } + parameters->cp_fixed_alloc = 1; + } + break; + + /* ----------------------------------------------------- */ + + case 't': /* tiles */ + { + sscanf(optarg, "%d,%d", ¶meters->cp_tdx, ¶meters->cp_tdy); + parameters->tile_size_on = true; + } + break; + + /* ----------------------------------------------------- */ + + case 'n': /* resolution */ + { + sscanf(optarg, "%d", ¶meters->numresolution); + } + break; + + /* ----------------------------------------------------- */ + case 'c': /* precinct dimension */ + { + char sep; + int res_spec = 0; + + char *s = optarg; + do { + sep = 0; + sscanf(s, "[%d,%d]%c", ¶meters->prcw_init[res_spec], + ¶meters->prch_init[res_spec], &sep); + parameters->csty |= 0x01; + res_spec++; + s = strpbrk(s, "]") + 2; + } + while (sep == ','); + parameters->res_spec = res_spec; + } + break; + + /* ----------------------------------------------------- */ + + case 'b': /* code-block dimension */ + { + int cblockw_init = 0, cblockh_init = 0; + sscanf(optarg, "%d,%d", &cblockw_init, &cblockh_init); + if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024 + || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) { + fprintf(stderr, + "!! Size of code_block error (option -b) !!\n\nRestriction :\n" + " * width*height<=4096\n * 4<=width,height<= 1024\n\n"); + return 1; + } + parameters->cblockw_init = cblockw_init; + parameters->cblockh_init = cblockh_init; + } + break; + + /* ----------------------------------------------------- */ + + case 'x': /* creation of index file */ + { + char *index = optarg; + strncpy(indexfilename, index, OPJ_PATH_LEN); + } + break; + + /* ----------------------------------------------------- */ + + case 'p': /* progression order */ + { + char progression[4]; + + strncpy(progression, optarg, 4); + parameters->prog_order = give_progression(progression); + if (parameters->prog_order == -1) { + fprintf(stderr, "Unrecognized progression order " + "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n"); + return 1; + } + } + break; + + /* ----------------------------------------------------- */ + + case 's': /* subsampling factor */ + { + if (sscanf(optarg, "%d,%d", ¶meters->subsampling_dx, + ¶meters->subsampling_dy) != 2) { + fprintf(stderr, "'-s' sub-sampling argument error ! [-s dx,dy]\n"); + return 1; + } + } + break; + + /* ----------------------------------------------------- */ + + case 'd': /* coordonnate of the reference grid */ + { + if (sscanf(optarg, "%d,%d", ¶meters->image_offset_x0, + ¶meters->image_offset_y0) != 2) { + fprintf(stderr, "-d 'coordonnate of the reference grid' argument " + "error !! [-d x0,y0]\n"); + return 1; + } + } + break; + + /* ----------------------------------------------------- */ + + case 'h': /* display an help description */ + encode_help_display(); + return 1; + + /* ----------------------------------------------------- */ + + case 'P': /* POC */ + { + int numpocs = 0; /* number of progression order change (POC) default 0 */ + opj_poc_t *POC = NULL; /* POC : used in case of Progression order change */ + + char *s = optarg; + POC = parameters->POC; + + while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile, + &POC[numpocs].resno0, &POC[numpocs].compno0, + &POC[numpocs].layno1, &POC[numpocs].resno1, + &POC[numpocs].compno1, &POC[numpocs].progorder) == 7) { + POC[numpocs].prg1 = give_progression(POC[numpocs].progorder); + numpocs++; + while (*s && *s != '/') { + s++; + } + if (!*s) { + break; + } + s++; + } + parameters->numpocs = numpocs; + } + break; + + /* ------------------------------------------------------ */ + + case 'S': /* SOP marker */ + { + parameters->csty |= 0x02; + } + break; + + /* ------------------------------------------------------ */ + + case 'E': /* EPH marker */ + { + parameters->csty |= 0x04; + } + break; + + /* ------------------------------------------------------ */ + + case 'M': /* Mode switch pas tous au point !! */ + { + int value = 0; + if (sscanf(optarg, "%d", &value) == 1) { + for (i = 0; i <= 5; i++) { + int cache = value & (1 << i); + if (cache) + parameters->mode |= (1 << i); + } + } + } + break; + + /* ------------------------------------------------------ */ + + case 'R': /* ROI */ + { + if (sscanf(optarg, "c=%d,U=%d", ¶meters->roi_compno, + ¶meters->roi_shift) != 2) { + fprintf(stderr, "ROI error !! [-ROI c='compno',U='shift']\n"); + return 1; + } + } + break; + + /* ------------------------------------------------------ */ + + case 'T': /* Tile offset */ + { + if (sscanf(optarg, "%d,%d", ¶meters->cp_tx0, ¶meters->cp_ty0) != 2) { + fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]"); + return 1; + } + } + break; + + /* ------------------------------------------------------ */ + + case 'C': /* add a comment */ + { + parameters->cp_comment = (char*)malloc(strlen(optarg) + 1); + if(parameters->cp_comment) { + strcpy(parameters->cp_comment, optarg); + } + } + break; + + + /* ------------------------------------------------------ */ + + case 'I': /* reversible or not */ + { + parameters->irreversible = 1; + } + break; + + /* ------------------------------------------------------ */ + + case 'v': /* Tile part generation*/ + { + parameters->tp_flag = optarg[0]; + parameters->tp_on = 1; + } + break; + + /* ------------------------------------------------------ */ + + case 'z': /* Image Directory path */ + { + img_fol->imgdirpath = (char*)malloc(strlen(optarg) + 1); + strcpy(img_fol->imgdirpath,optarg); + img_fol->set_imgdir=1; + } + break; + + /* ------------------------------------------------------ */ + + case 'w': /* Digital Cinema 2K profile compliance*/ + { + int fps=0; + sscanf(optarg,"%d",&fps); + if(fps == 24){ + parameters->cp_cinema = CINEMA2K_24; + }else if(fps == 48 ){ + parameters->cp_cinema = CINEMA2K_48; + }else { + fprintf(stderr,"Incorrect value!! must be 24 or 48\n"); + return 1; + } + fprintf(stdout,"CINEMA 2K compliant codestream\n"); + parameters->cp_rsiz = CINEMA2K; + + } + break; + + /* ------------------------------------------------------ */ + + case 'y': /* Digital Cinema 4K profile compliance*/ + { + parameters->cp_cinema = CINEMA4K_24; + fprintf(stdout,"CINEMA 4K compliant codestream\n"); + parameters->cp_rsiz = CINEMA4K; + } + break; + + /* ------------------------------------------------------ */ + +/* UniPG>> */ +#ifdef USE_JPWL + /* ------------------------------------------------------ */ + + case 'W': /* JPWL capabilities switched on */ + { + char *token = NULL; + int hprot, pprot, sens, addr, size, range; + + /* we need to enable indexing */ + if (!indexfilename) { + strncpy(indexfilename, JPWL_PRIVATEINDEX_NAME, OPJ_PATH_LEN); + } + + /* search for different protection methods */ + + /* break the option in comma points and parse the result */ + token = strtok(optarg, ","); + while(token != NULL) { + + /* search header error protection method */ + if (*token == 'h') { + + static int tile = 0, tilespec = 0, lasttileno = 0; + + hprot = 1; /* predefined method */ + + if(sscanf(token, "h=%d", &hprot) == 1) { + /* Main header, specified */ + if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) || + ((hprot >= 37) && (hprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid main header protection method h = %d\n", hprot); + return 1; + } + parameters->jpwl_hprot_MH = hprot; + + } else if(sscanf(token, "h%d=%d", &tile, &hprot) == 2) { + /* Tile part header, specified */ + if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) || + ((hprot >= 37) && (hprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid tile part header protection method h = %d\n", hprot); + return 1; + } + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method t = %d\n", tile); + return 1; + } + if (tilespec < JPWL_MAX_NO_TILESPECS) { + parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile; + parameters->jpwl_hprot_TPH[tilespec++] = hprot; + } + + } else if(sscanf(token, "h%d", &tile) == 1) { + /* Tile part header, unspecified */ + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method t = %d\n", tile); + return 1; + } + if (tilespec < JPWL_MAX_NO_TILESPECS) { + parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile; + parameters->jpwl_hprot_TPH[tilespec++] = hprot; + } + + + } else if (!strcmp(token, "h")) { + /* Main header, unspecified */ + parameters->jpwl_hprot_MH = hprot; + + } else { + fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token); + return 1; + }; + + } + + /* search packet error protection method */ + if (*token == 'p') { + + static int pack = 0, tile = 0, packspec = 0, lastpackno = 0; + + pprot = 1; /* predefined method */ + + if (sscanf(token, "p=%d", &pprot) == 1) { + /* Method for all tiles and all packets */ + if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) || + ((pprot >= 37) && (pprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid default packet protection method p = %d\n", pprot); + return 1; + } + parameters->jpwl_pprot_tileno[0] = 0; + parameters->jpwl_pprot_packno[0] = 0; + parameters->jpwl_pprot[0] = pprot; + + } else if (sscanf(token, "p%d=%d", &tile, &pprot) == 2) { + /* method specified from that tile on */ + if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) || + ((pprot >= 37) && (pprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot); + return 1; + } + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile); + return 1; + } + if (packspec < JPWL_MAX_NO_PACKSPECS) { + parameters->jpwl_pprot_tileno[packspec] = tile; + parameters->jpwl_pprot_packno[packspec] = 0; + parameters->jpwl_pprot[packspec++] = pprot; + } + + } else if (sscanf(token, "p%d:%d=%d", &tile, &pack, &pprot) == 3) { + /* method fully specified from that tile and that packet on */ + if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) || + ((pprot >= 37) && (pprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot); + return 1; + } + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile); + return 1; + } + if (pack < 0) { + fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n", pack); + return 1; + } + if (packspec < JPWL_MAX_NO_PACKSPECS) { + parameters->jpwl_pprot_tileno[packspec] = tile; + parameters->jpwl_pprot_packno[packspec] = pack; + parameters->jpwl_pprot[packspec++] = pprot; + } + + } else if (sscanf(token, "p%d:%d", &tile, &pack) == 2) { + /* default method from that tile and that packet on */ + if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) || + ((pprot >= 37) && (pprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot); + return 1; + } + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile); + return 1; + } + if (pack < 0) { + fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n", pack); + return 1; + } + if (packspec < JPWL_MAX_NO_PACKSPECS) { + parameters->jpwl_pprot_tileno[packspec] = tile; + parameters->jpwl_pprot_packno[packspec] = pack; + parameters->jpwl_pprot[packspec++] = pprot; + } + + } else if (sscanf(token, "p%d", &tile) == 1) { + /* default from a tile on */ + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile); + return 1; + } + if (packspec < JPWL_MAX_NO_PACKSPECS) { + parameters->jpwl_pprot_tileno[packspec] = tile; + parameters->jpwl_pprot_packno[packspec] = 0; + parameters->jpwl_pprot[packspec++] = pprot; + } + + + } else if (!strcmp(token, "p")) { + /* all default */ + parameters->jpwl_pprot_tileno[0] = 0; + parameters->jpwl_pprot_packno[0] = 0; + parameters->jpwl_pprot[0] = pprot; + + } else { + fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token); + return 1; + }; + + } + + /* search sensitivity method */ + if (*token == 's') { + + static int tile = 0, tilespec = 0, lasttileno = 0; + + sens = 0; /* predefined: relative error */ + + if(sscanf(token, "s=%d", &sens) == 1) { + /* Main header, specified */ + if ((sens < -1) || (sens > 7)) { + fprintf(stderr, "ERROR -> invalid main header sensitivity method s = %d\n", sens); + return 1; + } + parameters->jpwl_sens_MH = sens; + + } else if(sscanf(token, "s%d=%d", &tile, &sens) == 2) { + /* Tile part header, specified */ + if ((sens < -1) || (sens > 7)) { + fprintf(stderr, "ERROR -> invalid tile part header sensitivity method s = %d\n", sens); + return 1; + } + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile); + return 1; + } + if (tilespec < JPWL_MAX_NO_TILESPECS) { + parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile; + parameters->jpwl_sens_TPH[tilespec++] = sens; + } + + } else if(sscanf(token, "s%d", &tile) == 1) { + /* Tile part header, unspecified */ + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile); + return 1; + } + if (tilespec < JPWL_MAX_NO_TILESPECS) { + parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile; + parameters->jpwl_sens_TPH[tilespec++] = hprot; + } + + } else if (!strcmp(token, "s")) { + /* Main header, unspecified */ + parameters->jpwl_sens_MH = sens; + + } else { + fprintf(stderr, "ERROR -> invalid sensitivity method selection = %s\n", token); + return 1; + }; + + parameters->jpwl_sens_size = 2; /* 2 bytes for default size */ + } + + /* search addressing size */ + if (*token == 'a') { + + static int tile = 0, tilespec = 0, lasttileno = 0; + + addr = 0; /* predefined: auto */ + + if(sscanf(token, "a=%d", &addr) == 1) { + /* Specified */ + if ((addr != 0) && (addr != 2) && (addr != 4)) { + fprintf(stderr, "ERROR -> invalid addressing size a = %d\n", addr); + return 1; + } + parameters->jpwl_sens_addr = addr; + + } else if (!strcmp(token, "a")) { + /* default */ + parameters->jpwl_sens_addr = addr; /* auto for default size */ + + } else { + fprintf(stderr, "ERROR -> invalid addressing selection = %s\n", token); + return 1; + }; + + } + + /* search sensitivity size */ + if (*token == 'z') { + + static int tile = 0, tilespec = 0, lasttileno = 0; + + size = 1; /* predefined: 1 byte */ + + if(sscanf(token, "z=%d", &size) == 1) { + /* Specified */ + if ((size != 0) && (size != 1) && (size != 2)) { + fprintf(stderr, "ERROR -> invalid sensitivity size z = %d\n", size); + return 1; + } + parameters->jpwl_sens_size = size; + + } else if (!strcmp(token, "a")) { + /* default */ + parameters->jpwl_sens_size = size; /* 1 for default size */ + + } else { + fprintf(stderr, "ERROR -> invalid size selection = %s\n", token); + return 1; + }; + + } + + /* search range method */ + if (*token == 'g') { + + static int tile = 0, tilespec = 0, lasttileno = 0; + + range = 0; /* predefined: 0 (packet) */ + + if(sscanf(token, "g=%d", &range) == 1) { + /* Specified */ + if ((range < 0) || (range > 3)) { + fprintf(stderr, "ERROR -> invalid sensitivity range method g = %d\n", range); + return 1; + } + parameters->jpwl_sens_range = range; + + } else if (!strcmp(token, "g")) { + /* default */ + parameters->jpwl_sens_range = range; + + } else { + fprintf(stderr, "ERROR -> invalid range selection = %s\n", token); + return 1; + }; + + } + + /* next token or bust */ + token = strtok(NULL, ","); + }; + + + /* some info */ + fprintf(stdout, "Info: JPWL capabilities enabled\n"); + parameters->jpwl_epc_on = true; + + } + break; +#endif /* USE_JPWL */ +/* < Command line not valid\n"); + return 1; + } + } + + /* check for possible errors */ + if (parameters->cp_cinema){ + if(parameters->tcp_numlayers > 1){ + parameters->cp_rsiz = STD_RSIZ; + fprintf(stdout,"Warning: DC profiles do not allow more than one quality layer. The codestream created will not be compliant with the DC profile\n"); + } + } + + if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc || parameters->cp_fixed_quality) + && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_alloc ^ parameters->cp_fixed_quality))) { + fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n"); + return 1; + } /* mod fixed_quality */ + + /* if no rate entered, lossless by default */ + if (parameters->tcp_numlayers == 0) { + parameters->tcp_rates[0] = 0; /* MOD antonin : losslessbug */ + parameters->tcp_numlayers++; + parameters->cp_disto_alloc = 1; + } + + if((parameters->cp_tx0 > parameters->image_offset_x0) || (parameters->cp_ty0 > parameters->image_offset_y0)) { + fprintf(stderr, + "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n", + parameters->cp_tx0, parameters->image_offset_x0, parameters->cp_ty0, parameters->image_offset_y0); + return 1; + } + + for (i = 0; i < parameters->numpocs; i++) { + if (parameters->POC[i].prg == -1) { + fprintf(stderr, + "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n", + i + 1); + } + } + + return 0; +} + + +/** Create the same index as j2k_create_index does, but in an int[] instead of in a file ==> easy to pass it back to Java, to transfer it etc. + @param buffer_size, increased by the length of the compressed index, in number of bytes + @return a pointer to a char[] + Syntax of the index: + one char for the version number (1): one byte because no problem with little endian, big endian etc. + one int for each of the following informations: + Image Width + Image Height + progression order + Tile width + Tile height + Nb tiles in X + Nb tiles in Y + Nb of components + Nb of layers + Nb of resolutions + + for each resolution: + Precinct width + Precinct height + + End main header position + codestream size + + For each tile: + tile number + tile start pos in codestream + tile header end position + tile end position in codestream + + For each LRCP, RLCP etc.: + packet number + tile number + layer number + resolution number + component number + precinct number + start position in the codestream + end position of this packet + */ +char* create_index_into_byte_array(opj_codestream_info_t *cstr_info, int* buffer_size) { + int tileno, compno, layno, resno, precno, pack_nb, x, y; + char* buffer = NULL; + int buffer_pos = 0; + int prec_max = 0; + + prec_max = 0; + for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) { + for (resno = 0; resno < cstr_info->numdecompos[0] + 1; resno++) { + prec_max = max(prec_max,cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]); + } + } + + // Compute the size of the index buffer, in number of bytes*/ + *buffer_size = + 1 /* version */ + + (10 /* image_w until decomposition */ + + (cstr_info->numdecompos[0]+1) * 2 /* pdx size for each tile */ + + 2 /* main_head_end + codestream_size */ + + cstr_info->tw * cstr_info->th * 4 /* tile info, without distorsion info */ + + cstr_info->tw*cstr_info->th * cstr_info->numlayers * (cstr_info->numdecompos[0] + 1) * cstr_info->numcomps * prec_max *8 + ) * sizeof(int); + //printf("C: index buffer size = %d bytes\n", *buffer_size); + buffer = (char*) malloc(*buffer_size); + + if (!buffer) { + //opj_event_msg(j2k->cinfo, EVT_ERROR, "failed to allocate index buffer for writing %d int\n", *buffer_size); + fprintf(stderr, "failed to allocate index buffer for writing %d int\n", *buffer_size); + return 0; + } + + buffer[0] = 1; // Version stored on a byte + buffer++; + // Remaining informations are stored on a int. + ((int*)buffer)[buffer_pos++] = cstr_info->image_w; + ((int*)buffer)[buffer_pos++] = cstr_info->image_h; + ((int*)buffer)[buffer_pos++] = cstr_info->prog; + ((int*)buffer)[buffer_pos++] = cstr_info->tile_x; + ((int*)buffer)[buffer_pos++] = cstr_info->tile_y; + ((int*)buffer)[buffer_pos++] = cstr_info->tw; + ((int*)buffer)[buffer_pos++] = cstr_info->th; + ((int*)buffer)[buffer_pos++] = cstr_info->numcomps; + ((int*)buffer)[buffer_pos++] = cstr_info->numlayers; + ((int*)buffer)[buffer_pos++] = cstr_info->numdecompos[0]; + + for (resno = cstr_info->numdecompos[0]; resno >= 0; resno--) { + /* based on tile 0 */ + ((int*)buffer)[buffer_pos++] = (1 << cstr_info->tile[0].pdx[resno]); + ((int*)buffer)[buffer_pos++] = (1 << cstr_info->tile[0].pdx[resno]); + } + ((int*)buffer)[buffer_pos++] = cstr_info->main_head_end; + ((int*)buffer)[buffer_pos++] = cstr_info->codestream_size; + + for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) { + ((int*)buffer)[buffer_pos++] = cstr_info->tile[tileno].tileno; + ((int*)buffer)[buffer_pos++] = cstr_info->tile[tileno].start_pos; + ((int*)buffer)[buffer_pos++] = cstr_info->tile[tileno].end_header; + ((int*)buffer)[buffer_pos++] = cstr_info->tile[tileno].end_pos; + } + + for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) { + int start_pos, end_pos; + int max_numdecompos = 0; + pack_nb = 0; + + for (compno = 0; compno < cstr_info->numcomps; compno++) { + if (max_numdecompos < cstr_info->numdecompos[compno]) + max_numdecompos = cstr_info->numdecompos[compno]; + } + + if (cstr_info->prog == LRCP) { /* LRCP */ + + for (layno = 0; layno < cstr_info->numlayers; layno++) { + for (resno = 0; resno < max_numdecompos + 1; resno++) { + for (compno = 0; compno < cstr_info->numcomps; compno++) { + int prec_max; + if (resno > cstr_info->numdecompos[compno]) + break; + prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + for (precno = 0; precno < prec_max; precno++) { + start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos; + end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos; + ((int*)buffer)[buffer_pos++] = pack_nb; + ((int*)buffer)[buffer_pos++] = tileno; + ((int*)buffer)[buffer_pos++] = layno; + ((int*)buffer)[buffer_pos++] = resno; + ((int*)buffer)[buffer_pos++] = compno; + ((int*)buffer)[buffer_pos++] = precno; + ((int*)buffer)[buffer_pos++] = start_pos; + ((int*)buffer)[buffer_pos++] = end_pos; + pack_nb++; + } + } + } + } + } /* LRCP */ + else if (cstr_info->prog == RLCP) { /* RLCP */ + + for (resno = 0; resno < max_numdecompos + 1; resno++) { + for (layno = 0; layno < cstr_info->numlayers; layno++) { + for (compno = 0; compno < cstr_info->numcomps; compno++) { + int prec_max; + if (resno > cstr_info->numdecompos[compno]) + break; + prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + for (precno = 0; precno < prec_max; precno++) { + start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos; + end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos; + ((int*)buffer)[buffer_pos++] = pack_nb; + ((int*)buffer)[buffer_pos++] = tileno; + ((int*)buffer)[buffer_pos++] = resno; + ((int*)buffer)[buffer_pos++] = layno; + ((int*)buffer)[buffer_pos++] = compno; + ((int*)buffer)[buffer_pos++] = precno; + ((int*)buffer)[buffer_pos++] = start_pos; + ((int*)buffer)[buffer_pos++] = end_pos; + pack_nb++; + } + } + } + } + } /* RLCP */ + else if (cstr_info->prog == RPCL) { /* RPCL */ + + for (resno = 0; resno < max_numdecompos + 1; resno++) { + /* I suppose components have same XRsiz, YRsiz */ + int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x; + int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y; + int x1 = x0 + cstr_info->tile_x; + int y1 = y0 + cstr_info->tile_y; + for (compno = 0; compno < cstr_info->numcomps; compno++) { + int prec_max; + if (resno > cstr_info->numdecompos[compno]) + break; + prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + for (precno = 0; precno < prec_max; precno++) { + int pcnx = cstr_info->tile[tileno].pw[resno]; + int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno ); + int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno ); + int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx; + int precno_y = (int) floor( (float)precno/(float)pcnx ); + for(y = y0; y < y1; y++) { + if (precno_y*pcy == y ) { + for (x = x0; x < x1; x++) { + if (precno_x*pcx == x ) { + for (layno = 0; layno < cstr_info->numlayers; layno++) { + start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos; + end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos; + ((int*)buffer)[buffer_pos++] = pack_nb; + ((int*)buffer)[buffer_pos++] = tileno; + ((int*)buffer)[buffer_pos++] = resno; + ((int*)buffer)[buffer_pos++] = precno; + ((int*)buffer)[buffer_pos++] = compno; + ((int*)buffer)[buffer_pos++] = layno; + ((int*)buffer)[buffer_pos++] = start_pos; + ((int*)buffer)[buffer_pos++] = end_pos; + pack_nb++; + } + } + }/* x = x0..x1 */ + } + } /* y = y0..y1 */ + } /* precno */ + } /* compno */ + } /* resno */ + } /* RPCL */ + else if (cstr_info->prog == PCRL) { /* PCRL */ + /* I suppose components have same XRsiz, YRsiz */ + int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x; + int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y; + int x1 = x0 + cstr_info->tile_x; + int y1 = y0 + cstr_info->tile_y; + + for (compno = 0; compno < cstr_info->numcomps; compno++) { + for (resno = 0; resno < max_numdecompos + 1; resno++) { + int prec_max; + if (resno > cstr_info->numdecompos[compno]) + break; + prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + for (precno = 0; precno < prec_max; precno++) { + int pcnx = cstr_info->tile[tileno].pw[resno]; + int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno ); + int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno ); + int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx; + int precno_y = (int) floor( (float)precno/(float)pcnx ); + for(y = y0; y < y1; y++) { + if (precno_y*pcy == y ) { + for (x = x0; x < x1; x++) { + if (precno_x*pcx == x ) { + for (layno = 0; layno < cstr_info->numlayers; layno++) { + start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos; + end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos; + ((int*)buffer)[buffer_pos++] = pack_nb; + ((int*)buffer)[buffer_pos++] = tileno; + ((int*)buffer)[buffer_pos++] = precno; + ((int*)buffer)[buffer_pos++] = compno; + ((int*)buffer)[buffer_pos++] = resno; + ((int*)buffer)[buffer_pos++] = layno; + ((int*)buffer)[buffer_pos++] = start_pos; + ((int*)buffer)[buffer_pos++] = end_pos; + pack_nb++; + } + } + }/* x = x0..x1 */ + } + } /* y = y0..y1 */ + } /* precno */ + } /* resno */ + } /* compno */ + } /* PCRL */ + else { /* CPRL */ + + for (compno = 0; compno < cstr_info->numcomps; compno++) { + /* I suppose components have same XRsiz, YRsiz */ + int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x; + int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y; + int x1 = x0 + cstr_info->tile_x; + int y1 = y0 + cstr_info->tile_y; + + for (resno = 0; resno < max_numdecompos + 1; resno++) { + int prec_max; + if (resno > cstr_info->numdecompos[compno]) + break; + prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + for (precno = 0; precno < prec_max; precno++) { + int pcnx = cstr_info->tile[tileno].pw[resno]; + int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno ); + int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno ); + int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx; + int precno_y = (int) floor( (float)precno/(float)pcnx ); + for(y = y0; y < y1; y++) { + if (precno_y*pcy == y ) { + for (x = x0; x < x1; x++) { + if (precno_x*pcx == x ) { + for (layno = 0; layno < cstr_info->numlayers; layno++) { + start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos; + end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos; + ((int*)buffer)[buffer_pos++] = pack_nb; + ((int*)buffer)[buffer_pos++] = tileno; + ((int*)buffer)[buffer_pos++] = compno; + ((int*)buffer)[buffer_pos++] = precno; + ((int*)buffer)[buffer_pos++] = resno; + ((int*)buffer)[buffer_pos++] = layno; + ((int*)buffer)[buffer_pos++] = start_pos; + ((int*)buffer)[buffer_pos++] = end_pos; + pack_nb++; + } + } + }/* x = x0..x1 */ + } + } /* y = y0..y1 */ + } /* precno */ + } /* resno */ + } /* compno */ + } /* CPRL */ + } /* tileno */ + + if (buffer_pos > *buffer_size) { + //opj_event_msg(j2k->cinfo, EVT_ERROR, "index creation: buffer_pos (%d) > buffer_size (%d)!\n", buffer_pos, *buffer_size); + fprintf(stderr, "index creation: buffer_pos (%d) > buffer_size (%d)!\n", buffer_pos, *buffer_size); + return 0; + } + + return --buffer; +} + + + + +/* -------------------------------------------------------------------------- + ------------ Get the image byte[] from the Java object -------------------*/ + +opj_image_t* loadImage(opj_cparameters_t *parameters, JNIEnv *env, jobject obj, jclass cls) { + int i,max,shift,w,h,depth; + opj_image_t * img = NULL; + int compno, numcomps; + opj_image_t * image = NULL; + opj_image_comp_t *comp; + opj_image_cmptparm_t cmptparm[3]; /* maximum of 3 components */ + OPJ_COLOR_SPACE color_space; + jfieldID fid; + jint ji; + jbyteArray jba; + jshortArray jsa; + jintArray jia; + int len; + jbyte *jbBody; + jshort *jsBody; + jint *jiBody; + boolean isCopy; + + // Image width, height and depth + fid = (*env)->GetFieldID(env, cls,"width", "I"); + ji = (*env)->GetIntField(env, obj, fid); + w = ji; + + fid = (*env)->GetFieldID(env, cls,"height", "I"); + ji = (*env)->GetIntField(env, obj, fid); + h = ji; + + fid = (*env)->GetFieldID(env, cls,"depth", "I"); + ji = (*env)->GetIntField(env, obj, fid); + depth = ji; + + // Read the image + if (depth <=16) { + numcomps = 1; + color_space = CLRSPC_GRAY; + } else { + numcomps = 3; + color_space = CLRSPC_SRGB; + } + memset(&cmptparm[0], 0, numcomps * sizeof(opj_image_cmptparm_t)); + + if (numcomps == 1) { + cmptparm[0].x0 = parameters->image_offset_x0; + cmptparm[0].y0 = parameters->image_offset_y0; + cmptparm[0].w = !cmptparm[0].x0 ? (w - 1) * parameters->subsampling_dx + 1 : cmptparm[0].x0 + (w - 1) * parameters->subsampling_dx + 1; + cmptparm[0].h = !cmptparm[0].y0 ? (h - 1) * parameters->subsampling_dy + 1 : cmptparm[0].y0 + (h - 1) * parameters->subsampling_dy + 1; + // Java types are always signed but we use them as unsigned types (shift of the negative part of + // the pixels of the images in Telemis before entering the encoder). + cmptparm[0].sgnd = 0; + if (depth<=16) + cmptparm[0].prec=depth; + else + cmptparm[0].prec = 8; + cmptparm[0].bpp = cmptparm[0].prec; + cmptparm[0].dx = parameters->subsampling_dx; + cmptparm[0].dy = parameters->subsampling_dy; + /*printf("C: component 0 initialised: x0=%d, y0=%d, w=%d, h=%d, sgnd=%d, bpp=%d, dx=%d, dy=%d, color_space=%d\n", cmptparm[0].x0, cmptparm[0].y0, cmptparm[0].w, + cmptparm[0].h, cmptparm[0].sgnd, cmptparm[0].bpp, cmptparm[0].dx, cmptparm[0].dy, color_space);*/ + } else { + for(i = 0; i < numcomps; i++) { + cmptparm[i].prec = 8; + cmptparm[i].bpp = 8; + cmptparm[i].sgnd = 0; + cmptparm[i].dx = parameters->subsampling_dx; + cmptparm[i].dy = parameters->subsampling_dy; + cmptparm[i].w = w; + cmptparm[i].h = h; + } + } + + /* create the image */ + image = opj_image_create(numcomps, &cmptparm[0], color_space); + + if (!image) + return NULL; + + if (depth <=16) { + image->numcomps=1; + } else { + image->numcomps = 3; + } + + /* set image offset and reference grid */ + image->x0 = cmptparm[0].x0; + image->y0 = cmptparm[0].x0; + image->x1 = cmptparm[0].w; + image->y1 = cmptparm[0].h; + + /* set image data */ + for (compno=0; compnocomps[compno]; + max = -100000; + if (depth == 8) { + fid = (*env)->GetFieldID(env, cls,"image8", "[B"); // byteArray [] + jba = (*env)->GetObjectField(env, obj, fid); + len = (*env)->GetArrayLength(env, jba); + + jbBody = (*env)->GetPrimitiveArrayCritical(env, jba, &isCopy); + //printf("C: before transfering 8 bpp image\n"); + if (comp->sgnd) { + for(i=0; i< len;i++) { + comp->data[i] = (char) jbBody[i]; + if (comp->data[i] > max) max = comp->data[i]; + } + } else { + for(i=0; i< len;i++) { + comp->data[i] = (unsigned char) jbBody[i]; + if (comp->data[i] > max) max = comp->data[i]; + } + } + (*env)->ReleasePrimitiveArrayCritical(env, jba, jbBody, 0); + } else if(depth == 16) { + fid = (*env)->GetFieldID(env, cls,"image16", "[S"); // shortArray [] + jsa = (*env)->GetObjectField(env, obj, fid); + len = (*env)->GetArrayLength(env, jsa); + + jsBody = (*env)->GetPrimitiveArrayCritical(env, jsa, &isCopy); + //printf("C: before transfering 16 bpp image\n"); + if (comp->sgnd) { // Special behaviour to deal with signed elements ?? + comp->data[i] = (short) jsBody[i]; + for(i=0; i< len;i++) { + if (comp->data[i] > max) max = comp->data[i]; + } + } else { + for(i=0; i< len;i++) { + comp->data[i] = (unsigned short) jsBody[i]; + if (comp->data[i] > max) max = comp->data[i]; + } + } + (*env)->ReleasePrimitiveArrayCritical(env, jsa, jsBody, 0); + } else if (depth == 24) { + fid = (*env)->GetFieldID(env, cls,"image24", "[I"); // intArray [] + jia = (*env)->GetObjectField(env, obj, fid); + len = (*env)->GetArrayLength(env, jia); + shift = compno*8; + + jiBody = (*env)->GetPrimitiveArrayCritical(env, jia, &isCopy); + //printf("C: before transfering 24 bpp image (component %d, signed = %d)\n", compno, comp->sgnd); + if (comp->sgnd) { // Special behaviour to deal with signed elements ?? XXXXX + for(i=0; i< len;i++) { + comp->data[i] = ( ((int) jiBody[i]) & (0xFF << shift) ) >> shift; + if (comp->data[i] > max) max = comp->data[i]; + } + } else { + for(i=0; i< len;i++) { + comp->data[i] = ( ((unsigned int) jiBody[i]) & (0xFF << shift) ) >> shift; + if (comp->data[i] > max) max = comp->data[i]; + } + } + (*env)->ReleasePrimitiveArrayCritical(env, jia, jiBody, 0); + } + comp->bpp = int_floorlog2(max)+1; + comp->prec = comp->bpp; + //printf("C: component %d: max %d, real bpp = %d\n", compno, max, comp->bpp); + } + return image; +} + + +/* -------------------------------------------------------------------------- + -------------------- MAIN METHOD, CALLED BY JAVA -----------------------*/ +JNIEXPORT jlong JNICALL Java_org_openJpeg_OpenJPEGJavaEncoder_internalEncodeImageToJ2K(JNIEnv *env, jobject obj, jobjectArray javaParameters) { + int argc; /* To simulate the command line parameters (taken from the javaParameters variable) and be able to re-use the */ + char **argv; /* 'parse_cmdline_decoder' method taken from the j2k_to_image project */ + bool bSuccess; + opj_cparameters_t parameters; /* compression parameters */ + img_fol_t img_fol; + opj_event_mgr_t event_mgr; /* event manager */ + opj_image_t *image = NULL; + int i,j,num_images; + int imageno; + opj_codestream_info_t cstr_info; /* Codestream information structure */ + char indexfilename[OPJ_PATH_LEN]; /* index file name */ + + int* compressed_index = NULL; + int compressed_index_size=-1; + // ==> Access variables to the Java member variables + jsize arraySize; + jclass cls; + jobject object; + jboolean isCopy; + jfieldID fid; + jbyteArray jba; + jbyte *jbBody; + callback_variables_t msgErrorCallback_vars; + // <== access variable to the Java member variables. + + // For the encoding and storage into the file + opj_cinfo_t* cinfo; + int codestream_length; + opj_cio_t *cio = NULL; + FILE *f = NULL; + + // JNI reference to the calling class + cls = (*env)->GetObjectClass(env, obj); + + // Pointers to be able to call a Java method for all the info and error messages + msgErrorCallback_vars.env = env; + msgErrorCallback_vars.jobj = &obj; + msgErrorCallback_vars.message_mid = (*env)->GetMethodID(env, cls, "logMessage", "(Ljava/lang/String;)V"); + msgErrorCallback_vars.error_mid = (*env)->GetMethodID(env, cls, "logError", "(Ljava/lang/String;)V"); + + arraySize = (*env)->GetArrayLength(env, javaParameters); + argc = (int) arraySize +1; + argv = malloc(argc*sizeof(char*)); + argv[0] = "ProgramName.exe"; // The program name: useless + j=0; + for (i=1; iGetObjectArrayElement(env, javaParameters, i-1); + argv[i] = (*env)->GetStringUTFChars(env, object, &isCopy); + } + + /*printf("C: "); + for (i=0; iReleaseStringUTFChars(env, (*env)->GetObjectArrayElement(env, javaParameters, i-1), argv[i]); + return -1; + } + + // Release the Java arguments array + for (i=1; iReleaseStringUTFChars(env, (*env)->GetObjectArrayElement(env, javaParameters, i-1), argv[i]); + + if (parameters.cp_cinema){ + cinema_parameters(¶meters); + } + + + /* Create comment for codestream */ + if(parameters.cp_comment == NULL) { + const char comment[] = "Created by JavaOpenJPEG version "; + const size_t clen = strlen(comment); + const char *version = opj_version(); +/* UniPG>> */ +#ifdef USE_JPWL + parameters.cp_comment = (char*)malloc(clen+strlen(version)+11); + sprintf(parameters.cp_comment,"%s%s with JPWL", comment, version); +#else + parameters.cp_comment = (char*)malloc(clen+strlen(version)+1); + sprintf(parameters.cp_comment,"%s%s", comment, version); +#endif +/* <numcomps == 3 ? 1 : 0; + + if(parameters.cp_cinema){ + cinema_setup_encoder(¶meters,image,&img_fol); + } + + /* encode the destination image */ + /* ---------------------------- */ + /* get a J2K compressor handle */ + if (parameters.cod_format == J2K_CFMT) { /* J2K format output */ + cinfo = opj_create_compress(CODEC_J2K); + } else { /* JP2 format output */ + cinfo = opj_create_compress(CODEC_JP2); + } + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, &msgErrorCallback_vars); + + /* setup the encoder parameters using the current image and user parameters */ + opj_setup_encoder(cinfo, ¶meters, image); + + /* open a byte stream for writing */ + /* allocate memory for all tiles */ + cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0); + + /* encode the image */ + bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info); + printf("C: after opj_encode_with_info\n"); + if (!bSuccess) { + opj_cio_close(cio); + fprintf(stderr, "failed to encode image\n"); + return -1; + } + codestream_length = cio_tell(cio); + + /* write the index on disk, if needed (-x 'filename') */ + if (*indexfilename) { + bSuccess = write_index_file(&cstr_info, indexfilename); + if (bSuccess) { + fprintf(stderr, "Failed to output index file into [%s]\n", indexfilename); + } + } + + compressed_index = create_index_into_byte_array(&cstr_info, &compressed_index_size); + /* Allocates the Java compressedIndex byte[] and sends this index into the Java object */ + fid = (*env)->GetFieldID(env, cls,"compressedIndex", "[B"); + jba = (*env)->NewByteArray(env, compressed_index_size+1); + jbBody = (*env)->GetPrimitiveArrayCritical(env, jba, 0); + memcpy(jbBody, compressed_index, compressed_index_size); + (*env)->ReleasePrimitiveArrayCritical(env, jba, jbBody, 0); + (*env)->SetObjectField(env, obj, fid, jba); + free(compressed_index); + + /* write the generated codestream to disk ? */ + if (parameters.outfile[0]!='\0') { + f = fopen(parameters.outfile, "wb"); + if (!f) { + fprintf(stderr, "failed to open [%s] for writing\n", parameters.outfile); + return -1; + } + fwrite(cio->buffer, 1, codestream_length, f); + fclose(f); + fprintf(stdout,"Generated outfile [%s]\n",parameters.outfile); + } + + /* Write the generated codestream to the Java pre-allocated compressedStream byte[] */ + fid = (*env)->GetFieldID(env, cls,"compressedStream", "[B"); + jba = (*env)->GetObjectField(env, obj, fid); + jbBody = (*env)->GetPrimitiveArrayCritical(env, jba, 0); + memcpy(jbBody, cio->buffer, codestream_length); + (*env)->ReleasePrimitiveArrayCritical(env, jba, jbBody, 0); + + /* close and free the byte stream */ + opj_cio_close(cio); + + /* free remaining compression structures */ + opj_destroy_compress(cinfo); + opj_destroy_cstr_info(&cstr_info); + + /* free image data */ + opj_image_destroy(image); + } + + /* free user parameters structure */ + if(parameters.cp_comment) free(parameters.cp_comment); + if(parameters.cp_matrice) free(parameters.cp_matrice); + + return codestream_length; +} diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.dsp b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.dsp new file mode 100644 index 0000000000..389ef7a26e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.dsp @@ -0,0 +1,110 @@ +# Microsoft Developer Studio Project File - Name="image_to_j2k" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=image_to_j2k - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "image_to_j2k.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "image_to_j2k.mak" CFG="image_to_j2k - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "image_to_j2k - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "image_to_j2k - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "image_to_j2k - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libc" +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "image_to_j2k - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "image_to_j2k - Win32 Release" +# Name "image_to_j2k - Win32 Debug" +# Begin Source File + +SOURCE=.\convert.c +# End Source File +# Begin Source File + +SOURCE=.\convert.h +# End Source File +# Begin Source File + +SOURCE=.\compat\getopt.c +# End Source File +# Begin Source File + +SOURCE=.\compat\getopt.h +# End Source File +# Begin Source File + +SOURCE=.\image_to_j2k.c +# End Source File +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.dsw b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.dsw new file mode 100644 index 0000000000..fd19c2603b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "LibOpenJPEG"=..\LibOpenJPEG.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "image_to_j2k"=.\image_to_j2k.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.vcproj b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.vcproj new file mode 100644 index 0000000000..06b507de14 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEG.vcproj @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEGDecoder.c b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEGDecoder.c new file mode 100644 index 0000000000..decc1373d1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/JavaOpenJPEGDecoder.c @@ -0,0 +1,883 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2006-2007, Parvatha Elangovan + * Copyright (c) 2007, Patrick Piscaglia (Telemis) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#include +#include +#include +#include +#include + +#include "openjpeg.h" +#include "getopt.h" +#include "convert.h" +#include "dirent.h" +#include "org_openJpeg_OpenJPEGJavaDecoder.h" + +#ifndef _WIN32 +#define stricmp strcasecmp +#define strnicmp strncasecmp +#endif + +#include "format_defs.h" + +typedef struct callback_variables { + JNIEnv *env; + /** 'jclass' object used to call a Java method from the C */ + jobject *jobj; + /** 'jclass' object used to call a Java method from the C */ + jmethodID message_mid; + jmethodID error_mid; +} callback_variables_t; + +typedef struct dircnt{ + /** Buffer for holding images read from Directory*/ + char *filename_buf; + /** Pointer to the buffer*/ + char **filename; +}dircnt_t; + + +typedef struct img_folder{ + /** The directory path of the folder containing input images*/ + char *imgdirpath; + /** Output format*/ + char *out_format; + /** Enable option*/ + char set_imgdir; + /** Enable Cod Format for output*/ + char set_out_format; + +}img_fol_t; + + +void decode_help_display() { + fprintf(stdout,"HELP\n----\n\n"); + fprintf(stdout,"- the -h option displays this help information on screen\n\n"); + +/* UniPG>> */ + fprintf(stdout,"List of parameters for the JPEG 2000 " +#ifdef USE_JPWL + "+ JPWL " +#endif /* USE_JPWL */ + "decoder:\n"); +/* < \n"); + fprintf(stdout," Currently accepts PGM, PPM, PNM, PGX, BMP format\n"); + fprintf(stdout," -i \n"); + fprintf(stdout," REQUIRED only if an Input image directory not specified\n"); + fprintf(stdout," Currently accepts J2K-files, JP2-files and JPT-files. The file type\n"); + fprintf(stdout," is identified based on its suffix.\n"); + fprintf(stdout," -o \n"); + fprintf(stdout," REQUIRED\n"); + fprintf(stdout," Currently accepts PGM-files, PPM-files, PNM-files, PGX-files and\n"); + fprintf(stdout," BMP-files. Binary data is written to the file (not ascii). If a PGX\n"); + fprintf(stdout," filename is given, there will be as many output files as there are\n"); + fprintf(stdout," components: an indice starting from 0 will then be appended to the\n"); + fprintf(stdout," output filename, just before the \"pgx\" extension. If a PGM filename\n"); + fprintf(stdout," is given and there are more than one component, only the first component\n"); + fprintf(stdout," will be written to the file.\n"); + fprintf(stdout," -r \n"); + fprintf(stdout," Set the number of highest resolution levels to be discarded. The\n"); + fprintf(stdout," image resolution is effectively divided by 2 to the power of the\n"); + fprintf(stdout," number of discarded levels. The reduce factor is limited by the\n"); + fprintf(stdout," smallest total number of decomposition levels among tiles.\n"); + fprintf(stdout," -l \n"); + fprintf(stdout," Set the maximum number of quality layers to decode. If there are\n"); + fprintf(stdout," less quality layers than the specified number, all the quality layers\n"); + fprintf(stdout," are decoded.\n"); +/* UniPG>> */ +#ifdef USE_JPWL + fprintf(stdout," -W \n"); + fprintf(stdout," Activates the JPWL correction capability, if the codestream complies.\n"); + fprintf(stdout," Options can be a comma separated list of tokens:\n"); + fprintf(stdout," c, c=numcomps\n"); + fprintf(stdout," numcomps is the number of expected components in the codestream\n"); + fprintf(stdout," (search of first EPB rely upon this, default is %d)\n", JPWL_EXPECTED_COMPONENTS); +#endif /* USE_JPWL */ +/* <d_name)==0 || strcmp("..",content->d_name)==0 ) + continue; + num_images++; + } + return num_images; +} + +int load_images(dircnt_t *dirptr, char *imgdirpath){ + DIR *dir; + struct dirent* content; + int i = 0; + + /*Reading the input images from given input directory*/ + + dir= opendir(imgdirpath); + if(!dir){ + fprintf(stderr,"Could not open Folder %s\n",imgdirpath); + return 1; + }else { + fprintf(stderr,"Folder opened successfully\n"); + } + + while((content=readdir(dir))!=NULL){ + if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 ) + continue; + + strcpy(dirptr->filename[i],content->d_name); + i++; + } + return 0; +} + +int get_file_format(char *filename) { + unsigned int i; + static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp","tif", "raw", "tga", "j2k", "jp2", "jpt", "j2c" }; + static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT }; + char * ext = strrchr(filename, '.'); + if (ext == NULL) + return -1; + ext++; + if(ext) { + for(i = 0; i < sizeof(format)/sizeof(*format); i++) { + if(strnicmp(ext, extension[i], 3) == 0) { + return format[i]; + } + } + } + + return -1; +} + + +/* -------------------------------------------------------------------------- */ + +int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,img_fol_t *img_fol) { + /* parse the command line */ + int totlen; + option_t long_option[]={ + {"ImgDir",REQ_ARG, NULL ,'y'}, + {"OutFor",REQ_ARG, NULL ,'O'}, + }; + +/* UniPG>> */ + const char optlist[] = "i:o:r:l:hx:" + +#ifdef USE_JPWL + "W:" +#endif /* USE_JPWL */ + ; + /*for (i=0; iset_out_format = 0; + reset_options_reading(); + + while (1) { + int c = getopt_long(argc, argv,optlist,long_option,totlen); + if (c == -1) + break; + switch (c) { + case 'i': /* input file */ + { + char *infile = optarg; + parameters->decod_format = get_file_format(infile); + switch(parameters->decod_format) { + case J2K_CFMT: + case JP2_CFMT: + case JPT_CFMT: + break; + default: + fprintf(stderr, + "!! Unrecognized format for infile : %s [accept only *.j2k, *.jp2, *.jpc or *.jpt] !!\n\n", + infile); + return 1; + } + strncpy(parameters->infile, infile, sizeof(parameters->infile)-1); + } + break; + + /* ----------------------------------------------------- */ + + case 'o': /* output file */ + { + char *outfile = optarg; + parameters->cod_format = get_file_format(outfile); + switch(parameters->cod_format) { + case PGX_DFMT: + case PXM_DFMT: + case BMP_DFMT: + case TIF_DFMT: + case RAW_DFMT: + case TGA_DFMT: + break; + default: + fprintf(stderr, "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n", outfile); + return 1; + } + strncpy(parameters->outfile, outfile, sizeof(parameters->outfile)-1); + } + break; + + /* ----------------------------------------------------- */ + + case 'O': /* output format */ + { + char outformat[50]; + char *of = optarg; + sprintf(outformat,".%s",of); + img_fol->set_out_format = 1; + parameters->cod_format = get_file_format(outformat); + switch(parameters->cod_format) { + case PGX_DFMT: + img_fol->out_format = "pgx"; + break; + case PXM_DFMT: + img_fol->out_format = "ppm"; + break; + case BMP_DFMT: + img_fol->out_format = "bmp"; + break; + case TIF_DFMT: + img_fol->out_format = "tif"; + break; + case RAW_DFMT: + img_fol->out_format = "raw"; + break; + case TGA_DFMT: + img_fol->out_format = "raw"; + break; + default: + fprintf(stderr, "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n", outformat); + return 1; + break; + } + } + break; + + /* ----------------------------------------------------- */ + + + case 'r': /* reduce option */ + { + sscanf(optarg, "%d", ¶meters->cp_reduce); + } + break; + + /* ----------------------------------------------------- */ + + + case 'l': /* layering option */ + { + sscanf(optarg, "%d", ¶meters->cp_layer); + } + break; + + /* ----------------------------------------------------- */ + + case 'h': /* display an help description */ + decode_help_display(); + return 1; + + /* ------------------------------------------------------ */ + + case 'y': /* Image Directory path */ + { + img_fol->imgdirpath = (char*)malloc(strlen(optarg) + 1); + strcpy(img_fol->imgdirpath,optarg); + img_fol->set_imgdir=1; + } + break; + /* ----------------------------------------------------- */ +/* UniPG>> */ +#ifdef USE_JPWL + + case 'W': /* activate JPWL correction */ + { + char *token = NULL; + + token = strtok(optarg, ","); + while(token != NULL) { + + /* search expected number of components */ + if (*token == 'c') { + + static int compno; + + compno = JPWL_EXPECTED_COMPONENTS; /* predefined no. of components */ + + if(sscanf(token, "c=%d", &compno) == 1) { + /* Specified */ + if ((compno < 1) || (compno > 256)) { + fprintf(stderr, "ERROR -> invalid number of components c = %d\n", compno); + return 1; + } + parameters->jpwl_exp_comps = compno; + + } else if (!strcmp(token, "c")) { + /* default */ + parameters->jpwl_exp_comps = compno; /* auto for default size */ + + } else { + fprintf(stderr, "ERROR -> invalid components specified = %s\n", token); + return 1; + }; + } + + /* search maximum number of tiles */ + if (*token == 't') { + + static int tileno; + + tileno = JPWL_MAXIMUM_TILES; /* maximum no. of tiles */ + + if(sscanf(token, "t=%d", &tileno) == 1) { + /* Specified */ + if ((tileno < 1) || (tileno > JPWL_MAXIMUM_TILES)) { + fprintf(stderr, "ERROR -> invalid number of tiles t = %d\n", tileno); + return 1; + } + parameters->jpwl_max_tiles = tileno; + + } else if (!strcmp(token, "t")) { + /* default */ + parameters->jpwl_max_tiles = tileno; /* auto for default size */ + + } else { + fprintf(stderr, "ERROR -> invalid tiles specified = %s\n", token); + return 1; + }; + } + + /* next token or bust */ + token = strtok(NULL, ","); + }; + parameters->jpwl_correct = true; + fprintf(stdout, "JPWL correction capability activated\n"); + fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps); + } + break; +#endif /* USE_JPWL */ +/* < this option is not valid \"-%c %s\"\n",c, optarg); + break; + } + } + + /* No check for possible errors before the -i and -o options are of course not mandatory*/ + + return 0; +} + +/* -------------------------------------------------------------------------- */ + +/** +error callback returning the message to Java andexpecting a callback_variables_t client object +*/ +void error_callback(const char *msg, void *client_data) { + callback_variables_t* vars = (callback_variables_t*) client_data; + JNIEnv *env = vars->env; + jstring jbuffer; + + jbuffer = (*env)->NewStringUTF(env, msg); + (*env)->ExceptionClear(env); + (*env)->CallVoidMethod(env, *(vars->jobj), vars->error_mid, jbuffer); + + if ((*env)->ExceptionOccurred(env)) { + fprintf(stderr,"C: Exception during call back method\n"); + (*env)->ExceptionDescribe(env); + (*env)->ExceptionClear(env); + } + (*env)->DeleteLocalRef(env, jbuffer); +} +/** +warning callback returning the message to Java andexpecting a callback_variables_t client object +*/ +void warning_callback(const char *msg, void *client_data) { + callback_variables_t* vars = (callback_variables_t*) client_data; + JNIEnv *env = vars->env; + jstring jbuffer; + + jbuffer = (*env)->NewStringUTF(env, msg); + (*env)->ExceptionClear(env); + (*env)->CallVoidMethod(env, *(vars->jobj), vars->message_mid, jbuffer); + + if ((*env)->ExceptionOccurred(env)) { + fprintf(stderr,"C: Exception during call back method\n"); + (*env)->ExceptionDescribe(env); + (*env)->ExceptionClear(env); + } + (*env)->DeleteLocalRef(env, jbuffer); +} +/** +information callback returning the message to Java andexpecting a callback_variables_t client object +*/ +void info_callback(const char *msg, void *client_data) { + callback_variables_t* vars = (callback_variables_t*) client_data; + JNIEnv *env = vars->env; + jstring jbuffer; + + jbuffer = (*env)->NewStringUTF(env, msg); + (*env)->ExceptionClear(env); + (*env)->CallVoidMethod(env, *(vars->jobj), vars->message_mid, jbuffer); + + if ((*env)->ExceptionOccurred(env)) { + fprintf(stderr,"C: Exception during call back method\n"); + (*env)->ExceptionDescribe(env); + (*env)->ExceptionClear(env); + } + (*env)->DeleteLocalRef(env, jbuffer); +} + + +/* -------------------------------------------------------------------------- + -------------------- MAIN METHOD, CALLED BY JAVA -----------------------*/ +JNIEXPORT jint JNICALL Java_org_openJpeg_OpenJPEGJavaDecoder_internalDecodeJ2KtoImage(JNIEnv *env, jobject obj, jobjectArray javaParameters) { + int argc; /* To simulate the command line parameters (taken from the javaParameters variable) and be able to re-use the */ + char **argv; /* 'parse_cmdline_decoder' method taken from the j2k_to_image project */ + opj_dparameters_t parameters; /* decompression parameters */ + img_fol_t img_fol; + opj_event_mgr_t event_mgr; /* event manager */ + opj_image_t *image = NULL; + FILE *fsrc = NULL; + unsigned char *src = NULL; + int file_length; + int num_images; + int i,j,imageno; + opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */ + opj_cio_t *cio = NULL; + int w,h; + long min_value, max_value; + short tempS; unsigned char tempUC, tempUC1, tempUC2; + // ==> Access variables to the Java member variables + jsize arraySize; + jclass cls; + jobject object; + jboolean isCopy; + jfieldID fid; + jbyteArray jba; + jshortArray jsa; + jintArray jia; + jbyte *jbBody, *ptrBBody; + jshort *jsBody, *ptrSBody; + jint *jiBody, *ptrIBody; + callback_variables_t msgErrorCallback_vars; + // <=== access variable to Java member variables */ + int *ptr, *ptr1, *ptr2; // <== To transfer the decoded image to Java + + /* configure the event callbacks */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = info_callback; + + // JNI reference to the calling class + cls = (*env)->GetObjectClass(env, obj); + + // Pointers to be able to call a Java method for all the info and error messages + msgErrorCallback_vars.env = env; + msgErrorCallback_vars.jobj = &obj; + msgErrorCallback_vars.message_mid = (*env)->GetMethodID(env, cls, "logMessage", "(Ljava/lang/String;)V"); + msgErrorCallback_vars.error_mid = (*env)->GetMethodID(env, cls, "logError", "(Ljava/lang/String;)V"); + + // Get the String[] containing the parameters, and converts it into a char** to simulate command line arguments. + arraySize = (*env)->GetArrayLength(env, javaParameters); + argc = (int) arraySize +1; + argv = malloc(argc*sizeof(char*)); + argv[0] = "ProgramName.exe"; // The program name: useless + j=0; + for (i=1; iGetObjectArrayElement(env, javaParameters, i-1); + argv[i] = (*env)->GetStringUTFChars(env, object, &isCopy); + } + + /*printf("C: decoder params = "); + for (i=0; iReleaseStringUTFChars(env, (*env)->GetObjectArrayElement(env, javaParameters, i-1), argv[i]); + return -1; + } + // Release the Java arguments array + for (i=1; iReleaseStringUTFChars(env, (*env)->GetObjectArrayElement(env, javaParameters, i-1), argv[i]); + + num_images=1; + + // Get additional information from the Java object variables + fid = (*env)->GetFieldID(env, cls,"skippedResolutions", "I"); + parameters.cp_reduce = (short) (*env)->GetIntField(env, obj, fid); + + /*Decoding image one by one*/ + for(imageno = 0; imageno < num_images ; imageno++) + { + image = NULL; + fprintf(stderr,"\n"); + + /* read the input file and put it in memory into the 'src' object, if the -i option is given in JavaParameters. + Implemented for debug purpose. */ + /* -------------------------------------------------------------- */ + if (parameters.infile && parameters.infile[0]!='\0') { + //printf("C: opening [%s]\n", parameters.infile); + fsrc = fopen(parameters.infile, "rb"); + if (!fsrc) { + fprintf(stderr, "ERROR -> failed to open %s for reading\n", parameters.infile); + return 1; + } + fseek(fsrc, 0, SEEK_END); + file_length = ftell(fsrc); + fseek(fsrc, 0, SEEK_SET); + src = (unsigned char *) malloc(file_length); + fread(src, 1, file_length, fsrc); + fclose(fsrc); + //printf("C: %d bytes read from file\n",file_length); + } else { + // Preparing the transfer of the codestream from Java to C + //printf("C: before transfering codestream\n"); + fid = (*env)->GetFieldID(env, cls,"compressedStream", "[B"); + jba = (*env)->GetObjectField(env, obj, fid); + file_length = (*env)->GetArrayLength(env, jba); + jbBody = (*env)->GetByteArrayElements(env, jba, &isCopy); + src = (unsigned char*)jbBody; + } + + /* decode the code-stream */ + /* ---------------------- */ + + switch(parameters.decod_format) { + case J2K_CFMT: + { + /* JPEG-2000 codestream */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_J2K); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, &msgErrorCallback_vars); + + /* setup the decoder decoding parameters using user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + + /* decode the stream and fill the image structure */ + image = opj_decode(dinfo, cio); + if(!image) { + fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + + /* close the byte stream */ + opj_cio_close(cio); + } + break; + + case JP2_CFMT: + { + /* JPEG 2000 compressed image data */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_JP2); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, &msgErrorCallback_vars); + + /* setup the decoder decoding parameters using the current image and user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + + /* decode the stream and fill the image structure */ + image = opj_decode(dinfo, cio); + if(!image) { + fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + + /* close the byte stream */ + opj_cio_close(cio); + + } + break; + + case JPT_CFMT: + { + /* JPEG 2000, JPIP */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_JPT); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, &msgErrorCallback_vars); + + /* setup the decoder decoding parameters using user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + + /* decode the stream and fill the image structure */ + image = opj_decode(dinfo, cio); + if(!image) { + fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + + /* close the byte stream */ + opj_cio_close(cio); + } + break; + + default: + fprintf(stderr, "skipping file..\n"); + continue; + } + + /* free the memory containing the code-stream */ + if (parameters.infile && parameters.infile[0]!='\0') { + free(src); + } else { + (*env)->ReleaseByteArrayElements(env, jba, jbBody, 0); + } + src = NULL; + + /* create output image. + If the -o parameter is given in the JavaParameters, write the decoded version into a file. + Implemented for debug purpose. */ + /* ---------------------------------- */ + switch (parameters.cod_format) { + case PXM_DFMT: /* PNM PGM PPM */ + if (imagetopnm(image, parameters.outfile)) { + fprintf(stdout,"Outfile %s not generated\n",parameters.outfile); + } + else { + fprintf(stdout,"Generated Outfile %s\n",parameters.outfile); + } + break; + + case PGX_DFMT: /* PGX */ + if(imagetopgx(image, parameters.outfile)){ + fprintf(stdout,"Outfile %s not generated\n",parameters.outfile); + } + else { + fprintf(stdout,"Generated Outfile %s\n",parameters.outfile); + } + break; + + case BMP_DFMT: /* BMP */ + if(imagetobmp(image, parameters.outfile)){ + fprintf(stdout,"Outfile %s not generated\n",parameters.outfile); + } + else { + fprintf(stdout,"Generated Outfile %s\n",parameters.outfile); + } + break; + + } + + // ========= Return the image to the Java structure =============== +#ifdef CHECK_THRESHOLDS + printf("C: checking thresholds\n"); +#endif + // First compute the real with and height, in function of the resolutions decoded. + //wr = (image->comps[0].w + (1 << image->comps[0].factor) -1) >> image->comps[0].factor; + //hr = (image->comps[0].h + (1 << image->comps[0].factor) -1) >> image->comps[0].factor; + w = image->comps[0].w; + h = image->comps[0].h; + + if (image->numcomps==3) { // 3 components color image + ptr = image->comps[0].data; + ptr1 = image->comps[1].data; + ptr2 = image->comps[2].data; +#ifdef CHECK_THRESHOLDS + if (image->comps[0].sgnd) { + min_value = -128; + max_value = 127; + } else { + min_value = 0; + max_value = 255; + } +#endif + // Get the pointer to the Java structure where the data must be copied + fid = (*env)->GetFieldID(env, cls,"image24", "[I"); + jia = (*env)->GetObjectField(env, obj, fid); + jiBody = (*env)->GetIntArrayElements(env, jia, 0); + ptrIBody = jiBody; + printf("C: transfering image24: %d int to Java pointer=%d\n",image->numcomps*w*h, ptrIBody); + + for (i=0; i max_value) + tempUC=max_value; + if (tempUC1 < min_value) + tempUC1=min_value; + else if (tempUC1 > max_value) + tempUC1=max_value; + if (tempUC2 < min_value) + tempUC2=min_value; + else if (tempUC2 > max_value) + tempUC2=max_value; +#endif + *(ptrIBody++) = (int) ( (tempUC2<<16) + (tempUC1<<8) + tempUC ); + } + (*env)->ReleaseIntArrayElements(env, jia, jiBody, 0); + + } else { // 1 component 8 or 16 bpp image + ptr = image->comps[0].data; + printf("C: before transfering a %d bpp image to java (length = %d)\n",image->comps[0].prec ,w*h); + if (image->comps[0].prec<=8) { + fid = (*env)->GetFieldID(env, cls,"image8", "[B"); + jba = (*env)->GetObjectField(env, obj, fid); + jbBody = (*env)->GetByteArrayElements(env, jba, 0); + ptrBBody = jbBody; +#ifdef CHECK_THRESHOLDS + if (image->comps[0].sgnd) { + min_value = -128; + max_value = 127; + } else { + min_value = 0; + max_value = 255; + } +#endif + //printf("C: transfering %d shorts to Java image8 pointer = %d\n", wr*hr,ptrSBody); + for (i=0; i max_value) + tempUC = max_value; +#endif + *(ptrBBody++) = tempUC; + } + (*env)->ReleaseByteArrayElements(env, jba, jbBody, 0); + printf("C: image8 transfered to Java\n"); + } else { + fid = (*env)->GetFieldID(env, cls,"image16", "[S"); + jsa = (*env)->GetObjectField(env, obj, fid); + jsBody = (*env)->GetShortArrayElements(env, jsa, 0); + ptrSBody = jsBody; +#ifdef CHECK_THRESHOLDS + if (image->comps[0].sgnd) { + min_value = -32768; + max_value = 32767; + } else { + min_value = 0; + max_value = 65535; + } + printf("C: minValue = %d, maxValue = %d\n", min_value, max_value); +#endif + printf("C: transfering %d shorts to Java image16 pointer = %d\n", w*h,ptrSBody); + for (i=0; i max_value) { + printf("C: value %d truncated to %d\n", tempS, max_value); + tempS = max_value; + } +#endif + *(ptrSBody++) = tempS; + } + (*env)->ReleaseShortArrayElements(env, jsa, jsBody, 0); + printf("C: image16 completely filled\n"); + } + } + + + /* free remaining structures */ + if(dinfo) { + opj_destroy_decompress(dinfo); + } + /* free image data structure */ + opj_image_destroy(image); + + } + return 1; /* OK */ +} +//end main + diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/Makefile b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/Makefile new file mode 100644 index 0000000000..9ac3e40701 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/Makefile @@ -0,0 +1,14 @@ +# Makefile for the main OpenJPEG codecs: j2k_to_image and image_to_j2k + +CFLAGS = -O3 -lstdc++ # -g -p -pg + +all: j2k_to_image image_to_j2k + +j2k_to_image: j2k_to_image.c ../libopenjpeg.a + gcc $(CFLAGS) ../common/getopt.c convert.c j2k_to_image.c -o j2k_to_image -L.. -lopenjpeg -I ../libopenjpeg/ -lm -ltiff + +image_to_j2k: image_to_j2k.c ../libopenjpeg.a + gcc $(CFLAGS) ../common/getopt.c convert.c image_to_j2k.c -o image_to_j2k -L.. -lopenjpeg -I ../libopenjpeg/ -lm -ltiff + +clean: + rm -f j2k_to_image image_to_j2k diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jawt.h b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jawt.h new file mode 100644 index 0000000000..30a49adf77 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jawt.h @@ -0,0 +1,278 @@ +/* + * @(#)jawt.h 1.10 03/12/19 + * + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +#ifndef _JAVASOFT_JAWT_H_ +#define _JAVASOFT_JAWT_H_ + +#include "jni.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * AWT native interface (new in JDK 1.3) + * + * The AWT native interface allows a native C or C++ application a means + * by which to access native structures in AWT. This is to facilitate moving + * legacy C and C++ applications to Java and to target the needs of the + * community who, at present, wish to do their own native rendering to canvases + * for performance reasons. Standard extensions such as Java3D also require a + * means to access the underlying native data structures of AWT. + * + * There may be future extensions to this API depending on demand. + * + * A VM does not have to implement this API in order to pass the JCK. + * It is recommended, however, that this API is implemented on VMs that support + * standard extensions, such as Java3D. + * + * Since this is a native API, any program which uses it cannot be considered + * 100% pure java. + */ + +/* + * AWT Native Drawing Surface (JAWT_DrawingSurface). + * + * For each platform, there is a native drawing surface structure. This + * platform-specific structure can be found in jawt_md.h. It is recommended + * that additional platforms follow the same model. It is also recommended + * that VMs on Win32 and Solaris support the existing structures in jawt_md.h. + * + ******************* + * EXAMPLE OF USAGE: + ******************* + * + * In Win32, a programmer wishes to access the HWND of a canvas to perform + * native rendering into it. The programmer has declared the paint() method + * for their canvas subclass to be native: + * + * + * MyCanvas.java: + * + * import java.awt.*; + * + * public class MyCanvas extends Canvas { + * + * static { + * System.loadLibrary("mylib"); + * } + * + * public native void paint(Graphics g); + * } + * + * + * myfile.c: + * + * #include "jawt_md.h" + * #include + * + * JNIEXPORT void JNICALL + * Java_MyCanvas_paint(JNIEnv* env, jobject canvas, jobject graphics) + * { + * JAWT awt; + * JAWT_DrawingSurface* ds; + * JAWT_DrawingSurfaceInfo* dsi; + * JAWT_Win32DrawingSurfaceInfo* dsi_win; + * jboolean result; + * jint lock; + * + * // Get the AWT + * awt.version = JAWT_VERSION_1_3; + * result = JAWT_GetAWT(env, &awt); + * assert(result != JNI_FALSE); + * + * // Get the drawing surface + * ds = awt.GetDrawingSurface(env, canvas); + * assert(ds != NULL); + * + * // Lock the drawing surface + * lock = ds->Lock(ds); + * assert((lock & JAWT_LOCK_ERROR) == 0); + * + * // Get the drawing surface info + * dsi = ds->GetDrawingSurfaceInfo(ds); + * + * // Get the platform-specific drawing info + * dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo; + * + * ////////////////////////////// + * // !!! DO PAINTING HERE !!! // + * ////////////////////////////// + * + * // Free the drawing surface info + * ds->FreeDrawingSurfaceInfo(dsi); + * + * // Unlock the drawing surface + * ds->Unlock(ds); + * + * // Free the drawing surface + * awt.FreeDrawingSurface(ds); + * } + * + */ + +/* + * JAWT_Rectangle + * Structure for a native rectangle. + */ +typedef struct jawt_Rectangle { + jint x; + jint y; + jint width; + jint height; +} JAWT_Rectangle; + +struct jawt_DrawingSurface; + +/* + * JAWT_DrawingSurfaceInfo + * Structure for containing the underlying drawing information of a component. + */ +typedef struct jawt_DrawingSurfaceInfo { + /* + * Pointer to the platform-specific information. This can be safely + * cast to a JAWT_Win32DrawingSurfaceInfo on Windows or a + * JAWT_X11DrawingSurfaceInfo on Solaris. See jawt_md.h for details. + */ + void* platformInfo; + /* Cached pointer to the underlying drawing surface */ + struct jawt_DrawingSurface* ds; + /* Bounding rectangle of the drawing surface */ + JAWT_Rectangle bounds; + /* Number of rectangles in the clip */ + jint clipSize; + /* Clip rectangle array */ + JAWT_Rectangle* clip; +} JAWT_DrawingSurfaceInfo; + +#define JAWT_LOCK_ERROR 0x00000001 +#define JAWT_LOCK_CLIP_CHANGED 0x00000002 +#define JAWT_LOCK_BOUNDS_CHANGED 0x00000004 +#define JAWT_LOCK_SURFACE_CHANGED 0x00000008 + +/* + * JAWT_DrawingSurface + * Structure for containing the underlying drawing information of a component. + * All operations on a JAWT_DrawingSurface MUST be performed from the same + * thread as the call to GetDrawingSurface. + */ +typedef struct jawt_DrawingSurface { + /* + * Cached reference to the Java environment of the calling thread. + * If Lock(), Unlock(), GetDrawingSurfaceInfo() or + * FreeDrawingSurfaceInfo() are called from a different thread, + * this data member should be set before calling those functions. + */ + JNIEnv* env; + /* Cached reference to the target object */ + jobject target; + /* + * Lock the surface of the target component for native rendering. + * When finished drawing, the surface must be unlocked with + * Unlock(). This function returns a bitmask with one or more of the + * following values: + * + * JAWT_LOCK_ERROR - When an error has occurred and the surface could not + * be locked. + * + * JAWT_LOCK_CLIP_CHANGED - When the clip region has changed. + * + * JAWT_LOCK_BOUNDS_CHANGED - When the bounds of the surface have changed. + * + * JAWT_LOCK_SURFACE_CHANGED - When the surface itself has changed + */ + jint (JNICALL *Lock) + (struct jawt_DrawingSurface* ds); + /* + * Get the drawing surface info. + * The value returned may be cached, but the values may change if + * additional calls to Lock() or Unlock() are made. + * Lock() must be called before this can return a valid value. + * Returns NULL if an error has occurred. + * When finished with the returned value, FreeDrawingSurfaceInfo must be + * called. + */ + JAWT_DrawingSurfaceInfo* (JNICALL *GetDrawingSurfaceInfo) + (struct jawt_DrawingSurface* ds); + /* + * Free the drawing surface info. + */ + void (JNICALL *FreeDrawingSurfaceInfo) + (JAWT_DrawingSurfaceInfo* dsi); + /* + * Unlock the drawing surface of the target component for native rendering. + */ + void (JNICALL *Unlock) + (struct jawt_DrawingSurface* ds); +} JAWT_DrawingSurface; + +/* + * JAWT + * Structure for containing native AWT functions. + */ +typedef struct jawt { + /* + * Version of this structure. This must always be set before + * calling JAWT_GetAWT() + */ + jint version; + /* + * Return a drawing surface from a target jobject. This value + * may be cached. + * Returns NULL if an error has occurred. + * Target must be a java.awt.Component (should be a Canvas + * or Window for native rendering). + * FreeDrawingSurface() must be called when finished with the + * returned JAWT_DrawingSurface. + */ + JAWT_DrawingSurface* (JNICALL *GetDrawingSurface) + (JNIEnv* env, jobject target); + /* + * Free the drawing surface allocated in GetDrawingSurface. + */ + void (JNICALL *FreeDrawingSurface) + (JAWT_DrawingSurface* ds); + /* + * Since 1.4 + * Locks the entire AWT for synchronization purposes + */ + void (JNICALL *Lock)(JNIEnv* env); + /* + * Since 1.4 + * Unlocks the entire AWT for synchronization purposes + */ + void (JNICALL *Unlock)(JNIEnv* env); + /* + * Since 1.4 + * Returns a reference to a java.awt.Component from a native + * platform handle. On Windows, this corresponds to an HWND; + * on Solaris and Linux, this is a Drawable. For other platforms, + * see the appropriate machine-dependent header file for a description. + * The reference returned by this function is a local + * reference that is only valid in this environment. + * This function returns a NULL reference if no component could be + * found with matching platform information. + */ + jobject (JNICALL *GetComponent)(JNIEnv* env, void* platformInfo); + +} JAWT; + +/* + * Get the AWT native structure. This function returns JNI_FALSE if + * an error occurs. + */ +_JNI_IMPORT_OR_EXPORT_ +jboolean JNICALL JAWT_GetAWT(JNIEnv* env, JAWT* awt); + +#define JAWT_VERSION_1_3 0x00010003 +#define JAWT_VERSION_1_4 0x00010004 + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* !_JAVASOFT_JAWT_H_ */ diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jdwpTransport.h b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jdwpTransport.h new file mode 100644 index 0000000000..1d780092d5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jdwpTransport.h @@ -0,0 +1,237 @@ +/* + * @(#)jdwpTransport.h 1.7 03/12/19 + * + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +/* + * Java Debug Wire Protocol Transport Service Provider Interface. + */ + +#ifndef JDWPTRANSPORT_H +#define JDWPTRANSPORT_H + +#include "jni.h" + +enum { + JDWPTRANSPORT_VERSION_1_0 = 0x00010000 +}; + +#ifdef __cplusplus +extern "C" { +#endif + +struct jdwpTransportNativeInterface_; + +struct _jdwpTransportEnv; + +#ifdef __cplusplus +typedef _jdwpTransportEnv jdwpTransportEnv; +#else +typedef const struct jdwpTransportNativeInterface_ *jdwpTransportEnv; +#endif /* __cplusplus */ + +/* + * Errors. Universal errors with JVMTI/JVMDI equivalents keep the + * values the same. + */ +typedef enum { + JDWPTRANSPORT_ERROR_NONE = 0, + JDWPTRANSPORT_ERROR_ILLEGAL_ARGUMENT = 103, + JDWPTRANSPORT_ERROR_OUT_OF_MEMORY = 110, + JDWPTRANSPORT_ERROR_INTERNAL = 113, + JDWPTRANSPORT_ERROR_ILLEGAL_STATE = 201, + JDWPTRANSPORT_ERROR_IO_ERROR = 202, + JDWPTRANSPORT_ERROR_TIMEOUT = 203, + JDWPTRANSPORT_ERROR_MSG_NOT_AVAILABLE = 204 +} jdwpTransportError; + + +/* + * Structure to define capabilities + */ +typedef struct { + unsigned int can_timeout_attach :1; + unsigned int can_timeout_accept :1; + unsigned int can_timeout_handshake :1; + unsigned int reserved3 :1; + unsigned int reserved4 :1; + unsigned int reserved5 :1; + unsigned int reserved6 :1; + unsigned int reserved7 :1; + unsigned int reserved8 :1; + unsigned int reserved9 :1; + unsigned int reserved10 :1; + unsigned int reserved11 :1; + unsigned int reserved12 :1; + unsigned int reserved13 :1; + unsigned int reserved14 :1; + unsigned int reserved15 :1; +} JDWPTransportCapabilities; + + +/* + * Structures to define packet layout. + * + * See: http://java.sun.com/j2se/1.5/docs/guide/jpda/jdwp-spec.html + */ + +enum { + JDWPTRANSPORT_FLAGS_NONE = 0x0, + JDWPTRANSPORT_FLAGS_REPLY = 0x80 +}; + +typedef struct { + jint len; + jint id; + jbyte flags; + jbyte cmdSet; + jbyte cmd; + jbyte *data; +} jdwpCmdPacket; + +typedef struct { + jint len; + jint id; + jbyte flags; + jshort errorCode; + jbyte *data; +} jdwpReplyPacket; + +typedef struct { + union { + jdwpCmdPacket cmd; + jdwpReplyPacket reply; + } type; +} jdwpPacket; + +/* + * JDWP functions called by the transport. + */ +typedef struct jdwpTransportCallback { + void *(*alloc)(jint numBytes); /* Call this for all allocations */ + void (*free)(void *buffer); /* Call this for all deallocations */ +} jdwpTransportCallback; + +typedef jint (JNICALL *jdwpTransport_OnLoad_t)(JavaVM *jvm, + jdwpTransportCallback *callback, + jint version, + jdwpTransportEnv** env); + + + +/* Function Interface */ + +struct jdwpTransportNativeInterface_ { + /* 1 : RESERVED */ + void *reserved1; + + /* 2 : Get Capabilities */ + jdwpTransportError (JNICALL *GetCapabilities)(jdwpTransportEnv* env, + JDWPTransportCapabilities *capabilities_ptr); + + /* 3 : Attach */ + jdwpTransportError (JNICALL *Attach)(jdwpTransportEnv* env, + const char* address, + jlong attach_timeout, + jlong handshake_timeout); + + /* 4: StartListening */ + jdwpTransportError (JNICALL *StartListening)(jdwpTransportEnv* env, + const char* address, + char** actual_address); + + /* 5: StopListening */ + jdwpTransportError (JNICALL *StopListening)(jdwpTransportEnv* env); + + /* 6: Accept */ + jdwpTransportError (JNICALL *Accept)(jdwpTransportEnv* env, + jlong accept_timeout, + jlong handshake_timeout); + + /* 7: IsOpen */ + jboolean (JNICALL *IsOpen)(jdwpTransportEnv* env); + + /* 8: Close */ + jdwpTransportError (JNICALL *Close)(jdwpTransportEnv* env); + + /* 9: ReadPacket */ + jdwpTransportError (JNICALL *ReadPacket)(jdwpTransportEnv* env, + jdwpPacket *pkt); + + /* 10: Write Packet */ + jdwpTransportError (JNICALL *WritePacket)(jdwpTransportEnv* env, + const jdwpPacket* pkt); + + /* 11: GetLastError */ + jdwpTransportError (JNICALL *GetLastError)(jdwpTransportEnv* env, + char** error); + +}; + + +/* + * Use inlined functions so that C++ code can use syntax such as + * env->Attach("mymachine:5000", 10*1000, 0); + * + * rather than using C's :- + * + * (*env)->Attach(env, "mymachine:5000", 10*1000, 0); + */ +struct _jdwpTransportEnv { + const struct jdwpTransportNativeInterface_ *functions; +#ifdef __cplusplus + + jdwpTransportError GetCapabilities(JDWPTransportCapabilities *capabilities_ptr) { + return functions->GetCapabilities(this, capabilities_ptr); + } + + jdwpTransportError Attach(const char* address, jlong attach_timeout, + jlong handshake_timeout) { + return functions->Attach(this, address, attach_timeout, handshake_timeout); + } + + jdwpTransportError StartListening(const char* address, + char** actual_address) { + return functions->StartListening(this, address, actual_address); + } + + jdwpTransportError StopListening(void) { + return functions->StopListening(this); + } + + jdwpTransportError Accept(jlong accept_timeout, jlong handshake_timeout) { + return functions->Accept(this, accept_timeout, handshake_timeout); + } + + jboolean IsOpen(void) { + return functions->IsOpen(this); + } + + jdwpTransportError Close(void) { + return functions->Close(this); + } + + jdwpTransportError ReadPacket(jdwpPacket *pkt) { + return functions->ReadPacket(this, pkt); + } + + jdwpTransportError WritePacket(const jdwpPacket* pkt) { + return functions->WritePacket(this, pkt); + } + + jdwpTransportError GetLastError(char** error) { + return functions->GetLastError(this, error); + } + + +#endif /* __cplusplus */ +}; + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* JDWPTRANSPORT_H */ + diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jni.h b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jni.h new file mode 100644 index 0000000000..cb3baef528 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jni.h @@ -0,0 +1,1951 @@ +/* + * @(#)jni.h 1.56 03/12/19 + * + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +/* + * We used part of Netscape's Java Runtime Interface (JRI) as the starting + * point of our design and implementation. + */ + +/****************************************************************************** + * Java Runtime Interface + * Copyright (c) 1996 Netscape Communications Corporation. All rights reserved. + *****************************************************************************/ + +#ifndef _JAVASOFT_JNI_H_ +#define _JAVASOFT_JNI_H_ + +#include +#include + +/* jni_md.h contains the machine-dependent typedefs for jbyte, jint + and jlong */ + +#include "jni_md.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * JNI Types + */ + +#ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H + +typedef unsigned char jboolean; +typedef unsigned short jchar; +typedef short jshort; +typedef float jfloat; +typedef double jdouble; + +typedef jint jsize; + +#ifdef __cplusplus + +class _jobject {}; +class _jclass : public _jobject {}; +class _jthrowable : public _jobject {}; +class _jstring : public _jobject {}; +class _jarray : public _jobject {}; +class _jbooleanArray : public _jarray {}; +class _jbyteArray : public _jarray {}; +class _jcharArray : public _jarray {}; +class _jshortArray : public _jarray {}; +class _jintArray : public _jarray {}; +class _jlongArray : public _jarray {}; +class _jfloatArray : public _jarray {}; +class _jdoubleArray : public _jarray {}; +class _jobjectArray : public _jarray {}; + +typedef _jobject *jobject; +typedef _jclass *jclass; +typedef _jthrowable *jthrowable; +typedef _jstring *jstring; +typedef _jarray *jarray; +typedef _jbooleanArray *jbooleanArray; +typedef _jbyteArray *jbyteArray; +typedef _jcharArray *jcharArray; +typedef _jshortArray *jshortArray; +typedef _jintArray *jintArray; +typedef _jlongArray *jlongArray; +typedef _jfloatArray *jfloatArray; +typedef _jdoubleArray *jdoubleArray; +typedef _jobjectArray *jobjectArray; + +#else + +struct _jobject; + +typedef struct _jobject *jobject; +typedef jobject jclass; +typedef jobject jthrowable; +typedef jobject jstring; +typedef jobject jarray; +typedef jarray jbooleanArray; +typedef jarray jbyteArray; +typedef jarray jcharArray; +typedef jarray jshortArray; +typedef jarray jintArray; +typedef jarray jlongArray; +typedef jarray jfloatArray; +typedef jarray jdoubleArray; +typedef jarray jobjectArray; + +#endif + +typedef jobject jweak; + +typedef union jvalue { + jboolean z; + jbyte b; + jchar c; + jshort s; + jint i; + jlong j; + jfloat f; + jdouble d; + jobject l; +} jvalue; + +struct _jfieldID; +typedef struct _jfieldID *jfieldID; + +struct _jmethodID; +typedef struct _jmethodID *jmethodID; + +#endif /* JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H */ + +/* + * jboolean constants + */ + +#define JNI_FALSE 0 +#define JNI_TRUE 1 + +/* + * possible return values for JNI functions. + */ + +#define JNI_OK 0 /* success */ +#define JNI_ERR (-1) /* unknown error */ +#define JNI_EDETACHED (-2) /* thread detached from the VM */ +#define JNI_EVERSION (-3) /* JNI version error */ +#define JNI_ENOMEM (-4) /* not enough memory */ +#define JNI_EEXIST (-5) /* VM already created */ +#define JNI_EINVAL (-6) /* invalid arguments */ + +/* + * used in ReleaseScalarArrayElements + */ + +#define JNI_COMMIT 1 +#define JNI_ABORT 2 + +/* + * used in RegisterNatives to describe native method name, signature, + * and function pointer. + */ + +typedef struct { + char *name; + char *signature; + void *fnPtr; +} JNINativeMethod; + +/* + * JNI Native Method Interface. + */ + +struct JNINativeInterface_; + +struct JNIEnv_; + +#ifdef __cplusplus +typedef JNIEnv_ JNIEnv; +#else +typedef const struct JNINativeInterface_ *JNIEnv; +#endif + +/* + * JNI Invocation Interface. + */ + +struct JNIInvokeInterface_; + +struct JavaVM_; + +#ifdef __cplusplus +typedef JavaVM_ JavaVM; +#else +typedef const struct JNIInvokeInterface_ *JavaVM; +#endif + +struct JNINativeInterface_ { + void *reserved0; + void *reserved1; + void *reserved2; + + void *reserved3; + jint (JNICALL *GetVersion)(JNIEnv *env); + + jclass (JNICALL *DefineClass) + (JNIEnv *env, const char *name, jobject loader, const jbyte *buf, + jsize len); + jclass (JNICALL *FindClass) + (JNIEnv *env, const char *name); + + jmethodID (JNICALL *FromReflectedMethod) + (JNIEnv *env, jobject method); + jfieldID (JNICALL *FromReflectedField) + (JNIEnv *env, jobject field); + + jobject (JNICALL *ToReflectedMethod) + (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic); + + jclass (JNICALL *GetSuperclass) + (JNIEnv *env, jclass sub); + jboolean (JNICALL *IsAssignableFrom) + (JNIEnv *env, jclass sub, jclass sup); + + jobject (JNICALL *ToReflectedField) + (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic); + + jint (JNICALL *Throw) + (JNIEnv *env, jthrowable obj); + jint (JNICALL *ThrowNew) + (JNIEnv *env, jclass clazz, const char *msg); + jthrowable (JNICALL *ExceptionOccurred) + (JNIEnv *env); + void (JNICALL *ExceptionDescribe) + (JNIEnv *env); + void (JNICALL *ExceptionClear) + (JNIEnv *env); + void (JNICALL *FatalError) + (JNIEnv *env, const char *msg); + + jint (JNICALL *PushLocalFrame) + (JNIEnv *env, jint capacity); + jobject (JNICALL *PopLocalFrame) + (JNIEnv *env, jobject result); + + jobject (JNICALL *NewGlobalRef) + (JNIEnv *env, jobject lobj); + void (JNICALL *DeleteGlobalRef) + (JNIEnv *env, jobject gref); + void (JNICALL *DeleteLocalRef) + (JNIEnv *env, jobject obj); + jboolean (JNICALL *IsSameObject) + (JNIEnv *env, jobject obj1, jobject obj2); + jobject (JNICALL *NewLocalRef) + (JNIEnv *env, jobject ref); + jint (JNICALL *EnsureLocalCapacity) + (JNIEnv *env, jint capacity); + + jobject (JNICALL *AllocObject) + (JNIEnv *env, jclass clazz); + jobject (JNICALL *NewObject) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jobject (JNICALL *NewObjectV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jobject (JNICALL *NewObjectA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jclass (JNICALL *GetObjectClass) + (JNIEnv *env, jobject obj); + jboolean (JNICALL *IsInstanceOf) + (JNIEnv *env, jobject obj, jclass clazz); + + jmethodID (JNICALL *GetMethodID) + (JNIEnv *env, jclass clazz, const char *name, const char *sig); + + jobject (JNICALL *CallObjectMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jobject (JNICALL *CallObjectMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jobject (JNICALL *CallObjectMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args); + + jboolean (JNICALL *CallBooleanMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jboolean (JNICALL *CallBooleanMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jboolean (JNICALL *CallBooleanMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args); + + jbyte (JNICALL *CallByteMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jbyte (JNICALL *CallByteMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jbyte (JNICALL *CallByteMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jchar (JNICALL *CallCharMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jchar (JNICALL *CallCharMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jchar (JNICALL *CallCharMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jshort (JNICALL *CallShortMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jshort (JNICALL *CallShortMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jshort (JNICALL *CallShortMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jint (JNICALL *CallIntMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jint (JNICALL *CallIntMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jint (JNICALL *CallIntMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jlong (JNICALL *CallLongMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jlong (JNICALL *CallLongMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jlong (JNICALL *CallLongMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jfloat (JNICALL *CallFloatMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jfloat (JNICALL *CallFloatMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jfloat (JNICALL *CallFloatMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jdouble (JNICALL *CallDoubleMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jdouble (JNICALL *CallDoubleMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jdouble (JNICALL *CallDoubleMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + void (JNICALL *CallVoidMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + void (JNICALL *CallVoidMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + void (JNICALL *CallVoidMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args); + + jobject (JNICALL *CallNonvirtualObjectMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jobject (JNICALL *CallNonvirtualObjectMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jobject (JNICALL *CallNonvirtualObjectMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue * args); + + jboolean (JNICALL *CallNonvirtualBooleanMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jboolean (JNICALL *CallNonvirtualBooleanMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jboolean (JNICALL *CallNonvirtualBooleanMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue * args); + + jbyte (JNICALL *CallNonvirtualByteMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jbyte (JNICALL *CallNonvirtualByteMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jbyte (JNICALL *CallNonvirtualByteMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jchar (JNICALL *CallNonvirtualCharMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jchar (JNICALL *CallNonvirtualCharMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jchar (JNICALL *CallNonvirtualCharMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jshort (JNICALL *CallNonvirtualShortMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jshort (JNICALL *CallNonvirtualShortMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jshort (JNICALL *CallNonvirtualShortMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jint (JNICALL *CallNonvirtualIntMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jint (JNICALL *CallNonvirtualIntMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jint (JNICALL *CallNonvirtualIntMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jlong (JNICALL *CallNonvirtualLongMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jlong (JNICALL *CallNonvirtualLongMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jlong (JNICALL *CallNonvirtualLongMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jfloat (JNICALL *CallNonvirtualFloatMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jfloat (JNICALL *CallNonvirtualFloatMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jfloat (JNICALL *CallNonvirtualFloatMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jdouble (JNICALL *CallNonvirtualDoubleMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jdouble (JNICALL *CallNonvirtualDoubleMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jdouble (JNICALL *CallNonvirtualDoubleMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + void (JNICALL *CallNonvirtualVoidMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + void (JNICALL *CallNonvirtualVoidMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + void (JNICALL *CallNonvirtualVoidMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue * args); + + jfieldID (JNICALL *GetFieldID) + (JNIEnv *env, jclass clazz, const char *name, const char *sig); + + jobject (JNICALL *GetObjectField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jboolean (JNICALL *GetBooleanField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jbyte (JNICALL *GetByteField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jchar (JNICALL *GetCharField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jshort (JNICALL *GetShortField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jint (JNICALL *GetIntField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jlong (JNICALL *GetLongField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jfloat (JNICALL *GetFloatField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jdouble (JNICALL *GetDoubleField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + + void (JNICALL *SetObjectField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val); + void (JNICALL *SetBooleanField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val); + void (JNICALL *SetByteField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val); + void (JNICALL *SetCharField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val); + void (JNICALL *SetShortField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val); + void (JNICALL *SetIntField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jint val); + void (JNICALL *SetLongField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val); + void (JNICALL *SetFloatField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val); + void (JNICALL *SetDoubleField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val); + + jmethodID (JNICALL *GetStaticMethodID) + (JNIEnv *env, jclass clazz, const char *name, const char *sig); + + jobject (JNICALL *CallStaticObjectMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jobject (JNICALL *CallStaticObjectMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jobject (JNICALL *CallStaticObjectMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jboolean (JNICALL *CallStaticBooleanMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jboolean (JNICALL *CallStaticBooleanMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jboolean (JNICALL *CallStaticBooleanMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jbyte (JNICALL *CallStaticByteMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jbyte (JNICALL *CallStaticByteMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jbyte (JNICALL *CallStaticByteMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jchar (JNICALL *CallStaticCharMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jchar (JNICALL *CallStaticCharMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jchar (JNICALL *CallStaticCharMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jshort (JNICALL *CallStaticShortMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jshort (JNICALL *CallStaticShortMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jshort (JNICALL *CallStaticShortMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jint (JNICALL *CallStaticIntMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jint (JNICALL *CallStaticIntMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jint (JNICALL *CallStaticIntMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jlong (JNICALL *CallStaticLongMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jlong (JNICALL *CallStaticLongMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jlong (JNICALL *CallStaticLongMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jfloat (JNICALL *CallStaticFloatMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jfloat (JNICALL *CallStaticFloatMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jfloat (JNICALL *CallStaticFloatMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jdouble (JNICALL *CallStaticDoubleMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jdouble (JNICALL *CallStaticDoubleMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jdouble (JNICALL *CallStaticDoubleMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + void (JNICALL *CallStaticVoidMethod) + (JNIEnv *env, jclass cls, jmethodID methodID, ...); + void (JNICALL *CallStaticVoidMethodV) + (JNIEnv *env, jclass cls, jmethodID methodID, va_list args); + void (JNICALL *CallStaticVoidMethodA) + (JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args); + + jfieldID (JNICALL *GetStaticFieldID) + (JNIEnv *env, jclass clazz, const char *name, const char *sig); + jobject (JNICALL *GetStaticObjectField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jboolean (JNICALL *GetStaticBooleanField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jbyte (JNICALL *GetStaticByteField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jchar (JNICALL *GetStaticCharField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jshort (JNICALL *GetStaticShortField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jint (JNICALL *GetStaticIntField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jlong (JNICALL *GetStaticLongField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jfloat (JNICALL *GetStaticFloatField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jdouble (JNICALL *GetStaticDoubleField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + + void (JNICALL *SetStaticObjectField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value); + void (JNICALL *SetStaticBooleanField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value); + void (JNICALL *SetStaticByteField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value); + void (JNICALL *SetStaticCharField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value); + void (JNICALL *SetStaticShortField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value); + void (JNICALL *SetStaticIntField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value); + void (JNICALL *SetStaticLongField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value); + void (JNICALL *SetStaticFloatField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value); + void (JNICALL *SetStaticDoubleField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value); + + jstring (JNICALL *NewString) + (JNIEnv *env, const jchar *unicode, jsize len); + jsize (JNICALL *GetStringLength) + (JNIEnv *env, jstring str); + const jchar *(JNICALL *GetStringChars) + (JNIEnv *env, jstring str, jboolean *isCopy); + void (JNICALL *ReleaseStringChars) + (JNIEnv *env, jstring str, const jchar *chars); + + jstring (JNICALL *NewStringUTF) + (JNIEnv *env, const char *utf); + jsize (JNICALL *GetStringUTFLength) + (JNIEnv *env, jstring str); + const char* (JNICALL *GetStringUTFChars) + (JNIEnv *env, jstring str, jboolean *isCopy); + void (JNICALL *ReleaseStringUTFChars) + (JNIEnv *env, jstring str, const char* chars); + + + jsize (JNICALL *GetArrayLength) + (JNIEnv *env, jarray array); + + jobjectArray (JNICALL *NewObjectArray) + (JNIEnv *env, jsize len, jclass clazz, jobject init); + jobject (JNICALL *GetObjectArrayElement) + (JNIEnv *env, jobjectArray array, jsize index); + void (JNICALL *SetObjectArrayElement) + (JNIEnv *env, jobjectArray array, jsize index, jobject val); + + jbooleanArray (JNICALL *NewBooleanArray) + (JNIEnv *env, jsize len); + jbyteArray (JNICALL *NewByteArray) + (JNIEnv *env, jsize len); + jcharArray (JNICALL *NewCharArray) + (JNIEnv *env, jsize len); + jshortArray (JNICALL *NewShortArray) + (JNIEnv *env, jsize len); + jintArray (JNICALL *NewIntArray) + (JNIEnv *env, jsize len); + jlongArray (JNICALL *NewLongArray) + (JNIEnv *env, jsize len); + jfloatArray (JNICALL *NewFloatArray) + (JNIEnv *env, jsize len); + jdoubleArray (JNICALL *NewDoubleArray) + (JNIEnv *env, jsize len); + + jboolean * (JNICALL *GetBooleanArrayElements) + (JNIEnv *env, jbooleanArray array, jboolean *isCopy); + jbyte * (JNICALL *GetByteArrayElements) + (JNIEnv *env, jbyteArray array, jboolean *isCopy); + jchar * (JNICALL *GetCharArrayElements) + (JNIEnv *env, jcharArray array, jboolean *isCopy); + jshort * (JNICALL *GetShortArrayElements) + (JNIEnv *env, jshortArray array, jboolean *isCopy); + jint * (JNICALL *GetIntArrayElements) + (JNIEnv *env, jintArray array, jboolean *isCopy); + jlong * (JNICALL *GetLongArrayElements) + (JNIEnv *env, jlongArray array, jboolean *isCopy); + jfloat * (JNICALL *GetFloatArrayElements) + (JNIEnv *env, jfloatArray array, jboolean *isCopy); + jdouble * (JNICALL *GetDoubleArrayElements) + (JNIEnv *env, jdoubleArray array, jboolean *isCopy); + + void (JNICALL *ReleaseBooleanArrayElements) + (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode); + void (JNICALL *ReleaseByteArrayElements) + (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode); + void (JNICALL *ReleaseCharArrayElements) + (JNIEnv *env, jcharArray array, jchar *elems, jint mode); + void (JNICALL *ReleaseShortArrayElements) + (JNIEnv *env, jshortArray array, jshort *elems, jint mode); + void (JNICALL *ReleaseIntArrayElements) + (JNIEnv *env, jintArray array, jint *elems, jint mode); + void (JNICALL *ReleaseLongArrayElements) + (JNIEnv *env, jlongArray array, jlong *elems, jint mode); + void (JNICALL *ReleaseFloatArrayElements) + (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode); + void (JNICALL *ReleaseDoubleArrayElements) + (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode); + + void (JNICALL *GetBooleanArrayRegion) + (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf); + void (JNICALL *GetByteArrayRegion) + (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf); + void (JNICALL *GetCharArrayRegion) + (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf); + void (JNICALL *GetShortArrayRegion) + (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf); + void (JNICALL *GetIntArrayRegion) + (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf); + void (JNICALL *GetLongArrayRegion) + (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf); + void (JNICALL *GetFloatArrayRegion) + (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf); + void (JNICALL *GetDoubleArrayRegion) + (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf); + + void (JNICALL *SetBooleanArrayRegion) + (JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf); + void (JNICALL *SetByteArrayRegion) + (JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf); + void (JNICALL *SetCharArrayRegion) + (JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf); + void (JNICALL *SetShortArrayRegion) + (JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf); + void (JNICALL *SetIntArrayRegion) + (JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf); + void (JNICALL *SetLongArrayRegion) + (JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf); + void (JNICALL *SetFloatArrayRegion) + (JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf); + void (JNICALL *SetDoubleArrayRegion) + (JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf); + + jint (JNICALL *RegisterNatives) + (JNIEnv *env, jclass clazz, const JNINativeMethod *methods, + jint nMethods); + jint (JNICALL *UnregisterNatives) + (JNIEnv *env, jclass clazz); + + jint (JNICALL *MonitorEnter) + (JNIEnv *env, jobject obj); + jint (JNICALL *MonitorExit) + (JNIEnv *env, jobject obj); + + jint (JNICALL *GetJavaVM) + (JNIEnv *env, JavaVM **vm); + + void (JNICALL *GetStringRegion) + (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf); + void (JNICALL *GetStringUTFRegion) + (JNIEnv *env, jstring str, jsize start, jsize len, char *buf); + + void * (JNICALL *GetPrimitiveArrayCritical) + (JNIEnv *env, jarray array, jboolean *isCopy); + void (JNICALL *ReleasePrimitiveArrayCritical) + (JNIEnv *env, jarray array, void *carray, jint mode); + + const jchar * (JNICALL *GetStringCritical) + (JNIEnv *env, jstring string, jboolean *isCopy); + void (JNICALL *ReleaseStringCritical) + (JNIEnv *env, jstring string, const jchar *cstring); + + jweak (JNICALL *NewWeakGlobalRef) + (JNIEnv *env, jobject obj); + void (JNICALL *DeleteWeakGlobalRef) + (JNIEnv *env, jweak ref); + + jboolean (JNICALL *ExceptionCheck) + (JNIEnv *env); + + jobject (JNICALL *NewDirectByteBuffer) + (JNIEnv* env, void* address, jlong capacity); + void* (JNICALL *GetDirectBufferAddress) + (JNIEnv* env, jobject buf); + jlong (JNICALL *GetDirectBufferCapacity) + (JNIEnv* env, jobject buf); +}; + +/* + * We use inlined functions for C++ so that programmers can write: + * + * env->FindClass("java/lang/String") + * + * in C++ rather than: + * + * (*env)->FindClass(env, "java/lang/String") + * + * in C. + */ + +struct JNIEnv_ { + const struct JNINativeInterface_ *functions; +#ifdef __cplusplus + + jint GetVersion() { + return functions->GetVersion(this); + } + jclass DefineClass(const char *name, jobject loader, const jbyte *buf, + jsize len) { + return functions->DefineClass(this, name, loader, buf, len); + } + jclass FindClass(const char *name) { + return functions->FindClass(this, name); + } + jmethodID FromReflectedMethod(jobject method) { + return functions->FromReflectedMethod(this,method); + } + jfieldID FromReflectedField(jobject field) { + return functions->FromReflectedField(this,field); + } + + jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) { + return functions->ToReflectedMethod(this, cls, methodID, isStatic); + } + + jclass GetSuperclass(jclass sub) { + return functions->GetSuperclass(this, sub); + } + jboolean IsAssignableFrom(jclass sub, jclass sup) { + return functions->IsAssignableFrom(this, sub, sup); + } + + jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) { + return functions->ToReflectedField(this,cls,fieldID,isStatic); + } + + jint Throw(jthrowable obj) { + return functions->Throw(this, obj); + } + jint ThrowNew(jclass clazz, const char *msg) { + return functions->ThrowNew(this, clazz, msg); + } + jthrowable ExceptionOccurred() { + return functions->ExceptionOccurred(this); + } + void ExceptionDescribe() { + functions->ExceptionDescribe(this); + } + void ExceptionClear() { + functions->ExceptionClear(this); + } + void FatalError(const char *msg) { + functions->FatalError(this, msg); + } + + jint PushLocalFrame(jint capacity) { + return functions->PushLocalFrame(this,capacity); + } + jobject PopLocalFrame(jobject result) { + return functions->PopLocalFrame(this,result); + } + + jobject NewGlobalRef(jobject lobj) { + return functions->NewGlobalRef(this,lobj); + } + void DeleteGlobalRef(jobject gref) { + functions->DeleteGlobalRef(this,gref); + } + void DeleteLocalRef(jobject obj) { + functions->DeleteLocalRef(this, obj); + } + + jboolean IsSameObject(jobject obj1, jobject obj2) { + return functions->IsSameObject(this,obj1,obj2); + } + + jobject NewLocalRef(jobject ref) { + return functions->NewLocalRef(this,ref); + } + jint EnsureLocalCapacity(jint capacity) { + return functions->EnsureLocalCapacity(this,capacity); + } + + jobject AllocObject(jclass clazz) { + return functions->AllocObject(this,clazz); + } + jobject NewObject(jclass clazz, jmethodID methodID, ...) { + va_list args; + jobject result; + va_start(args, methodID); + result = functions->NewObjectV(this,clazz,methodID,args); + va_end(args); + return result; + } + jobject NewObjectV(jclass clazz, jmethodID methodID, + va_list args) { + return functions->NewObjectV(this,clazz,methodID,args); + } + jobject NewObjectA(jclass clazz, jmethodID methodID, + const jvalue *args) { + return functions->NewObjectA(this,clazz,methodID,args); + } + + jclass GetObjectClass(jobject obj) { + return functions->GetObjectClass(this,obj); + } + jboolean IsInstanceOf(jobject obj, jclass clazz) { + return functions->IsInstanceOf(this,obj,clazz); + } + + jmethodID GetMethodID(jclass clazz, const char *name, + const char *sig) { + return functions->GetMethodID(this,clazz,name,sig); + } + + jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jobject result; + va_start(args,methodID); + result = functions->CallObjectMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jobject CallObjectMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallObjectMethodV(this,obj,methodID,args); + } + jobject CallObjectMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallObjectMethodA(this,obj,methodID,args); + } + + jboolean CallBooleanMethod(jobject obj, + jmethodID methodID, ...) { + va_list args; + jboolean result; + va_start(args,methodID); + result = functions->CallBooleanMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jboolean CallBooleanMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallBooleanMethodV(this,obj,methodID,args); + } + jboolean CallBooleanMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallBooleanMethodA(this,obj,methodID, args); + } + + jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jbyte result; + va_start(args,methodID); + result = functions->CallByteMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jbyte CallByteMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallByteMethodV(this,obj,methodID,args); + } + jbyte CallByteMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallByteMethodA(this,obj,methodID,args); + } + + jchar CallCharMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jchar result; + va_start(args,methodID); + result = functions->CallCharMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jchar CallCharMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallCharMethodV(this,obj,methodID,args); + } + jchar CallCharMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallCharMethodA(this,obj,methodID,args); + } + + jshort CallShortMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jshort result; + va_start(args,methodID); + result = functions->CallShortMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jshort CallShortMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallShortMethodV(this,obj,methodID,args); + } + jshort CallShortMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallShortMethodA(this,obj,methodID,args); + } + + jint CallIntMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jint result; + va_start(args,methodID); + result = functions->CallIntMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jint CallIntMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallIntMethodV(this,obj,methodID,args); + } + jint CallIntMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallIntMethodA(this,obj,methodID,args); + } + + jlong CallLongMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jlong result; + va_start(args,methodID); + result = functions->CallLongMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jlong CallLongMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallLongMethodV(this,obj,methodID,args); + } + jlong CallLongMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallLongMethodA(this,obj,methodID,args); + } + + jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jfloat result; + va_start(args,methodID); + result = functions->CallFloatMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jfloat CallFloatMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallFloatMethodV(this,obj,methodID,args); + } + jfloat CallFloatMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallFloatMethodA(this,obj,methodID,args); + } + + jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jdouble result; + va_start(args,methodID); + result = functions->CallDoubleMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jdouble CallDoubleMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallDoubleMethodV(this,obj,methodID,args); + } + jdouble CallDoubleMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallDoubleMethodA(this,obj,methodID,args); + } + + void CallVoidMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + va_start(args,methodID); + functions->CallVoidMethodV(this,obj,methodID,args); + va_end(args); + } + void CallVoidMethodV(jobject obj, jmethodID methodID, + va_list args) { + functions->CallVoidMethodV(this,obj,methodID,args); + } + void CallVoidMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + functions->CallVoidMethodA(this,obj,methodID,args); + } + + jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jobject result; + va_start(args,methodID); + result = functions->CallNonvirtualObjectMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualObjectMethodV(this,obj,clazz, + methodID,args); + } + jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualObjectMethodA(this,obj,clazz, + methodID,args); + } + + jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jboolean result; + va_start(args,methodID); + result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualBooleanMethodV(this,obj,clazz, + methodID,args); + } + jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualBooleanMethodA(this,obj,clazz, + methodID, args); + } + + jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jbyte result; + va_start(args,methodID); + result = functions->CallNonvirtualByteMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualByteMethodV(this,obj,clazz, + methodID,args); + } + jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualByteMethodA(this,obj,clazz, + methodID,args); + } + + jchar CallNonvirtualCharMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jchar result; + va_start(args,methodID); + result = functions->CallNonvirtualCharMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualCharMethodV(this,obj,clazz, + methodID,args); + } + jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualCharMethodA(this,obj,clazz, + methodID,args); + } + + jshort CallNonvirtualShortMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jshort result; + va_start(args,methodID); + result = functions->CallNonvirtualShortMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualShortMethodV(this,obj,clazz, + methodID,args); + } + jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualShortMethodA(this,obj,clazz, + methodID,args); + } + + jint CallNonvirtualIntMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jint result; + va_start(args,methodID); + result = functions->CallNonvirtualIntMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jint CallNonvirtualIntMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualIntMethodV(this,obj,clazz, + methodID,args); + } + jint CallNonvirtualIntMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualIntMethodA(this,obj,clazz, + methodID,args); + } + + jlong CallNonvirtualLongMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jlong result; + va_start(args,methodID); + result = functions->CallNonvirtualLongMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualLongMethodV(this,obj,clazz, + methodID,args); + } + jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualLongMethodA(this,obj,clazz, + methodID,args); + } + + jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jfloat result; + va_start(args,methodID); + result = functions->CallNonvirtualFloatMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz, + jmethodID methodID, + va_list args) { + return functions->CallNonvirtualFloatMethodV(this,obj,clazz, + methodID,args); + } + jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz, + jmethodID methodID, + const jvalue * args) { + return functions->CallNonvirtualFloatMethodA(this,obj,clazz, + methodID,args); + } + + jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jdouble result; + va_start(args,methodID); + result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz, + jmethodID methodID, + va_list args) { + return functions->CallNonvirtualDoubleMethodV(this,obj,clazz, + methodID,args); + } + jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz, + jmethodID methodID, + const jvalue * args) { + return functions->CallNonvirtualDoubleMethodA(this,obj,clazz, + methodID,args); + } + + void CallNonvirtualVoidMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + va_start(args,methodID); + functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args); + va_end(args); + } + void CallNonvirtualVoidMethodV(jobject obj, jclass clazz, + jmethodID methodID, + va_list args) { + functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args); + } + void CallNonvirtualVoidMethodA(jobject obj, jclass clazz, + jmethodID methodID, + const jvalue * args) { + functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args); + } + + jfieldID GetFieldID(jclass clazz, const char *name, + const char *sig) { + return functions->GetFieldID(this,clazz,name,sig); + } + + jobject GetObjectField(jobject obj, jfieldID fieldID) { + return functions->GetObjectField(this,obj,fieldID); + } + jboolean GetBooleanField(jobject obj, jfieldID fieldID) { + return functions->GetBooleanField(this,obj,fieldID); + } + jbyte GetByteField(jobject obj, jfieldID fieldID) { + return functions->GetByteField(this,obj,fieldID); + } + jchar GetCharField(jobject obj, jfieldID fieldID) { + return functions->GetCharField(this,obj,fieldID); + } + jshort GetShortField(jobject obj, jfieldID fieldID) { + return functions->GetShortField(this,obj,fieldID); + } + jint GetIntField(jobject obj, jfieldID fieldID) { + return functions->GetIntField(this,obj,fieldID); + } + jlong GetLongField(jobject obj, jfieldID fieldID) { + return functions->GetLongField(this,obj,fieldID); + } + jfloat GetFloatField(jobject obj, jfieldID fieldID) { + return functions->GetFloatField(this,obj,fieldID); + } + jdouble GetDoubleField(jobject obj, jfieldID fieldID) { + return functions->GetDoubleField(this,obj,fieldID); + } + + void SetObjectField(jobject obj, jfieldID fieldID, jobject val) { + functions->SetObjectField(this,obj,fieldID,val); + } + void SetBooleanField(jobject obj, jfieldID fieldID, + jboolean val) { + functions->SetBooleanField(this,obj,fieldID,val); + } + void SetByteField(jobject obj, jfieldID fieldID, + jbyte val) { + functions->SetByteField(this,obj,fieldID,val); + } + void SetCharField(jobject obj, jfieldID fieldID, + jchar val) { + functions->SetCharField(this,obj,fieldID,val); + } + void SetShortField(jobject obj, jfieldID fieldID, + jshort val) { + functions->SetShortField(this,obj,fieldID,val); + } + void SetIntField(jobject obj, jfieldID fieldID, + jint val) { + functions->SetIntField(this,obj,fieldID,val); + } + void SetLongField(jobject obj, jfieldID fieldID, + jlong val) { + functions->SetLongField(this,obj,fieldID,val); + } + void SetFloatField(jobject obj, jfieldID fieldID, + jfloat val) { + functions->SetFloatField(this,obj,fieldID,val); + } + void SetDoubleField(jobject obj, jfieldID fieldID, + jdouble val) { + functions->SetDoubleField(this,obj,fieldID,val); + } + + jmethodID GetStaticMethodID(jclass clazz, const char *name, + const char *sig) { + return functions->GetStaticMethodID(this,clazz,name,sig); + } + + jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID, + ...) { + va_list args; + jobject result; + va_start(args,methodID); + result = functions->CallStaticObjectMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID, + va_list args) { + return functions->CallStaticObjectMethodV(this,clazz,methodID,args); + } + jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID, + const jvalue *args) { + return functions->CallStaticObjectMethodA(this,clazz,methodID,args); + } + + jboolean CallStaticBooleanMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jboolean result; + va_start(args,methodID); + result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jboolean CallStaticBooleanMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticBooleanMethodV(this,clazz,methodID,args); + } + jboolean CallStaticBooleanMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticBooleanMethodA(this,clazz,methodID,args); + } + + jbyte CallStaticByteMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jbyte result; + va_start(args,methodID); + result = functions->CallStaticByteMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jbyte CallStaticByteMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticByteMethodV(this,clazz,methodID,args); + } + jbyte CallStaticByteMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticByteMethodA(this,clazz,methodID,args); + } + + jchar CallStaticCharMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jchar result; + va_start(args,methodID); + result = functions->CallStaticCharMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jchar CallStaticCharMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticCharMethodV(this,clazz,methodID,args); + } + jchar CallStaticCharMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticCharMethodA(this,clazz,methodID,args); + } + + jshort CallStaticShortMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jshort result; + va_start(args,methodID); + result = functions->CallStaticShortMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jshort CallStaticShortMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticShortMethodV(this,clazz,methodID,args); + } + jshort CallStaticShortMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticShortMethodA(this,clazz,methodID,args); + } + + jint CallStaticIntMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jint result; + va_start(args,methodID); + result = functions->CallStaticIntMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jint CallStaticIntMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticIntMethodV(this,clazz,methodID,args); + } + jint CallStaticIntMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticIntMethodA(this,clazz,methodID,args); + } + + jlong CallStaticLongMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jlong result; + va_start(args,methodID); + result = functions->CallStaticLongMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jlong CallStaticLongMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticLongMethodV(this,clazz,methodID,args); + } + jlong CallStaticLongMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticLongMethodA(this,clazz,methodID,args); + } + + jfloat CallStaticFloatMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jfloat result; + va_start(args,methodID); + result = functions->CallStaticFloatMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jfloat CallStaticFloatMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticFloatMethodV(this,clazz,methodID,args); + } + jfloat CallStaticFloatMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticFloatMethodA(this,clazz,methodID,args); + } + + jdouble CallStaticDoubleMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jdouble result; + va_start(args,methodID); + result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jdouble CallStaticDoubleMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticDoubleMethodV(this,clazz,methodID,args); + } + jdouble CallStaticDoubleMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticDoubleMethodA(this,clazz,methodID,args); + } + + void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) { + va_list args; + va_start(args,methodID); + functions->CallStaticVoidMethodV(this,cls,methodID,args); + va_end(args); + } + void CallStaticVoidMethodV(jclass cls, jmethodID methodID, + va_list args) { + functions->CallStaticVoidMethodV(this,cls,methodID,args); + } + void CallStaticVoidMethodA(jclass cls, jmethodID methodID, + const jvalue * args) { + functions->CallStaticVoidMethodA(this,cls,methodID,args); + } + + jfieldID GetStaticFieldID(jclass clazz, const char *name, + const char *sig) { + return functions->GetStaticFieldID(this,clazz,name,sig); + } + jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticObjectField(this,clazz,fieldID); + } + jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticBooleanField(this,clazz,fieldID); + } + jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticByteField(this,clazz,fieldID); + } + jchar GetStaticCharField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticCharField(this,clazz,fieldID); + } + jshort GetStaticShortField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticShortField(this,clazz,fieldID); + } + jint GetStaticIntField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticIntField(this,clazz,fieldID); + } + jlong GetStaticLongField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticLongField(this,clazz,fieldID); + } + jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticFloatField(this,clazz,fieldID); + } + jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticDoubleField(this,clazz,fieldID); + } + + void SetStaticObjectField(jclass clazz, jfieldID fieldID, + jobject value) { + functions->SetStaticObjectField(this,clazz,fieldID,value); + } + void SetStaticBooleanField(jclass clazz, jfieldID fieldID, + jboolean value) { + functions->SetStaticBooleanField(this,clazz,fieldID,value); + } + void SetStaticByteField(jclass clazz, jfieldID fieldID, + jbyte value) { + functions->SetStaticByteField(this,clazz,fieldID,value); + } + void SetStaticCharField(jclass clazz, jfieldID fieldID, + jchar value) { + functions->SetStaticCharField(this,clazz,fieldID,value); + } + void SetStaticShortField(jclass clazz, jfieldID fieldID, + jshort value) { + functions->SetStaticShortField(this,clazz,fieldID,value); + } + void SetStaticIntField(jclass clazz, jfieldID fieldID, + jint value) { + functions->SetStaticIntField(this,clazz,fieldID,value); + } + void SetStaticLongField(jclass clazz, jfieldID fieldID, + jlong value) { + functions->SetStaticLongField(this,clazz,fieldID,value); + } + void SetStaticFloatField(jclass clazz, jfieldID fieldID, + jfloat value) { + functions->SetStaticFloatField(this,clazz,fieldID,value); + } + void SetStaticDoubleField(jclass clazz, jfieldID fieldID, + jdouble value) { + functions->SetStaticDoubleField(this,clazz,fieldID,value); + } + + jstring NewString(const jchar *unicode, jsize len) { + return functions->NewString(this,unicode,len); + } + jsize GetStringLength(jstring str) { + return functions->GetStringLength(this,str); + } + const jchar *GetStringChars(jstring str, jboolean *isCopy) { + return functions->GetStringChars(this,str,isCopy); + } + void ReleaseStringChars(jstring str, const jchar *chars) { + functions->ReleaseStringChars(this,str,chars); + } + + jstring NewStringUTF(const char *utf) { + return functions->NewStringUTF(this,utf); + } + jsize GetStringUTFLength(jstring str) { + return functions->GetStringUTFLength(this,str); + } + const char* GetStringUTFChars(jstring str, jboolean *isCopy) { + return functions->GetStringUTFChars(this,str,isCopy); + } + void ReleaseStringUTFChars(jstring str, const char* chars) { + functions->ReleaseStringUTFChars(this,str,chars); + } + + jsize GetArrayLength(jarray array) { + return functions->GetArrayLength(this,array); + } + + jobjectArray NewObjectArray(jsize len, jclass clazz, + jobject init) { + return functions->NewObjectArray(this,len,clazz,init); + } + jobject GetObjectArrayElement(jobjectArray array, jsize index) { + return functions->GetObjectArrayElement(this,array,index); + } + void SetObjectArrayElement(jobjectArray array, jsize index, + jobject val) { + functions->SetObjectArrayElement(this,array,index,val); + } + + jbooleanArray NewBooleanArray(jsize len) { + return functions->NewBooleanArray(this,len); + } + jbyteArray NewByteArray(jsize len) { + return functions->NewByteArray(this,len); + } + jcharArray NewCharArray(jsize len) { + return functions->NewCharArray(this,len); + } + jshortArray NewShortArray(jsize len) { + return functions->NewShortArray(this,len); + } + jintArray NewIntArray(jsize len) { + return functions->NewIntArray(this,len); + } + jlongArray NewLongArray(jsize len) { + return functions->NewLongArray(this,len); + } + jfloatArray NewFloatArray(jsize len) { + return functions->NewFloatArray(this,len); + } + jdoubleArray NewDoubleArray(jsize len) { + return functions->NewDoubleArray(this,len); + } + + jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) { + return functions->GetBooleanArrayElements(this,array,isCopy); + } + jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) { + return functions->GetByteArrayElements(this,array,isCopy); + } + jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) { + return functions->GetCharArrayElements(this,array,isCopy); + } + jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) { + return functions->GetShortArrayElements(this,array,isCopy); + } + jint * GetIntArrayElements(jintArray array, jboolean *isCopy) { + return functions->GetIntArrayElements(this,array,isCopy); + } + jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) { + return functions->GetLongArrayElements(this,array,isCopy); + } + jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) { + return functions->GetFloatArrayElements(this,array,isCopy); + } + jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) { + return functions->GetDoubleArrayElements(this,array,isCopy); + } + + void ReleaseBooleanArrayElements(jbooleanArray array, + jboolean *elems, + jint mode) { + functions->ReleaseBooleanArrayElements(this,array,elems,mode); + } + void ReleaseByteArrayElements(jbyteArray array, + jbyte *elems, + jint mode) { + functions->ReleaseByteArrayElements(this,array,elems,mode); + } + void ReleaseCharArrayElements(jcharArray array, + jchar *elems, + jint mode) { + functions->ReleaseCharArrayElements(this,array,elems,mode); + } + void ReleaseShortArrayElements(jshortArray array, + jshort *elems, + jint mode) { + functions->ReleaseShortArrayElements(this,array,elems,mode); + } + void ReleaseIntArrayElements(jintArray array, + jint *elems, + jint mode) { + functions->ReleaseIntArrayElements(this,array,elems,mode); + } + void ReleaseLongArrayElements(jlongArray array, + jlong *elems, + jint mode) { + functions->ReleaseLongArrayElements(this,array,elems,mode); + } + void ReleaseFloatArrayElements(jfloatArray array, + jfloat *elems, + jint mode) { + functions->ReleaseFloatArrayElements(this,array,elems,mode); + } + void ReleaseDoubleArrayElements(jdoubleArray array, + jdouble *elems, + jint mode) { + functions->ReleaseDoubleArrayElements(this,array,elems,mode); + } + + void GetBooleanArrayRegion(jbooleanArray array, + jsize start, jsize len, jboolean *buf) { + functions->GetBooleanArrayRegion(this,array,start,len,buf); + } + void GetByteArrayRegion(jbyteArray array, + jsize start, jsize len, jbyte *buf) { + functions->GetByteArrayRegion(this,array,start,len,buf); + } + void GetCharArrayRegion(jcharArray array, + jsize start, jsize len, jchar *buf) { + functions->GetCharArrayRegion(this,array,start,len,buf); + } + void GetShortArrayRegion(jshortArray array, + jsize start, jsize len, jshort *buf) { + functions->GetShortArrayRegion(this,array,start,len,buf); + } + void GetIntArrayRegion(jintArray array, + jsize start, jsize len, jint *buf) { + functions->GetIntArrayRegion(this,array,start,len,buf); + } + void GetLongArrayRegion(jlongArray array, + jsize start, jsize len, jlong *buf) { + functions->GetLongArrayRegion(this,array,start,len,buf); + } + void GetFloatArrayRegion(jfloatArray array, + jsize start, jsize len, jfloat *buf) { + functions->GetFloatArrayRegion(this,array,start,len,buf); + } + void GetDoubleArrayRegion(jdoubleArray array, + jsize start, jsize len, jdouble *buf) { + functions->GetDoubleArrayRegion(this,array,start,len,buf); + } + + void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len, + const jboolean *buf) { + functions->SetBooleanArrayRegion(this,array,start,len,buf); + } + void SetByteArrayRegion(jbyteArray array, jsize start, jsize len, + const jbyte *buf) { + functions->SetByteArrayRegion(this,array,start,len,buf); + } + void SetCharArrayRegion(jcharArray array, jsize start, jsize len, + const jchar *buf) { + functions->SetCharArrayRegion(this,array,start,len,buf); + } + void SetShortArrayRegion(jshortArray array, jsize start, jsize len, + const jshort *buf) { + functions->SetShortArrayRegion(this,array,start,len,buf); + } + void SetIntArrayRegion(jintArray array, jsize start, jsize len, + const jint *buf) { + functions->SetIntArrayRegion(this,array,start,len,buf); + } + void SetLongArrayRegion(jlongArray array, jsize start, jsize len, + const jlong *buf) { + functions->SetLongArrayRegion(this,array,start,len,buf); + } + void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len, + const jfloat *buf) { + functions->SetFloatArrayRegion(this,array,start,len,buf); + } + void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len, + const jdouble *buf) { + functions->SetDoubleArrayRegion(this,array,start,len,buf); + } + + jint RegisterNatives(jclass clazz, const JNINativeMethod *methods, + jint nMethods) { + return functions->RegisterNatives(this,clazz,methods,nMethods); + } + jint UnregisterNatives(jclass clazz) { + return functions->UnregisterNatives(this,clazz); + } + + jint MonitorEnter(jobject obj) { + return functions->MonitorEnter(this,obj); + } + jint MonitorExit(jobject obj) { + return functions->MonitorExit(this,obj); + } + + jint GetJavaVM(JavaVM **vm) { + return functions->GetJavaVM(this,vm); + } + + void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) { + functions->GetStringRegion(this,str,start,len,buf); + } + void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) { + functions->GetStringUTFRegion(this,str,start,len,buf); + } + + void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) { + return functions->GetPrimitiveArrayCritical(this,array,isCopy); + } + void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) { + functions->ReleasePrimitiveArrayCritical(this,array,carray,mode); + } + + const jchar * GetStringCritical(jstring string, jboolean *isCopy) { + return functions->GetStringCritical(this,string,isCopy); + } + void ReleaseStringCritical(jstring string, const jchar *cstring) { + functions->ReleaseStringCritical(this,string,cstring); + } + + jweak NewWeakGlobalRef(jobject obj) { + return functions->NewWeakGlobalRef(this,obj); + } + void DeleteWeakGlobalRef(jweak ref) { + functions->DeleteWeakGlobalRef(this,ref); + } + + jboolean ExceptionCheck() { + return functions->ExceptionCheck(this); + } + + jobject NewDirectByteBuffer(void* address, jlong capacity) { + return functions->NewDirectByteBuffer(this, address, capacity); + } + void* GetDirectBufferAddress(jobject buf) { + return functions->GetDirectBufferAddress(this, buf); + } + jlong GetDirectBufferCapacity(jobject buf) { + return functions->GetDirectBufferCapacity(this, buf); + } + +#endif /* __cplusplus */ +}; + +typedef struct JavaVMOption { + char *optionString; + void *extraInfo; +} JavaVMOption; + +typedef struct JavaVMInitArgs { + jint version; + + jint nOptions; + JavaVMOption *options; + jboolean ignoreUnrecognized; +} JavaVMInitArgs; + +typedef struct JavaVMAttachArgs { + jint version; + + char *name; + jobject group; +} JavaVMAttachArgs; + +/* These structures will be VM-specific. */ + +typedef struct JDK1_1InitArgs { + jint version; + + char **properties; + jint checkSource; + jint nativeStackSize; + jint javaStackSize; + jint minHeapSize; + jint maxHeapSize; + jint verifyMode; + char *classpath; + + jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args); + void (JNICALL *exit)(jint code); + void (JNICALL *abort)(void); + + jint enableClassGC; + jint enableVerboseGC; + jint disableAsyncGC; + jint verbose; + jboolean debugging; + jint debugPort; +} JDK1_1InitArgs; + +typedef struct JDK1_1AttachArgs { + void * __padding; /* C compilers don't allow empty structures. */ +} JDK1_1AttachArgs; + +#define JDK1_2 +#define JDK1_4 + +/* End VM-specific. */ + +struct JNIInvokeInterface_ { + void *reserved0; + void *reserved1; + void *reserved2; + + jint (JNICALL *DestroyJavaVM)(JavaVM *vm); + + jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args); + + jint (JNICALL *DetachCurrentThread)(JavaVM *vm); + + jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version); + + jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args); +}; + +struct JavaVM_ { + const struct JNIInvokeInterface_ *functions; +#ifdef __cplusplus + + jint DestroyJavaVM() { + return functions->DestroyJavaVM(this); + } + jint AttachCurrentThread(void **penv, void *args) { + return functions->AttachCurrentThread(this, penv, args); + } + jint DetachCurrentThread() { + return functions->DetachCurrentThread(this); + } + + jint GetEnv(void **penv, jint version) { + return functions->GetEnv(this, penv, version); + } + jint AttachCurrentThreadAsDaemon(void **penv, void *args) { + return functions->AttachCurrentThreadAsDaemon(this, penv, args); + } +#endif +}; + +#ifdef _JNI_IMPLEMENTATION_ +#define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT +#else +#define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT +#endif +_JNI_IMPORT_OR_EXPORT_ jint JNICALL +JNI_GetDefaultJavaVMInitArgs(void *args); + +_JNI_IMPORT_OR_EXPORT_ jint JNICALL +JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args); + +_JNI_IMPORT_OR_EXPORT_ jint JNICALL +JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *); + +/* Defined by native libraries. */ +JNIEXPORT jint JNICALL +JNI_OnLoad(JavaVM *vm, void *reserved); + +JNIEXPORT void JNICALL +JNI_OnUnload(JavaVM *vm, void *reserved); + +#define JNI_VERSION_1_1 0x00010001 +#define JNI_VERSION_1_2 0x00010002 +#define JNI_VERSION_1_4 0x00010004 + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* !_JAVASOFT_JNI_H_ */ diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmdi.h b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmdi.h new file mode 100644 index 0000000000..d39c4a95cc --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmdi.h @@ -0,0 +1,1012 @@ +/* + * @(#)jvmdi.h 1.48 03/12/19 + * + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +/* + * Java Virtual Machine Debug Interface + * + * Defines debugging functionality that a VM should provide. + * + * Should not overlap functionality in jni.h + */ + +#ifndef _JAVASOFT_JVMDI_H_ +#define _JAVASOFT_JVMDI_H_ + +#include "jni.h" + +#define JVMDI_VERSION_1 0x20010000 +#define JVMDI_VERSION_1_1 0x20010001 +#define JVMDI_VERSION_1_2 0x20010002 +#define JVMDI_VERSION_1_3 0x20010003 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef jobject jthread; + +typedef jobject jthreadGroup; + +struct _jframeID; +typedef struct _jframeID *jframeID; + + /* specifies program location "pc" - often byte code index */ +typedef jlong jlocation; + + /* The jmethodID for methods that have been replaced */ + /* via RedefineClasses - used when the implementation */ + /* does not wish to retain replaced jmethodIDs */ +#define OBSOLETE_METHOD_ID ((jmethodID)(NULL)) + + /* + * Errors + */ + +typedef jint jvmdiError; + + /* no error */ +#define JVMDI_ERROR_NONE ((jvmdiError)0) + + /* + * Errors on thread operations + */ + + /* invalid thread */ +#define JVMDI_ERROR_INVALID_THREAD ((jvmdiError)10) + /* invalid thread group */ +#define JVMDI_ERROR_INVALID_THREAD_GROUP ((jvmdiError)11) + /* invalid thread priority */ +#define JVMDI_ERROR_INVALID_PRIORITY ((jvmdiError)12) + /* thread not suspended */ +#define JVMDI_ERROR_THREAD_NOT_SUSPENDED ((jvmdiError)13) + /* thread already suspended */ +#define JVMDI_ERROR_THREAD_SUSPENDED ((jvmdiError)14) + + /* + * Errors on object and class operations + */ + + /* invalid object (implementation not required to gracefully catch) */ +#define JVMDI_ERROR_INVALID_OBJECT ((jvmdiError)20) + /* invalid class (implementation not required to gracefully catch) */ +#define JVMDI_ERROR_INVALID_CLASS ((jvmdiError)21) + /* class not prepared */ +#define JVMDI_ERROR_CLASS_NOT_PREPARED ((jvmdiError)22) + /* invalid methodID (implementation not required to gracefully catch) */ +#define JVMDI_ERROR_INVALID_METHODID ((jvmdiError)23) + /* invalid location */ +#define JVMDI_ERROR_INVALID_LOCATION ((jvmdiError)24) + /* invalid fieldID (implementation not required to gracefully catch) */ +#define JVMDI_ERROR_INVALID_FIELDID ((jvmdiError)25) + + /* + * Errors on frame operations + */ + + /* invalid frameID (implementation not required to gracefully catch) */ +#define JVMDI_ERROR_INVALID_FRAMEID ((jvmdiError)30) + /* there are no more frames on the stack */ +#define JVMDI_ERROR_NO_MORE_FRAMES ((jvmdiError)31) + /* operation cannot be performed on this frame */ +#define JVMDI_ERROR_OPAQUE_FRAME ((jvmdiError)32) + /* operation can only be performed on current frame */ +#define JVMDI_ERROR_NOT_CURRENT_FRAME ((jvmdiError)33) + /* type mismatch (implementation not required to gracefully catch) */ +#define JVMDI_ERROR_TYPE_MISMATCH ((jvmdiError)34) + /* invalid slot */ +#define JVMDI_ERROR_INVALID_SLOT ((jvmdiError)35) + + /* + * Errors on set/clear/find operations + */ + + /* item already present */ +#define JVMDI_ERROR_DUPLICATE ((jvmdiError)40) + /* item not found */ +#define JVMDI_ERROR_NOT_FOUND ((jvmdiError)41) + + /* + * Errors on monitor operations + */ + + /* invalid monitor */ +#define JVMDI_ERROR_INVALID_MONITOR ((jvmdiError)50) + /* wait, notify, notify all tried without entering monitor */ +#define JVMDI_ERROR_NOT_MONITOR_OWNER ((jvmdiError)51) + /* waiting thread interrupted */ +#define JVMDI_ERROR_INTERRUPT ((jvmdiError)52) + + /* + * Class redefinition / operand stack errors + */ + + /* The equivalent of ClassFormatError */ +#define JVMDI_ERROR_INVALID_CLASS_FORMAT ((jvmdiError)60) + /* The equivalent of ClassCircularityError */ +#define JVMDI_ERROR_CIRCULAR_CLASS_DEFINITION ((jvmdiError)61) + /* The class bytes fail verification */ +#define JVMDI_ERROR_FAILS_VERIFICATION ((jvmdiError)62) + /* The new class version adds new methods */ + /* and can_add_method is false */ +#define JVMDI_ERROR_ADD_METHOD_NOT_IMPLEMENTED ((jvmdiError)63) + /* The new class version changes fields */ + /* and can_unrestrictedly_redefine_classes is false */ +#define JVMDI_ERROR_SCHEMA_CHANGE_NOT_IMPLEMENTED ((jvmdiError)64) + /* bci/operand stack/local var combination is not verifiably */ + /* type safe */ +#define JVMDI_ERROR_INVALID_TYPESTATE ((jvmdiError)65) + /* A direct superclass is different for the new class */ + /* version, or the set of directly implemented */ + /* interfaces is different */ + /* and can_unrestrictedly_redefine_classes is false */ +#define JVMDI_ERROR_HIERARCHY_CHANGE_NOT_IMPLEMENTED ((jvmdiError)66) + /* The new class version does not declare a method */ + /* declared in the old class version */ + /* and can_unrestrictedly_redefine_classes is false */ +#define JVMDI_ERROR_DELETE_METHOD_NOT_IMPLEMENTED ((jvmdiError)67) + /* A class file has a version number not supported */ + /* by this VM. */ +#define JVMDI_ERROR_UNSUPPORTED_VERSION ((jvmdiError)68) + /* The class name defined in the new class file is */ + /* different from the name in the old class object */ +#define JVMDI_ERROR_NAMES_DONT_MATCH ((jvmdiError)69) + /* The new class version has different modifiers and */ + /* can_unrestrictedly_redefine_classes is false */ +#define JVMDI_ERROR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED ((jvmdiError)70) + /* A method in the new class version has different modifiers */ + /* than its counterpart in the old class version */ + /* and can_unrestrictedly_redefine_classes is false */ +#define JVMDI_ERROR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED ((jvmdiError)71) + + /* + * Miscellaneous errors + */ + + /* Not yet implemented */ +#define JVMDI_ERROR_NOT_IMPLEMENTED ((jvmdiError)99) + /* null pointer */ +#define JVMDI_ERROR_NULL_POINTER ((jvmdiError)100) + /* information is absent */ +#define JVMDI_ERROR_ABSENT_INFORMATION ((jvmdiError)101) + /* invalid event type */ +#define JVMDI_ERROR_INVALID_EVENT_TYPE ((jvmdiError)102) + /* invalid argument */ +#define JVMDI_ERROR_ILLEGAL_ARGUMENT ((jvmdiError)103) + + /* + * Universal errors. These errors may be returned by + * any JVMDI function, not just the ones for which they are listed + * below. + */ + + /* no more memory available for allocation */ +#define JVMDI_ERROR_OUT_OF_MEMORY ((jvmdiError)110) + /* debugging has not been enabled in this VM */ +#define JVMDI_ERROR_ACCESS_DENIED ((jvmdiError)111) + /* VM is dead (implementation not required to gracefully catch) */ +#define JVMDI_ERROR_VM_DEAD ((jvmdiError)112) + /* internal error */ +#define JVMDI_ERROR_INTERNAL ((jvmdiError)113) + /* Thread calling JVMDI function not attached to VM */ +#define JVMDI_ERROR_UNATTACHED_THREAD ((jvmdiError)115) + + + /* + * Threads + */ + + /* Thread status is unknown */ +#define JVMDI_THREAD_STATUS_UNKNOWN ((jint)-1) + /* Thread is waiting to die */ +#define JVMDI_THREAD_STATUS_ZOMBIE ((jint)0) + /* Thread is runnable */ +#define JVMDI_THREAD_STATUS_RUNNING ((jint)1) + /* Thread is sleeping - Thread.sleep() or JVM_Sleep() was called */ +#define JVMDI_THREAD_STATUS_SLEEPING ((jint)2) + /* Thread is waiting on a java monitor */ +#define JVMDI_THREAD_STATUS_MONITOR ((jint)3) + /* Thread is waiting - Thread.wait() or JVM_MonitorWait() was called */ +#define JVMDI_THREAD_STATUS_WAIT ((jint)4) + + /* Thread is suspended - Thread.suspend(), JVM_Suspend() or + * JVMDI_Suspend was called */ +#define JVMDI_SUSPEND_STATUS_SUSPENDED ((jint)0x1) + /* Thread is at a breakpoint */ +#define JVMDI_SUSPEND_STATUS_BREAK ((jint)0x2) + + + /* Thread priority constants */ +#define JVMDI_THREAD_MIN_PRIORITY ((jint)1) +#define JVMDI_THREAD_NORM_PRIORITY ((jint)5) +#define JVMDI_THREAD_MAX_PRIORITY ((jint)10) + +typedef struct { + char *name; + jint priority; + jboolean is_daemon; + jthreadGroup thread_group; + jobject context_class_loader; +} JVMDI_thread_info; + +typedef struct { + jthreadGroup parent; + char *name; + jint max_priority; + jboolean is_daemon; +} JVMDI_thread_group_info; + +#define JVMDI_DISABLE ((jint) 0) +#define JVMDI_ENABLE ((jint) 1) + +/* + * Initial function for debug threads created through JVMDI + */ +typedef void (*JVMDI_StartFunction)(void *); + +/* + * Type for debug monitors created through JVMDI + */ +typedef void *JVMDI_RawMonitor; + +#define JVMDI_MONITOR_WAIT_FOREVER ((jlong)(-1)) + +/* + * Monitor information + */ +typedef struct { + jthread owner; + jint entry_count; + jint waiter_count; + jthread *waiters; +} JVMDI_monitor_info; + +typedef struct { + jint owned_monitor_count; + jobject *owned_monitors; +} JVMDI_owned_monitor_info; + + /* + * Events + */ + + /* kind = JVMDI_EVENT_SINGLE_STEP */ + typedef struct { + jthread thread; + jclass clazz; + jmethodID method; + jlocation location; + } JVMDI_single_step_event_data; + + /* kind = JVMDI_EVENT_BREAKPOINT */ + typedef struct { + jthread thread; + jclass clazz; + jmethodID method; + jlocation location; + } JVMDI_breakpoint_event_data; + + /* kind = JVMDI_EVENT_FIELD_ACCESS */ + typedef struct { + jthread thread; + jclass clazz; + jmethodID method; + jlocation location; + jclass field_clazz; + jobject object; + jfieldID field; + } JVMDI_field_access_event_data; + + /* kind = JVMDI_EVENT_FIELD_MODIFICATION */ + typedef struct { + jthread thread; + jclass clazz; + jmethodID method; + jlocation location; + jclass field_clazz; + jobject object; + jfieldID field; + char signature_type; + jvalue new_value; + } JVMDI_field_modification_event_data; + + /* kind = JVMDI_EVENT_FRAME_POP */ + /* kind = JVMDI_EVENT_METHOD_ENTRY */ + /* kind = JVMDI_EVENT_METHOD_EXIT */ + typedef struct { + jthread thread; + jclass clazz; + jmethodID method; + jframeID frame; + } JVMDI_frame_event_data; + + /* kind = JVMDI_EVENT_EXCEPTION */ + typedef struct { + jthread thread; + jclass clazz; + jmethodID method; + jlocation location; + jobject exception; + jclass catch_clazz; + jmethodID catch_method; + jlocation catch_location; + } JVMDI_exception_event_data; + + /* kind = JVMDI_EVENT_EXCEPTION_CATCH */ + typedef struct { + jthread thread; + jclass clazz; + jmethodID method; + jlocation location; + jobject exception; + } JVMDI_exception_catch_event_data; + + /* kind = JVMDI_EVENT_USER_DEFINED */ + typedef struct { + jobject object; + jint key; + } JVMDI_user_event_data; + + /* kind = JVMDI_EVENT_THREAD_END or */ + /* JVMDI_EVENT_THREAD_START */ + typedef struct { + jthread thread; + } JVMDI_thread_change_event_data; + + /* kind = JVMDI_EVENT_CLASS_LOAD, */ + /* JVMDI_EVENT_CLASS_UNLOAD, or */ + /* JVMDI_EVENT_CLASS_PREPARE */ + typedef struct { + jthread thread; + jclass clazz; + } JVMDI_class_event_data; + +/* This stucture passes information about the event. + * location is the index of the last instruction executed. + */ +typedef struct { + jint kind; /* the discriminant */ + + union { + /* kind = JVMDI_EVENT_SINGLE_STEP */ + JVMDI_single_step_event_data single_step; + + /* kind = JVMDI_EVENT_BREAKPOINT */ + JVMDI_breakpoint_event_data breakpoint; + + /* kind = JVMDI_EVENT_FRAME_POP */ + /* kind = JVMDI_EVENT_METHOD_ENTRY */ + /* kind = JVMDI_EVENT_METHOD_EXIT */ + JVMDI_frame_event_data frame; + + /* kind = JVMDI_EVENT_FIELD_ACCESS */ + JVMDI_field_access_event_data field_access; + + /* kind = JVMDI_EVENT_FIELD_MODIFICATION */ + JVMDI_field_modification_event_data field_modification; + + /* kind = JVMDI_EVENT_EXCEPTION */ + JVMDI_exception_event_data exception; + + /* kind = JVMDI_EVENT_EXCEPTION_CATCH */ + JVMDI_exception_catch_event_data exception_catch; + + /* kind = JVMDI_EVENT_USER_DEFINED */ + JVMDI_user_event_data user; + + /* kind = JVMDI_EVENT_THREAD_END or */ + /* JVMDI_EVENT_THREAD_START */ + JVMDI_thread_change_event_data thread_change; + + /* kind = JVMDI_EVENT_CLASS_LOAD, */ + /* JVMDI_EVENT_CLASS_UNLOAD, or */ + /* JVMDI_EVENT_CLASS_PREPARE */ + JVMDI_class_event_data class_event; + + /* kind = JVMDI_EVENT_VM_DEATH, JVMDI_EVENT_VM_INIT */ + /* no additional fields */ + } u; +} JVMDI_Event; + + /*** event kinds ***/ +#define JVMDI_EVENT_SINGLE_STEP ((jint)1) +#define JVMDI_EVENT_BREAKPOINT ((jint)2) +#define JVMDI_EVENT_FRAME_POP ((jint)3) +#define JVMDI_EVENT_EXCEPTION ((jint)4) +#define JVMDI_EVENT_USER_DEFINED ((jint)5) +#define JVMDI_EVENT_THREAD_START ((jint)6) +#define JVMDI_EVENT_THREAD_END ((jint)7) +#define JVMDI_EVENT_CLASS_PREPARE ((jint)8) +#define JVMDI_EVENT_CLASS_UNLOAD ((jint)9) +#define JVMDI_EVENT_CLASS_LOAD ((jint)10) +#define JVMDI_EVENT_FIELD_ACCESS ((jint)20) +#define JVMDI_EVENT_FIELD_MODIFICATION ((jint)21) +#define JVMDI_EVENT_EXCEPTION_CATCH ((jint)30) +#define JVMDI_EVENT_METHOD_ENTRY ((jint)40) +#define JVMDI_EVENT_METHOD_EXIT ((jint)41) +#define JVMDI_EVENT_VM_INIT ((jint)90) +#define JVMDI_EVENT_VM_DEATH ((jint)99) + +#define JVMDI_MAX_EVENT_TYPE_VAL ((jint)99) + + + +/* event handler hook */ +typedef void (*JVMDI_EventHook)(JNIEnv *env, JVMDI_Event *event); + +typedef jvmdiError (*JVMDI_AllocHook) (jlong size, jbyte** memPtr); +typedef jvmdiError (*JVMDI_DeallocHook) (jbyte* buffer); + +/* + * Class states used in JVMDI_GetClassStatus + */ +#define JVMDI_CLASS_STATUS_VERIFIED ((jint)0x01) +#define JVMDI_CLASS_STATUS_PREPARED ((jint)0x02) +#define JVMDI_CLASS_STATUS_INITIALIZED ((jint)0x04) + /* Error prevents initialization */ +#define JVMDI_CLASS_STATUS_ERROR ((jint)0x08) + +/* structure for returning line number information + */ +typedef struct { + jlocation start_location; + jint line_number; +} JVMDI_line_number_entry; + + +/* structure for returning local variable information + */ +typedef struct { + jlocation start_location; /* variable valid start_location */ + jint length; /* upto start_location+length */ + char *name; /* name in UTF8 */ + char *signature; /* type signature in UTF8 */ + jint slot; /* variable slot, see JVMDI_GetLocal*() */ +} JVMDI_local_variable_entry; + +/* structure for returning exception handler information + */ +typedef struct { + jlocation start_location; + jlocation end_location; + jlocation handler_location; + jclass exception; /* if null, all exceptions */ +} JVMDI_exception_handler_entry; + +#define JVMDI_OPERAND_TYPE_REFERENCE ((jint)1) +#define JVMDI_OPERAND_TYPE_INT ((jint)2) +#define JVMDI_OPERAND_TYPE_FLOAT ((jint)3) +#define JVMDI_OPERAND_TYPE_LONG0 ((jint)4) /* least sig. 32 bits */ +#define JVMDI_OPERAND_TYPE_LONG1 ((jint)5) /* most sig. 32 bits */ +#define JVMDI_OPERAND_TYPE_DOUBLE0 ((jint)6) /* least sig. 32 bits */ +#define JVMDI_OPERAND_TYPE_DOUBLE1 ((jint)7) /* most sig. 32 bits */ +#define JVMDI_OPERAND_TYPE_RETURN_ADDRESS ((jint)8) + +typedef struct { + jint word; /* 32 bit operand stack quantities */ + jint type; /* type encoding of the operand word */ + /* one of JVMDI_OPERAND_TYPE_* */ +} JVMDI_operand_stack_element; + +typedef struct { + jint instance_field_count; /* number of instance fields referencing obj */ + struct JVMDI_instance_field { + jobject instance; /* instance referencing obj */ + jfieldID field; /* field holding reference */ + } *instance_fields; /* instanceField_count of them */ + + jint static_field_count; /* number of static fields referencing obj */ + struct JVMDI_static_field { + jclass clazz; /* class referencing obj */ + jfieldID static_field; /* field holding reference */ + } *static_fields; /* static_field_count of them */ + + jint array_element_count; /* number of array elements referencing obj */ + struct JVMDI_array_element { + jobjectArray array; /* array referencing obj */ + jint index; /* index holding reference */ + } *array_elements; /* array_element_count of them */ + + jint frame_slot_count; /* number of frame slots referencing obj */ + struct JVMDI_frame_slot { + jthread thread; /* thread of the frame */ + jframeID frame; /* frame referencing obj */ + jint slot; /* slot holding reference */ + } *frame_slots; /* frame_slot_count of them */ +} JVMDI_object_reference_info; + +/* structure for defining a class +*/ +typedef struct { + jclass clazz; /* Class object for this class */ + jint class_byte_count; /* number of bytes defining class (below) */ + jbyte *class_bytes; /* bytes defining class (in JVM spec */ + /* Class File Format) */ +} JVMDI_class_definition; + + /* For backwards compatibility */ +#define can_change_schema can_unrestrictedly_redefine_classes + +typedef struct { + unsigned int can_watch_field_modification : 1; + unsigned int can_watch_field_access : 1; + unsigned int can_get_bytecodes : 1; + unsigned int can_get_synthetic_attribute : 1; + unsigned int can_get_owned_monitor_info : 1; + unsigned int can_get_current_contended_monitor : 1; + unsigned int can_get_monitor_info : 1; + unsigned int can_get_heap_info : 1; + unsigned int can_get_operand_stack : 1; + unsigned int can_set_operand_stack : 1; + unsigned int can_pop_frame : 1; + unsigned int can_get_class_definition : 1; + unsigned int can_redefine_classes : 1; + unsigned int can_add_method : 1; + unsigned int can_unrestrictedly_redefine_classes : 1; + unsigned int can_suspend_resume_thread_lists : 1; +} JVMDI_capabilities; + +typedef struct JVMDI_Interface_1_ { + jvmdiError (JNICALL *SetEventHook) + (JVMDI_EventHook hook); + jvmdiError (JNICALL *SetEventNotificationMode) + (jint mode, jint eventType, jthread thread, ...); + + jvmdiError (JNICALL *GetThreadStatus) + (jthread thread, + jint *threadStatusPtr, jint *suspendStatusPtr); + jvmdiError (JNICALL *GetAllThreads) + (jint *threadsCountPtr, jthread **threadsPtr); + jvmdiError (JNICALL *SuspendThread) + (jthread thread); + jvmdiError (JNICALL *ResumeThread) + (jthread thread); + jvmdiError (JNICALL *StopThread) + (jthread thread, jobject exception); + jvmdiError (JNICALL *InterruptThread) + (jthread thread); + jvmdiError (JNICALL *GetThreadInfo) + (jthread thread, JVMDI_thread_info *infoPtr); + jvmdiError (JNICALL *GetOwnedMonitorInfo) + (jthread thread, JVMDI_owned_monitor_info *infoPtr); + jvmdiError (JNICALL *GetCurrentContendedMonitor) + (jthread thread, jobject *monitor); + jvmdiError (JNICALL *RunDebugThread) + (jthread thread, JVMDI_StartFunction proc, void *arg, + int priority); + + jvmdiError (JNICALL *GetTopThreadGroups) + (jint *groupCountPtr, jthreadGroup **groupsPtr); + jvmdiError (JNICALL *GetThreadGroupInfo) + (jthreadGroup group, JVMDI_thread_group_info *infoPtr); + jvmdiError (JNICALL *GetThreadGroupChildren) + (jthreadGroup group, + jint *threadCountPtr, jthread **threadsPtr, + jint *groupCountPtr, jthreadGroup **groupsPtr); + + jvmdiError (JNICALL *GetFrameCount) + (jthread thread, jint *countPtr); + jvmdiError (JNICALL *GetCurrentFrame) + (jthread thread, jframeID *framePtr); + jvmdiError (JNICALL *GetCallerFrame) + (jframeID called, jframeID *framePtr); + jvmdiError (JNICALL *GetFrameLocation) + (jframeID frame, jclass *classPtr, jmethodID *methodPtr, + jlocation *locationPtr); + jvmdiError (JNICALL *NotifyFramePop) + (jframeID frame); + jvmdiError (JNICALL *GetLocalObject) + (jframeID frame, jint slot, jobject *valuePtr); + jvmdiError (JNICALL *GetLocalInt) + (jframeID frame, jint slot, jint *valuePtr); + jvmdiError (JNICALL *GetLocalLong) + (jframeID frame, jint slot, jlong *valuePtr); + jvmdiError (JNICALL *GetLocalFloat) + (jframeID frame, jint slot, jfloat *valuePtr); + jvmdiError (JNICALL *GetLocalDouble) + (jframeID frame, jint slot, jdouble *valuePtr); + jvmdiError (JNICALL *SetLocalObject) + (jframeID frame, jint slot, jobject value); + jvmdiError (JNICALL *SetLocalInt) + (jframeID frame, jint slot, jint value); + jvmdiError (JNICALL *SetLocalLong) + (jframeID frame, jint slot, jlong value); + jvmdiError (JNICALL *SetLocalFloat) + (jframeID frame, jint slot, jfloat value); + jvmdiError (JNICALL *SetLocalDouble) + (jframeID frame, jint slot, jdouble value); + + jvmdiError (JNICALL *CreateRawMonitor) + (char *name, JVMDI_RawMonitor *monitorPtr); + jvmdiError (JNICALL *DestroyRawMonitor) + (JVMDI_RawMonitor monitor); + jvmdiError (JNICALL *RawMonitorEnter) + (JVMDI_RawMonitor monitor); + jvmdiError (JNICALL *RawMonitorExit) + (JVMDI_RawMonitor monitor); + jvmdiError (JNICALL *RawMonitorWait) + (JVMDI_RawMonitor monitor, jlong millis); + jvmdiError (JNICALL *RawMonitorNotify) + (JVMDI_RawMonitor monitor); + jvmdiError (JNICALL *RawMonitorNotifyAll) + (JVMDI_RawMonitor monitor); + + jvmdiError (JNICALL *SetBreakpoint) + (jclass clazz, jmethodID method, jlocation location); + jvmdiError (JNICALL *ClearBreakpoint) + (jclass clazz, jmethodID method, jlocation location); + jvmdiError (JNICALL *ClearAllBreakpoints) + (); + + jvmdiError (JNICALL *SetFieldAccessWatch) + (jclass clazz, jfieldID field); + jvmdiError (JNICALL *ClearFieldAccessWatch) + (jclass clazz, jfieldID field); + jvmdiError (JNICALL *SetFieldModificationWatch) + (jclass clazz, jfieldID field); + jvmdiError (JNICALL *ClearFieldModificationWatch) + (jclass clazz, jfieldID field); + + jvmdiError (JNICALL *SetAllocationHooks) + (JVMDI_AllocHook ahook, JVMDI_DeallocHook dhook); + jvmdiError (JNICALL *Allocate) + (jlong size, jbyte** memPtr); + jvmdiError (JNICALL *Deallocate) + (jbyte* mem); + + jvmdiError (JNICALL *GetClassSignature) + (jclass clazz, char **sigPtr); + jvmdiError (JNICALL *GetClassStatus) + (jclass clazz, jint *statusPtr); + jvmdiError (JNICALL *GetSourceFileName) + (jclass clazz, char **sourceNamePtr); + jvmdiError (JNICALL *GetClassModifiers) + (jclass clazz, jint *modifiersPtr); + jvmdiError (JNICALL *GetClassMethods) + (jclass clazz, jint *methodCountPtr, jmethodID **methodsPtr); + jvmdiError (JNICALL *GetClassFields) + (jclass clazz, jint *fieldCountPtr, jfieldID **fieldsPtr); + jvmdiError (JNICALL *GetImplementedInterfaces) + (jclass clazz, jint *interfaceCountPtr, jclass **interfacesPtr); + jvmdiError (JNICALL *IsInterface) + (jclass clazz, jboolean *isInterfacePtr); + jvmdiError (JNICALL *IsArrayClass) + (jclass clazz, jboolean *isArrayClassPtr); + jvmdiError (JNICALL *GetClassLoader) + (jclass clazz, jobject *classloaderPtr); + + jvmdiError (JNICALL *GetObjectHashCode) + (jobject object, jint *hashCodePtr); + jvmdiError (JNICALL *GetMonitorInfo) + (jobject object, JVMDI_monitor_info *infoPtr); + + jvmdiError (JNICALL *GetFieldName) + (jclass clazz, jfieldID field, char **namePtr, char **signaturePtr); + jvmdiError (JNICALL *GetFieldDeclaringClass) + (jclass clazz, jfieldID field, jclass *declaringClassPtr); + jvmdiError (JNICALL *GetFieldModifiers) + (jclass clazz, jfieldID field, jint *modifiersPtr); + jvmdiError (JNICALL *IsFieldSynthetic) + (jclass clazz, jfieldID field, jboolean *isSyntheticPtr); + + jvmdiError (JNICALL *GetMethodName) + (jclass clazz, jmethodID method, + char **namePtr, char **signaturePtr); + jvmdiError (JNICALL *GetMethodDeclaringClass) + (jclass clazz, jmethodID method, jclass *declaringClassPtr); + jvmdiError (JNICALL *GetMethodModifiers) + (jclass clazz, jmethodID method, jint *modifiersPtr); + jvmdiError (JNICALL *GetMaxStack) + (jclass clazz, jmethodID method, jint *maxPtr); + jvmdiError (JNICALL *GetMaxLocals) + (jclass clazz, jmethodID method, jint *maxPtr); + jvmdiError (JNICALL *GetArgumentsSize) + (jclass clazz, jmethodID method, jint *sizePtr); + jvmdiError (JNICALL *GetLineNumberTable) + (jclass clazz, jmethodID method, + jint *entryCountPtr, JVMDI_line_number_entry **tablePtr); + jvmdiError (JNICALL *GetMethodLocation) + (jclass clazz, jmethodID method, + jlocation *startLocationPtr, jlocation *endLocationPtr); + jvmdiError (JNICALL *GetLocalVariableTable) + (jclass clazz, jmethodID method, + jint *entryCountPtr, JVMDI_local_variable_entry **tablePtr); + jvmdiError (JNICALL *GetExceptionHandlerTable) + (jclass clazz, jmethodID method, + jint *entryCountPtr, JVMDI_exception_handler_entry **tablePtr); + jvmdiError (JNICALL *GetThrownExceptions) + (jclass clazz, jmethodID method, + jint *exceptionCountPtr, jclass **exceptionsPtr); + jvmdiError (JNICALL *GetBytecodes) + (jclass clazz, jmethodID method, + jint *bytecodeCountPtr, jbyte **bytecodesPtr); + jvmdiError (JNICALL *IsMethodNative) + (jclass clazz, jmethodID method, jboolean *isNativePtr); + jvmdiError (JNICALL *IsMethodSynthetic) + (jclass clazz, jmethodID method, jboolean *isSyntheticPtr); + + jvmdiError (JNICALL *GetLoadedClasses) + (jint *classCountPtr, jclass **classesPtr); + jvmdiError (JNICALL *GetClassLoaderClasses) + (jobject initiatingLoader, jint *classesCountPtr, + jclass **classesPtr); + + jvmdiError (JNICALL *PopFrame) + (jthread thread); + jvmdiError (JNICALL *SetFrameLocation) + (jframeID frame, jlocation location); + jvmdiError (JNICALL *GetOperandStack) + (jframeID frame, jint *operandStackSizePtr, + JVMDI_operand_stack_element **operandStackPtr); + jvmdiError (JNICALL *SetOperandStack) + (jframeID frame, jint operandStackSize, + JVMDI_operand_stack_element *operandStack); + jvmdiError (JNICALL *AllInstances) + (jclass clazz, jint *instanceCountPtr, jobject **instancesPtr); + jvmdiError (JNICALL *References) + (jobject obj, JVMDI_object_reference_info *refs); + jvmdiError (JNICALL *GetClassDefinition) + (jclass clazz, JVMDI_class_definition *classDefPtr); + jvmdiError (JNICALL *RedefineClasses) + (jint classCount, JVMDI_class_definition *classDefs); + + jvmdiError (JNICALL *GetVersionNumber) + (jint *versionPtr); + jvmdiError (JNICALL *GetCapabilities) + (JVMDI_capabilities *capabilitiesPtr); + + jvmdiError (JNICALL *GetSourceDebugExtension) + (jclass clazz, char **sourceDebugExtension); + jvmdiError (JNICALL *IsMethodObsolete) + (jclass clazz, jmethodID method, jboolean *isObsoletePtr); + + jvmdiError (JNICALL *SuspendThreadList) + (jint reqCount, jthread *reqList, jvmdiError *results); + jvmdiError (JNICALL *ResumeThreadList) + (jint reqCount, jthread *reqList, jvmdiError *results); +} JVMDI_Interface_1; + +#ifndef NO_JVMDI_MACROS + +#define JVMDI_ERROR_DUPLICATE_BREAKPOINT JVMDI_ERROR_DUPLICATE +#define JVMDI_ERROR_NO_SUCH_BREAKPOINT JVMDI_ERROR_NOT_FOUND +#define JVMDI_ERROR_DUPLICATE_FRAME_POP JVMDI_ERROR_DUPLICATE + + +static JVMDI_Interface_1 *jvmdi_interface = NULL; +static JavaVM *j_vm; + +#ifdef __cplusplus +#define SetJVMDIfromJNIEnv(a_env) ( (jvmdi_interface == NULL)? \ + ((a_env)->GetJavaVM(&j_vm), \ + (j_vm)->GetEnv((void **)&jvmdi_interface, \ + JVMDI_VERSION_1)):0) +#else +#define SetJVMDIfromJNIEnv(a_env) ( (jvmdi_interface == NULL)? \ + ((*a_env)->GetJavaVM(a_env, &j_vm), \ + (*j_vm)->GetEnv(j_vm, (void **)&jvmdi_interface, \ + JVMDI_VERSION_1)):0) +#endif + +#define JVMDI_SetEventHook(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->SetEventHook(a1) ) +#define JVMDI_GetThreadStatus(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetThreadStatus(a1, a2, a3) ) +#define JVMDI_GetAllThreads(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetAllThreads(a1, a2) ) +#define JVMDI_SuspendThread(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->SuspendThread(a1) ) +#define JVMDI_ResumeThread(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->ResumeThread(a1) ) +#define JVMDI_StopThread(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->StopThread(a1, a2) ) +#define JVMDI_InterruptThread(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->InterruptThread(a1) ) +#define JVMDI_SetSingleStep(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->SetEventNotificationMode( \ + (a2) ? JVMDI_ENABLE : JVMDI_DISABLE, \ + JVMDI_EVENT_SINGLE_STEP, a1) ) +#define JVMDI_GetThreadInfo(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetThreadInfo(a1, a2) ) +#define JVMDI_RunDebugThread(a_env, a1, a2, a3, a4) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->RunDebugThread(a1, a2, a3, a4) ) +#define JVMDI_GetTopThreadGroups(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetTopThreadGroups(a1, a2) ) +#define JVMDI_GetThreadGroupInfo(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetThreadGroupInfo(a1, a2) ) +#define JVMDI_GetThreadGroupChildren(a_env, a1, a2, a3, a4, a5) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetThreadGroupChildren(a1, a2, a3, a4, a5) ) +#define JVMDI_GetCurrentFrame(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetCurrentFrame(a1, a2) ) +#define JVMDI_GetCallerFrame(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetCallerFrame(a1, a2) ) +#define JVMDI_GetFrameLocation(a_env, a1, a2, a3, a4) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetFrameLocation(a1, a2, a3, a4) ) +#define JVMDI_NotifyFramePop(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->NotifyFramePop(a1) ) +#define JVMDI_GetLocalObject(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetLocalObject(a1, a2, a3) ) +#define JVMDI_GetLocalInt(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetLocalInt(a1, a2, a3) ) +#define JVMDI_GetLocalLong(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetLocalLong(a1, a2, a3) ) +#define JVMDI_GetLocalFloat(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetLocalFloat(a1, a2, a3) ) +#define JVMDI_GetLocalDouble(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetLocalDouble(a1, a2, a3) ) +#define JVMDI_SetLocalObject(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->SetLocalObject(a1, a2, a3) ) +#define JVMDI_SetLocalInt(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->SetLocalInt(a1, a2, a3) ) +#define JVMDI_SetLocalLong(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->SetLocalLong(a1, a2, a3) ) +#define JVMDI_SetLocalFloat(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->SetLocalFloat(a1, a2, a3) ) +#define JVMDI_SetLocalDouble(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->SetLocalDouble(a1, a2, a3) ) +#define JVMDI_CreateRawMonitor(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->CreateRawMonitor(a1, a2) ) +#define JVMDI_DestroyRawMonitor(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->DestroyRawMonitor(a1) ) +#define JVMDI_RawMonitorEnter(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->RawMonitorEnter(a1) ) +#define JVMDI_RawMonitorExit(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->RawMonitorExit(a1) ) +#define JVMDI_RawMonitorWait(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->RawMonitorWait(a1, a2) ) +#define JVMDI_RawMonitorNotify(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->RawMonitorNotify(a1) ) +#define JVMDI_RawMonitorNotifyAll(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->RawMonitorNotifyAll(a1) ) +#define JVMDI_SetBreakpoint(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->SetBreakpoint(a1, a2, a3) ) +#define JVMDI_ClearBreakpoint(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->ClearBreakpoint(a1, a2, a3) ) +#define JVMDI_ClearAllBreakpoints(a_env) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->ClearAllBreakpoints() ) +#define JVMDI_SetAllocationHooks(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->SetAllocationHooks(a1, a2) ) +#define JVMDI_Allocate(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->Allocate(a1, a2) ) +#define JVMDI_Deallocate(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->Deallocate(a1) ) +#define JVMDI_GetClassSignature(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetClassSignature(a1, a2) ) +#define JVMDI_GetClassStatus(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetClassStatus(a1, a2) ) +#define JVMDI_GetSourceFileName(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetSourceFileName(a1, a2) ) +#define JVMDI_GetClassModifiers(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetClassModifiers(a1, a2) ) +#define JVMDI_GetClassMethods(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetClassMethods(a1, a2, a3) ) +#define JVMDI_GetClassFields(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetClassFields(a1, a2, a3) ) +#define JVMDI_GetImplementedInterfaces(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetImplementedInterfaces(a1, a2, a3) ) +#define JVMDI_IsInterface(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->IsInterface(a1, a2) ) +#define JVMDI_IsArrayClass(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->IsArrayClass(a1, a2) ) +#define JVMDI_ClassLoader(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetClassLoader(a1, a2) ) +#define JVMDI_GetFieldName(a_env, a1, a2, a3, a4) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetFieldName(a1, a2, a3, a4) ) +#define JVMDI_GetFieldDeclaringClass(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetFieldDeclaringClass(a1, a2, a3) ) +#define JVMDI_GetFieldModifiers(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetFieldModifiers(a1, a2, a3) ) +#define JVMDI_GetMethodName(a_env, a1, a2, a3, a4) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetMethodName(a1, a2, a3, a4) ) +#define JVMDI_GetMethodDeclaringClass(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetMethodDeclaringClass(a1, a2, a3) ) +#define JVMDI_GetMethodModifiers(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetMethodModifiers(a1, a2, a3) ) +#define JVMDI_GetMaxStack(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetMaxStack(a1, a2, a3) ) +#define JVMDI_GetMaxLocals(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetMaxLocals(a1, a2, a3) ) +#define JVMDI_GetArgumentsSize(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetArgumentsSize(a1, a2, a3) ) +#define JVMDI_GetLineNumberTable(a_env, a1, a2, a3, a4) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetLineNumberTable(a1, a2, a3, a4) ) +#define JVMDI_GetMethodLocation(a_env, a1, a2, a3, a4) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetMethodLocation(a1, a2, a3, a4) ) +#define JVMDI_GetLocalVariableTable(a_env, a1, a2, a3, a4) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetLocalVariableTable(a1, a2, a3, a4) ) +#define JVMDI_GetExceptionHandlerTable(a_env, a1, a2, a3, a4) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetExceptionHandlerTable(a1, a2, a3, a4) ) +#define JVMDI_GetThrownExceptions(a_env, a1, a2, a3, a4) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetThrownExceptions(a1, a2, a3, a4) ) +#define JVMDI_GetBytecodes(a_env, a1, a2, a3, a4) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetBytecodes(a1, a2, a3, a4) ) +#define JVMDI_IsMethodNative(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->IsMethodNative(a1, a2, a3) ) +#define JVMDI_GetLoadedClasses(a_env, a1, a2) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetLoadedClasses(a1, a2) ) +#define JVMDI_GetClassLoaderClasses(a_env, a1, a2, a3) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetClassLoaderClasses(a1, a2, a3) ) +#define JVMDI_GetVersionNumber(a_env, a1) ( \ + SetJVMDIfromJNIEnv(a_env), \ + jvmdi_interface->GetVersionNumber(a1) ) + +#endif /* !NO_JVMDI_MACROS */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* !_JAVASOFT_JVMDI_H_ */ + + diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmpi.h b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmpi.h new file mode 100644 index 0000000000..557b231bbd --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmpi.h @@ -0,0 +1,642 @@ +/* + * @(#)jvmpi.h 1.28 03/12/19 + * + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +#ifndef _JAVASOFT_JVMPI_H_ +#define _JAVASOFT_JVMPI_H_ + +#include "jni.h" + +#define JVMPI_VERSION_1 ((jint)0x10000001) /* implied 0 for minor version */ +#define JVMPI_VERSION_1_1 ((jint)0x10000002) +#define JVMPI_VERSION_1_2 ((jint)0x10000003) + +#ifdef __cplusplus +extern "C" { +#endif + typedef void (*jvmpi_void_function_of_void)(void *); +#ifdef __cplusplus +} +#endif + +/**************************************************************** + * Profiler interface data structures. + ****************************************************************/ +/* identifier types. */ +struct _jobjectID; +typedef struct _jobjectID * jobjectID; /* type of object ids */ + +/* raw monitors */ +struct _JVMPI_RawMonitor; +typedef struct _JVMPI_RawMonitor * JVMPI_RawMonitor; + +/* call frame */ +typedef struct { + jint lineno; /* line number in the source file */ + jmethodID method_id; /* method executed in this frame */ +} JVMPI_CallFrame; + +/* call trace */ +typedef struct { + JNIEnv *env_id; /* Env where trace was recorded */ + jint num_frames; /* number of frames in this trace */ + JVMPI_CallFrame *frames; /* frames */ +} JVMPI_CallTrace; + +/* method */ +typedef struct { + char *method_name; /* name of method */ + char *method_signature; /* signature of method */ + jint start_lineno; /* -1 if native, abstract .. */ + jint end_lineno; /* -1 if native, abstract .. */ + jmethodID method_id; /* id assigned to this method */ +} JVMPI_Method; + +/* Field */ +typedef struct { + char *field_name; /* name of field */ + char *field_signature; /* signature of field */ +} JVMPI_Field; + +/* line number info for a compiled method */ +typedef struct { + jint offset; /* offset from beginning of method */ + jint lineno; /* lineno from beginning of src file */ +} JVMPI_Lineno; + +/* event */ +typedef struct { + jint event_type; /* event_type */ + JNIEnv *env_id; /* env where this event occured */ + + union { + struct { + const char *class_name; /* class name */ + char *source_name; /* name of source file */ + jint num_interfaces; /* number of interfaces implemented */ + jint num_methods; /* number of methods in the class */ + JVMPI_Method *methods; /* methods */ + jint num_static_fields; /* number of static fields */ + JVMPI_Field *statics; /* static fields */ + jint num_instance_fields; /* number of instance fields */ + JVMPI_Field *instances; /* instance fields */ + jobjectID class_id; /* id of the class object */ + } class_load; + + struct { + jobjectID class_id; /* id of the class object */ + } class_unload; + + struct { + unsigned char *class_data; /* content of class file */ + jint class_data_len; /* class file length */ + unsigned char *new_class_data; /* instrumented class file */ + jint new_class_data_len; /* new class file length */ + void * (*malloc_f)(unsigned int); /* memory allocation function */ + } class_load_hook; + + struct { + jint arena_id; + jobjectID class_id; /* id of object class */ + jint is_array; /* JVMPI_NORMAL_OBJECT, ... */ + jint size; /* size in number of bytes */ + jobjectID obj_id; /* id assigned to this object */ + } obj_alloc; + + struct { + jobjectID obj_id; /* id of the object */ + } obj_free; + + struct { + jint arena_id; /* cur arena id */ + jobjectID obj_id; /* cur object id */ + jint new_arena_id; /* new arena id */ + jobjectID new_obj_id; /* new object id */ + } obj_move; + + struct { + jint arena_id; /* id of arena */ + const char *arena_name; /* name of arena */ + } new_arena; + + struct { + jint arena_id; /* id of arena */ + } delete_arena; + + struct { + char *thread_name; /* name of thread */ + char *group_name; /* name of group */ + char *parent_name; /* name of parent */ + jobjectID thread_id; /* id of the thread object */ + JNIEnv *thread_env_id; + } thread_start; + + struct { + int dump_level; /* level of the heap dump info */ + char *begin; /* where all the root records begin, + please see the heap dump buffer + format described below */ + char *end; /* where the object records end. */ + jint num_traces; /* number of thread traces, + 0 if dump level = JVMPI_DUMP_LEVEL_0 */ + JVMPI_CallTrace *traces; /* thread traces collected during + heap dump */ + } heap_dump; + + struct { + jobjectID obj_id; /* object id */ + jobject ref_id; /* id assigned to the globalref */ + } jni_globalref_alloc; + + struct { + jobject ref_id; /* id of the global ref */ + } jni_globalref_free; + + struct { + jmethodID method_id; /* method */ + } method; + + struct { + jmethodID method_id; /* id of method */ + jobjectID obj_id; /* id of target object */ + } method_entry2; + + struct { + jmethodID method_id; /* id of compiled method */ + void *code_addr; /* code start addr. in memory */ + jint code_size; /* code size */ + jint lineno_table_size; /* size of lineno table */ + JVMPI_Lineno *lineno_table; /* lineno info */ + } compiled_method_load; + + struct { + jmethodID method_id; /* id of unloaded compiled method */ + } compiled_method_unload; + + struct { + jmethodID method_id; /* id of the method the instruction belongs to */ + jint offset; /* instruction offset in the method's bytecode */ + union { + struct { + jboolean is_true; /* whether true or false branch is taken */ + } if_info; + struct { + jint key; /* top stack value used as an index */ + jint low; /* min value of the index */ + jint hi; /* max value of the index */ + } tableswitch_info; + struct { + jint chosen_pair_index; /* actually chosen pair index (0-based) + * if chosen_pair_index == pairs_total then + * the 'default' branch is taken + */ + jint pairs_total; /* total number of lookupswitch pairs */ + } lookupswitch_info; + } u; + } instruction; + + struct { + char *begin; /* beginning of dump buffer, + see below for format */ + char *end; /* end of dump buffer */ + jint num_traces; /* number of traces */ + JVMPI_CallTrace *traces; /* traces of all threads */ + jint *threads_status; /* status of all threads */ + } monitor_dump; + + struct { + const char *name; /* name of raw monitor */ + JVMPI_RawMonitor id; /* id */ + } raw_monitor; + + struct { + jobjectID object; /* Java object */ + } monitor; + + struct { + jobjectID object; /* Java object */ + jlong timeout; /* timeout period */ + } monitor_wait; + + struct { + jlong used_objects; + jlong used_object_space; + jlong total_object_space; + } gc_info; + + struct { + jint data_len; + char *data; + } object_dump; + } u; +} JVMPI_Event; + +/* interface functions */ +typedef struct { + jint version; /* JVMPI version */ + + /* ------interface implemented by the profiler------ */ + + /** + * Function called by the JVM to notify an event. + */ + void (*NotifyEvent)(JVMPI_Event *event); + + /* ------interface implemented by the JVM------ */ + + /** + * Function called by the profiler to enable/disable/send notification + * for a particular event type. + * + * event_type - event_type + * arg - event specific arg + * + * return JVMPI_NOT_AVAILABLE, JVMPI_SUCCESS or JVMPI_FAIL + */ + jint (*EnableEvent)(jint event_type, void *arg); + jint (*DisableEvent)(jint event_type, void *arg); + jint (*RequestEvent)(jint event_type, void *arg); + + /** + * Function called by the profiler to get a stack + * trace from the JVM. + * + * trace - trace data structure to be filled + * depth - maximum depth of the trace. + */ + void (*GetCallTrace)(JVMPI_CallTrace *trace, jint depth); + + /** + * Function called by profiler when it wants to exit/stop. + */ + void (*ProfilerExit)(jint); + + /** + * Utility functions provided by the JVM. + */ + JVMPI_RawMonitor (*RawMonitorCreate)(char *lock_name); + void (*RawMonitorEnter)(JVMPI_RawMonitor lock_id); + void (*RawMonitorExit)(JVMPI_RawMonitor lock_id); + void (*RawMonitorWait)(JVMPI_RawMonitor lock_id, jlong ms); + void (*RawMonitorNotifyAll)(JVMPI_RawMonitor lock_id); + void (*RawMonitorDestroy)(JVMPI_RawMonitor lock_id); + + /** + * Function called by the profiler to get the current thread's CPU time. + * + * return time in nanoseconds; + */ + jlong (*GetCurrentThreadCpuTime)(void); + + void (*SuspendThread)(JNIEnv *env); + void (*ResumeThread)(JNIEnv *env); + jint (*GetThreadStatus)(JNIEnv *env); + jboolean (*ThreadHasRun)(JNIEnv *env); + + /* This function can be called safely only after JVMPI_EVENT_VM_INIT_DONE + notification by the JVM. */ + jint (*CreateSystemThread)(char *name, jint priority, void (*f)(void *)); + + /* thread local storage access functions to avoid locking in time + critical functions */ + void (*SetThreadLocalStorage)(JNIEnv *env_id, void *ptr); + void * (*GetThreadLocalStorage)(JNIEnv *env_id); + + /* control GC */ + void (*DisableGC)(void); + void (*EnableGC)(void); + void (*RunGC)(void); + + jobjectID (*GetThreadObject)(JNIEnv *env); + jobjectID (*GetMethodClass)(jmethodID mid); + + /* JNI <-> jobject conversions */ + jobject (*jobjectID2jobject)(jobjectID jid); + jobjectID (*jobject2jobjectID)(jobject jobj); + + void (*SuspendThreadList) + (jint reqCount, JNIEnv **reqList, jint *results); + void (*ResumeThreadList) + (jint reqCount, JNIEnv **reqList, jint *results); +} JVMPI_Interface; + +/* type of argument passed to RequestEvent for heap dumps */ +typedef struct { + jint heap_dump_level; +} JVMPI_HeapDumpArg; + +/********************************************************************** + * Constants and formats used in JVM Profiler Interface. + **********************************************************************/ +/* + * Event type constants. + */ +#define JVMPI_EVENT_METHOD_ENTRY ((jint)1) +#define JVMPI_EVENT_METHOD_ENTRY2 ((jint)2) +#define JVMPI_EVENT_METHOD_EXIT ((jint)3) + +#define JVMPI_EVENT_OBJECT_ALLOC ((jint)4) +#define JVMPI_EVENT_OBJECT_FREE ((jint)5) +#define JVMPI_EVENT_OBJECT_MOVE ((jint)6) + +#define JVMPI_EVENT_COMPILED_METHOD_LOAD ((jint)7) +#define JVMPI_EVENT_COMPILED_METHOD_UNLOAD ((jint)8) + +#define JVMPI_EVENT_INSTRUCTION_START ((jint)9) + +#define JVMPI_EVENT_THREAD_START ((jint)33) +#define JVMPI_EVENT_THREAD_END ((jint)34) + +#define JVMPI_EVENT_CLASS_LOAD_HOOK ((jint)35) + +#define JVMPI_EVENT_HEAP_DUMP ((jint)37) +#define JVMPI_EVENT_JNI_GLOBALREF_ALLOC ((jint)38) +#define JVMPI_EVENT_JNI_GLOBALREF_FREE ((jint)39) +#define JVMPI_EVENT_JNI_WEAK_GLOBALREF_ALLOC ((jint)40) +#define JVMPI_EVENT_JNI_WEAK_GLOBALREF_FREE ((jint)41) +#define JVMPI_EVENT_CLASS_LOAD ((jint)42) +#define JVMPI_EVENT_CLASS_UNLOAD ((jint)43) +#define JVMPI_EVENT_DATA_DUMP_REQUEST ((jint)44) +#define JVMPI_EVENT_DATA_RESET_REQUEST ((jint)45) + +#define JVMPI_EVENT_JVM_INIT_DONE ((jint)46) +#define JVMPI_EVENT_JVM_SHUT_DOWN ((jint)47) + +#define JVMPI_EVENT_ARENA_NEW ((jint)48) +#define JVMPI_EVENT_ARENA_DELETE ((jint)49) + +#define JVMPI_EVENT_OBJECT_DUMP ((jint)50) + +#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTER ((jint)51) +#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTERED ((jint)52) +#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_EXIT ((jint)53) +#define JVMPI_EVENT_MONITOR_CONTENDED_ENTER ((jint)54) +#define JVMPI_EVENT_MONITOR_CONTENDED_ENTERED ((jint)55) +#define JVMPI_EVENT_MONITOR_CONTENDED_EXIT ((jint)56) +#define JVMPI_EVENT_MONITOR_WAIT ((jint)57) +#define JVMPI_EVENT_MONITOR_WAITED ((jint)58) +#define JVMPI_EVENT_MONITOR_DUMP ((jint)59) + +#define JVMPI_EVENT_GC_START ((jint)60) +#define JVMPI_EVENT_GC_FINISH ((jint)61) + +#define JVMPI_MAX_EVENT_TYPE_VAL ((jint)61) + +/* old definitions, to be removed */ +#define JVMPI_EVENT_LOAD_COMPILED_METHOD ((jint)7) +#define JVMPI_EVENT_UNLOAD_COMPILED_METHOD ((jint)8) +#define JVMPI_EVENT_NEW_ARENA ((jint)48) +#define JVMPI_EVENT_DELETE_ARENA ((jint)49) +#define JVMPI_EVENT_DUMP_DATA_REQUEST ((jint)44) +#define JVMPI_EVENT_RESET_DATA_REQUEST ((jint)45) +#define JVMPI_EVENT_OBJ_ALLOC ((jint)4) +#define JVMPI_EVENT_OBJ_FREE ((jint)5) +#define JVMPI_EVENT_OBJ_MOVE ((jint)6) + +#define JVMPI_REQUESTED_EVENT ((jint)0x10000000) + + + +/* + * enabling/disabling event notification. + */ +/* results */ +#define JVMPI_SUCCESS ((jint)0) +#define JVMPI_NOT_AVAILABLE ((jint)1) +#define JVMPI_FAIL ((jint)-1) + +/* + * Thread status + */ +enum { + JVMPI_THREAD_RUNNABLE = 1, + JVMPI_THREAD_MONITOR_WAIT, + JVMPI_THREAD_CONDVAR_WAIT +}; + +#define JVMPI_THREAD_SUSPENDED 0x8000 +#define JVMPI_THREAD_INTERRUPTED 0x4000 + +/* + * Thread priority + */ +#define JVMPI_MINIMUM_PRIORITY 1 +#define JVMPI_MAXIMUM_PRIORITY 10 +#define JVMPI_NORMAL_PRIORITY 5 + +/* + * Object type constants. + */ +#define JVMPI_NORMAL_OBJECT ((jint)0) +#define JVMPI_CLASS ((jint)2) +#define JVMPI_BOOLEAN ((jint)4) +#define JVMPI_CHAR ((jint)5) +#define JVMPI_FLOAT ((jint)6) +#define JVMPI_DOUBLE ((jint)7) +#define JVMPI_BYTE ((jint)8) +#define JVMPI_SHORT ((jint)9) +#define JVMPI_INT ((jint)10) +#define JVMPI_LONG ((jint)11) + +/* + * Monitor dump constants. + */ + +#define JVMPI_MONITOR_JAVA 0x01 +#define JVMPI_MONITOR_RAW 0x02 + +/* + * Heap dump constants. + */ +#define JVMPI_GC_ROOT_UNKNOWN 0xff +#define JVMPI_GC_ROOT_JNI_GLOBAL 0x01 +#define JVMPI_GC_ROOT_JNI_LOCAL 0x02 +#define JVMPI_GC_ROOT_JAVA_FRAME 0x03 +#define JVMPI_GC_ROOT_NATIVE_STACK 0x04 +#define JVMPI_GC_ROOT_STICKY_CLASS 0x05 +#define JVMPI_GC_ROOT_THREAD_BLOCK 0x06 +#define JVMPI_GC_ROOT_MONITOR_USED 0x07 +#define JVMPI_GC_ROOT_THREAD_OBJ 0x08 + +#define JVMPI_GC_CLASS_DUMP 0x20 +#define JVMPI_GC_INSTANCE_DUMP 0x21 +#define JVMPI_GC_OBJ_ARRAY_DUMP 0x22 +#define JVMPI_GC_PRIM_ARRAY_DUMP 0x23 + +/* + * Dump levels + */ +#define JVMPI_DUMP_LEVEL_0 ((jint)0) +#define JVMPI_DUMP_LEVEL_1 ((jint)1) +#define JVMPI_DUMP_LEVEL_2 ((jint)2) + +/* Types used in dumps - + * + * u1: 1 byte + * u2: 2 bytes + * u4: 4 bytes + * u8: 8 bytes + * + * ty: u1 where: + * JVMPI_CLASS: object + * JVMPI_BOOLEAN: boolean + * JVMPI_CHAR: char + * JVMPI_FLOAT: float + * JVMPI_DOUBLE: double + * JVMPI_BYTE: byte + * JVMPI_SHORT: short + * JVMPI_INT: int + * JVMPI_LONG: long + * + * vl: values, exact type depends on the type of the value: + * JVMPI_BOOLEAN & JVMPI_BYTE: u1 + * JVMPI_SHORT & JVMPI_CHAR: u2 + * JVMPI_INT & JVMPI_FLOAT: u4 + * JVMPI_LONG & JVMPI_DOUBLE: u8 + * JVMPI_CLASS: jobjectID + */ + +/* Format of the monitor dump buffer: + * + * u1 monitor type + * + * JVMPI_MONITOR_JAVA Java monitor + * + * jobjectID object + * JNIEnv * owner thread + * u4 entry count + * u4 # of threads waiting to enter + * [JNIEnv *]* threads waiting to enter + * u4 # of threads waiting to be notified + * [JNIEnv *]* threads waiting to be notified + * + * JVMPI_MONITOR_RAW raw monitor + * + * char * name + * JVMPI_RawMonitor raw monitor + * JNIEnv * owner thread + * u4 entry count + * u4 # of threads waiting to enter + * [JNIEnv *]* threads waiting to enter + * u4 # of threads waiting to be notified + * [JNIEnv *]* threads waiting to be notified + */ + +/* Format of the heap dump buffer depends on the dump level + * specified in the JVMPI_HeapDumpArg passed to RequestEvent as arg. + * The default is JVMPI_DUMP_LEVEL_2. + * + * JVMPI_DUMP_LEVEL_0: + * + * u1 object type (JVMPI_CLASS ...) + * jobjectID object + * + * JVMPI_DUMP_LEVEL_1 and JVMPI_DUMP_LEVEL_2 use the following format: + * In the case of JVMPI_DUMP_LEVEL_1 the values of primitive fields in object + * instance dumps , the values of primitive statics in class dumps and the + * values of primitive arrays are excluded. JVMPI_DUMP_LEVEL_2 includes the + * primitive values. + * + * u1 record type + * + * JVMPI_GC_ROOT_UNKNOWN unknown root + * + * jobjectID object + * + * JVMPI_GC_ROOT_JNI_GLOBAL JNI global ref root + * + * jobjectID object + * jobject JNI global reference + * + * JVMPI_GC_ROOT_JNI_LOCAL JNI local ref + * + * jobjectID object + * JNIEnv * thread + * u4 frame # in stack trace (-1 for empty) + * + * JVMPI_GC_ROOT_JAVA_FRAME Java stack frame + * + * jobjectID object + * JNIEnv * thread + * u4 frame # in stack trace (-1 for empty) + * + * JVMPI_GC_ROOT_NATIVE_STACK Native stack + * + * jobjectID object + * JNIEnv * thread + * + * JVMPI_GC_ROOT_STICKY_CLASS System class + * + * jobjectID class object + * + * JVMPI_GC_ROOT_THREAD_BLOCK Reference from thread block + * + * jobjectID thread object + * JNIEnv * thread + * + * JVMPI_GC_ROOT_MONITOR_USED Busy monitor + * + * jobjectID object + * + * JVMPI_GC_CLASS_DUMP dump of a class object + * + * jobjectID class + * jobjectID super + * jobjectID class loader + * jobjectID signers + * jobjectID protection domain + * jobjectID class name + * void * reserved + * + * u4 instance size (in bytes) + * + * [jobjectID]* interfaces + * + * u2 size of constant pool + * [u2, constant pool index, + * ty, type, + * vl]* value + * + * [vl]* static field values + * + * JVMPI_GC_INSTANCE_DUMP dump of a normal object + * + * jobjectID object + * jobjectID class + * u4 number of bytes that follow + * [vl]* instance field values (class, followed + * by super, super's super ...) + * + * JVMPI_GC_OBJ_ARRAY_DUMP dump of an object array + * + * jobjectID array object + * u4 number of elements + * jobjectID element class + * [jobjectID]* elements + * + * JVMPI_GC_PRIM_ARRAY_DUMP dump of a primitive array + * + * jobjectID array object + * u4 number of elements + * ty element type + * [vl]* elements + * + */ + +/* Format of the dump received in JVMPI_EVENT_OBJECT_DUMP: + * All the records have JVMPI_DUMP_LEVEL_2 information. + * + * u1 record type + * + * followed by a: + * + * JVMPI_GC_CLASS_DUMP, + * JVMPI_GC_INSTANCE_DUMP, + * JVMPI_GC_OBJ_ARRAY_DUMP, or + * JVMPI_GC_PRIM_ARRAY_DUMP record. + */ + +#endif /* !_JAVASOFT_JVMPI_H_ */ diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmti.h b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmti.h new file mode 100644 index 0000000000..de24e3e995 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/jvmti.h @@ -0,0 +1,2181 @@ +#ifdef USE_PRAGMA_IDENT_HDR +#pragma ident "@(#)jvmtiLib.xsl 1.32 04/06/01 20:19:53 JVM" +#endif +/* + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + + /* AUTOMATICALLY GENERATED FILE - DO NOT EDIT */ + + + /* Include file for the Java(tm) Virtual Machine Tool Interface */ + +#ifndef _JAVA_JVMTI_H_ +#define _JAVA_JVMTI_H_ + +#include "jni.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + JVMTI_VERSION_1 = 0x30010000, + JVMTI_VERSION_1_0 = 0x30010000, + + JVMTI_VERSION = 0x30000000 + (1 * 0x10000) + (0 * 0x100) + 33 /* version: 1.0.33 */ +}; + +JNIEXPORT jint JNICALL +Agent_OnLoad(JavaVM *vm, char *options, void *reserved); + +JNIEXPORT void JNICALL +Agent_OnUnload(JavaVM *vm); + + /* Forward declaration of the environment */ + +struct _jvmtiEnv; + +struct jvmtiInterface_1_; + +#ifdef __cplusplus +typedef _jvmtiEnv jvmtiEnv; +#else +typedef const struct jvmtiInterface_1_ *jvmtiEnv; +#endif /* __cplusplus */ + +/* Derived Base Types */ + +typedef jobject jthread; +typedef jobject jthreadGroup; +typedef jlong jlocation; +struct _jrawMonitorID; +typedef struct _jrawMonitorID *jrawMonitorID; +typedef struct JNINativeInterface_ jniNativeInterface; + + /* Constants */ + + + /* Thread State Flags */ + +enum { + JVMTI_THREAD_STATE_ALIVE = 0x0001, + JVMTI_THREAD_STATE_TERMINATED = 0x0002, + JVMTI_THREAD_STATE_RUNNABLE = 0x0004, + JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER = 0x0400, + JVMTI_THREAD_STATE_WAITING = 0x0080, + JVMTI_THREAD_STATE_WAITING_INDEFINITELY = 0x0010, + JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT = 0x0020, + JVMTI_THREAD_STATE_SLEEPING = 0x0040, + JVMTI_THREAD_STATE_IN_OBJECT_WAIT = 0x0100, + JVMTI_THREAD_STATE_PARKED = 0x0200, + JVMTI_THREAD_STATE_SUSPENDED = 0x100000, + JVMTI_THREAD_STATE_INTERRUPTED = 0x200000, + JVMTI_THREAD_STATE_IN_NATIVE = 0x400000, + JVMTI_THREAD_STATE_VENDOR_1 = 0x10000000, + JVMTI_THREAD_STATE_VENDOR_2 = 0x20000000, + JVMTI_THREAD_STATE_VENDOR_3 = 0x40000000 +}; + + /* java.lang.Thread.State Conversion Masks */ + +enum { + JVMTI_JAVA_LANG_THREAD_STATE_MASK = JVMTI_THREAD_STATE_TERMINATED | JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_RUNNABLE | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_INDEFINITELY | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT, + JVMTI_JAVA_LANG_THREAD_STATE_NEW = 0, + JVMTI_JAVA_LANG_THREAD_STATE_TERMINATED = JVMTI_THREAD_STATE_TERMINATED, + JVMTI_JAVA_LANG_THREAD_STATE_RUNNABLE = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_RUNNABLE, + JVMTI_JAVA_LANG_THREAD_STATE_BLOCKED = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER, + JVMTI_JAVA_LANG_THREAD_STATE_WAITING = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_INDEFINITELY, + JVMTI_JAVA_LANG_THREAD_STATE_TIMED_WAITING = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT +}; + + /* Thread Priority Constants */ + +enum { + JVMTI_THREAD_MIN_PRIORITY = 1, + JVMTI_THREAD_NORM_PRIORITY = 5, + JVMTI_THREAD_MAX_PRIORITY = 10 +}; + + /* Heap Object Filter Enumeration */ + +typedef enum { + JVMTI_HEAP_OBJECT_TAGGED = 1, + JVMTI_HEAP_OBJECT_UNTAGGED = 2, + JVMTI_HEAP_OBJECT_EITHER = 3 +} jvmtiHeapObjectFilter; + + /* Heap Root Kind Enumeration */ + +typedef enum { + JVMTI_HEAP_ROOT_JNI_GLOBAL = 1, + JVMTI_HEAP_ROOT_SYSTEM_CLASS = 2, + JVMTI_HEAP_ROOT_MONITOR = 3, + JVMTI_HEAP_ROOT_STACK_LOCAL = 4, + JVMTI_HEAP_ROOT_JNI_LOCAL = 5, + JVMTI_HEAP_ROOT_THREAD = 6, + JVMTI_HEAP_ROOT_OTHER = 7 +} jvmtiHeapRootKind; + + /* Object Reference Enumeration */ + +typedef enum { + JVMTI_REFERENCE_CLASS = 1, + JVMTI_REFERENCE_FIELD = 2, + JVMTI_REFERENCE_ARRAY_ELEMENT = 3, + JVMTI_REFERENCE_CLASS_LOADER = 4, + JVMTI_REFERENCE_SIGNERS = 5, + JVMTI_REFERENCE_PROTECTION_DOMAIN = 6, + JVMTI_REFERENCE_INTERFACE = 7, + JVMTI_REFERENCE_STATIC_FIELD = 8, + JVMTI_REFERENCE_CONSTANT_POOL = 9 +} jvmtiObjectReferenceKind; + + /* Iteration Control Enumeration */ + +typedef enum { + JVMTI_ITERATION_CONTINUE = 1, + JVMTI_ITERATION_IGNORE = 2, + JVMTI_ITERATION_ABORT = 0 +} jvmtiIterationControl; + + /* Class Status Flags */ + +enum { + JVMTI_CLASS_STATUS_VERIFIED = 1, + JVMTI_CLASS_STATUS_PREPARED = 2, + JVMTI_CLASS_STATUS_INITIALIZED = 4, + JVMTI_CLASS_STATUS_ERROR = 8, + JVMTI_CLASS_STATUS_ARRAY = 16, + JVMTI_CLASS_STATUS_PRIMITIVE = 32 +}; + + /* Event Enable/Disable */ + +typedef enum { + JVMTI_ENABLE = 1, + JVMTI_DISABLE = 0 +} jvmtiEventMode; + + /* Extension Function/Event Parameter Types */ + +typedef enum { + JVMTI_TYPE_JBYTE = 101, + JVMTI_TYPE_JCHAR = 102, + JVMTI_TYPE_JSHORT = 103, + JVMTI_TYPE_JINT = 104, + JVMTI_TYPE_JLONG = 105, + JVMTI_TYPE_JFLOAT = 106, + JVMTI_TYPE_JDOUBLE = 107, + JVMTI_TYPE_JBOOLEAN = 108, + JVMTI_TYPE_JOBJECT = 109, + JVMTI_TYPE_JTHREAD = 110, + JVMTI_TYPE_JCLASS = 111, + JVMTI_TYPE_JVALUE = 112, + JVMTI_TYPE_JFIELDID = 113, + JVMTI_TYPE_JMETHODID = 114, + JVMTI_TYPE_CCHAR = 115, + JVMTI_TYPE_CVOID = 116, + JVMTI_TYPE_JNIENV = 117 +} jvmtiParamTypes; + + /* Extension Function/Event Parameter Kinds */ + +typedef enum { + JVMTI_KIND_IN = 91, + JVMTI_KIND_IN_PTR = 92, + JVMTI_KIND_IN_BUF = 93, + JVMTI_KIND_ALLOC_BUF = 94, + JVMTI_KIND_ALLOC_ALLOC_BUF = 95, + JVMTI_KIND_OUT = 96, + JVMTI_KIND_OUT_BUF = 97 +} jvmtiParamKind; + + /* Timer Kinds */ + +typedef enum { + JVMTI_TIMER_USER_CPU = 30, + JVMTI_TIMER_TOTAL_CPU = 31, + JVMTI_TIMER_ELAPSED = 32 +} jvmtiTimerKind; + + /* Phases of execution */ + +typedef enum { + JVMTI_PHASE_ONLOAD = 1, + JVMTI_PHASE_PRIMORDIAL = 2, + JVMTI_PHASE_START = 6, + JVMTI_PHASE_LIVE = 4, + JVMTI_PHASE_DEAD = 8 +} jvmtiPhase; + + /* Version Interface Types */ + +enum { + JVMTI_VERSION_INTERFACE_JNI = 0x00000000, + JVMTI_VERSION_INTERFACE_JVMTI = 0x30000000 +}; + + /* Version Masks */ + +enum { + JVMTI_VERSION_MASK_INTERFACE_TYPE = 0x70000000, + JVMTI_VERSION_MASK_MAJOR = 0x0FFF0000, + JVMTI_VERSION_MASK_MINOR = 0x0000FF00, + JVMTI_VERSION_MASK_MICRO = 0x000000FF +}; + + /* Version Shifts */ + +enum { + JVMTI_VERSION_SHIFT_MAJOR = 16, + JVMTI_VERSION_SHIFT_MINOR = 8, + JVMTI_VERSION_SHIFT_MICRO = 0 +}; + + /* Verbose Flag Enumeration */ + +typedef enum { + JVMTI_VERBOSE_OTHER = 0, + JVMTI_VERBOSE_GC = 1, + JVMTI_VERBOSE_CLASS = 2, + JVMTI_VERBOSE_JNI = 4 +} jvmtiVerboseFlag; + + /* JLocation Format Enumeration */ + +typedef enum { + JVMTI_JLOCATION_JVMBCI = 1, + JVMTI_JLOCATION_MACHINEPC = 2, + JVMTI_JLOCATION_OTHER = 0 +} jvmtiJlocationFormat; + + /* Errors */ + +typedef enum { + JVMTI_ERROR_NONE = 0, + JVMTI_ERROR_INVALID_THREAD = 10, + JVMTI_ERROR_INVALID_THREAD_GROUP = 11, + JVMTI_ERROR_INVALID_PRIORITY = 12, + JVMTI_ERROR_THREAD_NOT_SUSPENDED = 13, + JVMTI_ERROR_THREAD_SUSPENDED = 14, + JVMTI_ERROR_THREAD_NOT_ALIVE = 15, + JVMTI_ERROR_INVALID_OBJECT = 20, + JVMTI_ERROR_INVALID_CLASS = 21, + JVMTI_ERROR_CLASS_NOT_PREPARED = 22, + JVMTI_ERROR_INVALID_METHODID = 23, + JVMTI_ERROR_INVALID_LOCATION = 24, + JVMTI_ERROR_INVALID_FIELDID = 25, + JVMTI_ERROR_NO_MORE_FRAMES = 31, + JVMTI_ERROR_OPAQUE_FRAME = 32, + JVMTI_ERROR_TYPE_MISMATCH = 34, + JVMTI_ERROR_INVALID_SLOT = 35, + JVMTI_ERROR_DUPLICATE = 40, + JVMTI_ERROR_NOT_FOUND = 41, + JVMTI_ERROR_INVALID_MONITOR = 50, + JVMTI_ERROR_NOT_MONITOR_OWNER = 51, + JVMTI_ERROR_INTERRUPT = 52, + JVMTI_ERROR_INVALID_CLASS_FORMAT = 60, + JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION = 61, + JVMTI_ERROR_FAILS_VERIFICATION = 62, + JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED = 63, + JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED = 64, + JVMTI_ERROR_INVALID_TYPESTATE = 65, + JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED = 66, + JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED = 67, + JVMTI_ERROR_UNSUPPORTED_VERSION = 68, + JVMTI_ERROR_NAMES_DONT_MATCH = 69, + JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED = 70, + JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED = 71, + JVMTI_ERROR_UNMODIFIABLE_CLASS = 79, + JVMTI_ERROR_NOT_AVAILABLE = 98, + JVMTI_ERROR_MUST_POSSESS_CAPABILITY = 99, + JVMTI_ERROR_NULL_POINTER = 100, + JVMTI_ERROR_ABSENT_INFORMATION = 101, + JVMTI_ERROR_INVALID_EVENT_TYPE = 102, + JVMTI_ERROR_ILLEGAL_ARGUMENT = 103, + JVMTI_ERROR_NATIVE_METHOD = 104, + JVMTI_ERROR_OUT_OF_MEMORY = 110, + JVMTI_ERROR_ACCESS_DENIED = 111, + JVMTI_ERROR_WRONG_PHASE = 112, + JVMTI_ERROR_INTERNAL = 113, + JVMTI_ERROR_UNATTACHED_THREAD = 115, + JVMTI_ERROR_INVALID_ENVIRONMENT = 116, + JVMTI_ERROR_MAX = 116 +} jvmtiError; + + /* Event IDs */ + +typedef enum { + JVMTI_MIN_EVENT_TYPE_VAL = 50, + JVMTI_EVENT_VM_INIT = 50, + JVMTI_EVENT_VM_DEATH = 51, + JVMTI_EVENT_THREAD_START = 52, + JVMTI_EVENT_THREAD_END = 53, + JVMTI_EVENT_CLASS_FILE_LOAD_HOOK = 54, + JVMTI_EVENT_CLASS_LOAD = 55, + JVMTI_EVENT_CLASS_PREPARE = 56, + JVMTI_EVENT_VM_START = 57, + JVMTI_EVENT_EXCEPTION = 58, + JVMTI_EVENT_EXCEPTION_CATCH = 59, + JVMTI_EVENT_SINGLE_STEP = 60, + JVMTI_EVENT_FRAME_POP = 61, + JVMTI_EVENT_BREAKPOINT = 62, + JVMTI_EVENT_FIELD_ACCESS = 63, + JVMTI_EVENT_FIELD_MODIFICATION = 64, + JVMTI_EVENT_METHOD_ENTRY = 65, + JVMTI_EVENT_METHOD_EXIT = 66, + JVMTI_EVENT_NATIVE_METHOD_BIND = 67, + JVMTI_EVENT_COMPILED_METHOD_LOAD = 68, + JVMTI_EVENT_COMPILED_METHOD_UNLOAD = 69, + JVMTI_EVENT_DYNAMIC_CODE_GENERATED = 70, + JVMTI_EVENT_DATA_DUMP_REQUEST = 71, + JVMTI_EVENT_MONITOR_WAIT = 73, + JVMTI_EVENT_MONITOR_WAITED = 74, + JVMTI_EVENT_MONITOR_CONTENDED_ENTER = 75, + JVMTI_EVENT_MONITOR_CONTENDED_ENTERED = 76, + JVMTI_EVENT_GARBAGE_COLLECTION_START = 81, + JVMTI_EVENT_GARBAGE_COLLECTION_FINISH = 82, + JVMTI_EVENT_OBJECT_FREE = 83, + JVMTI_EVENT_VM_OBJECT_ALLOC = 84, + JVMTI_MAX_EVENT_TYPE_VAL = 84 +} jvmtiEvent; + + + /* Function Types */ + +typedef void (JNICALL *jvmtiStartFunction) + (jvmtiEnv* jvmti_env, JNIEnv* jni_env, void* arg); + +typedef jvmtiIterationControl (JNICALL *jvmtiHeapObjectCallback) + (jlong class_tag, jlong size, jlong* tag_ptr, void* user_data); + +typedef jvmtiIterationControl (JNICALL *jvmtiHeapRootCallback) + (jvmtiHeapRootKind root_kind, jlong class_tag, jlong size, jlong* tag_ptr, void* user_data); + +typedef jvmtiIterationControl (JNICALL *jvmtiStackReferenceCallback) + (jvmtiHeapRootKind root_kind, jlong class_tag, jlong size, jlong* tag_ptr, jlong thread_tag, jint depth, jmethodID method, jint slot, void* user_data); + +typedef jvmtiIterationControl (JNICALL *jvmtiObjectReferenceCallback) + (jvmtiObjectReferenceKind reference_kind, jlong class_tag, jlong size, jlong* tag_ptr, jlong referrer_tag, jint referrer_index, void* user_data); + +typedef jvmtiError (JNICALL *jvmtiExtensionFunction) + (jvmtiEnv* jvmti_env, ...); + +typedef void (JNICALL *jvmtiExtensionEvent) + (jvmtiEnv* jvmti_env, ...); + + + /* Structure Types */ + +typedef struct { + char* name; + jint priority; + jboolean is_daemon; + jthreadGroup thread_group; + jobject context_class_loader; +} jvmtiThreadInfo; + +typedef struct { + jthreadGroup parent; + char* name; + jint max_priority; + jboolean is_daemon; +} jvmtiThreadGroupInfo; + +typedef struct { + jmethodID method; + jlocation location; +} jvmtiFrameInfo; + +typedef struct { + jthread thread; + jint state; + jvmtiFrameInfo* frame_buffer; + jint frame_count; +} jvmtiStackInfo; + +typedef struct { + jclass klass; + jint class_byte_count; + const unsigned char* class_bytes; +} jvmtiClassDefinition; + +typedef struct { + jthread owner; + jint entry_count; + jint waiter_count; + jthread* waiters; + jint notify_waiter_count; + jthread* notify_waiters; +} jvmtiMonitorUsage; + +typedef struct { + jlocation start_location; + jint line_number; +} jvmtiLineNumberEntry; + +typedef struct { + jlocation start_location; + jint length; + char* name; + char* signature; + char* generic_signature; + jint slot; +} jvmtiLocalVariableEntry; + +typedef struct { + char* name; + jvmtiParamKind kind; + jvmtiParamTypes base_type; + jboolean null_ok; +} jvmtiParamInfo; + +typedef struct { + jvmtiExtensionFunction func; + char* id; + char* short_description; + jint param_count; + jvmtiParamInfo* params; + jint error_count; + jvmtiError* errors; +} jvmtiExtensionFunctionInfo; + +typedef struct { + jint extension_event_index; + char* id; + char* short_description; + jint param_count; + jvmtiParamInfo* params; +} jvmtiExtensionEventInfo; + +typedef struct { + jlong max_value; + jboolean may_skip_forward; + jboolean may_skip_backward; + jvmtiTimerKind kind; + jlong reserved1; + jlong reserved2; +} jvmtiTimerInfo; + +typedef struct { + const void* start_address; + jlocation location; +} jvmtiAddrLocationMap; + +typedef struct { + unsigned int can_tag_objects : 1; + unsigned int can_generate_field_modification_events : 1; + unsigned int can_generate_field_access_events : 1; + unsigned int can_get_bytecodes : 1; + unsigned int can_get_synthetic_attribute : 1; + unsigned int can_get_owned_monitor_info : 1; + unsigned int can_get_current_contended_monitor : 1; + unsigned int can_get_monitor_info : 1; + unsigned int can_pop_frame : 1; + unsigned int can_redefine_classes : 1; + unsigned int can_signal_thread : 1; + unsigned int can_get_source_file_name : 1; + unsigned int can_get_line_numbers : 1; + unsigned int can_get_source_debug_extension : 1; + unsigned int can_access_local_variables : 1; + unsigned int can_maintain_original_method_order : 1; + unsigned int can_generate_single_step_events : 1; + unsigned int can_generate_exception_events : 1; + unsigned int can_generate_frame_pop_events : 1; + unsigned int can_generate_breakpoint_events : 1; + unsigned int can_suspend : 1; + unsigned int can_redefine_any_class : 1; + unsigned int can_get_current_thread_cpu_time : 1; + unsigned int can_get_thread_cpu_time : 1; + unsigned int can_generate_method_entry_events : 1; + unsigned int can_generate_method_exit_events : 1; + unsigned int can_generate_all_class_hook_events : 1; + unsigned int can_generate_compiled_method_load_events : 1; + unsigned int can_generate_monitor_events : 1; + unsigned int can_generate_vm_object_alloc_events : 1; + unsigned int can_generate_native_method_bind_events : 1; + unsigned int can_generate_garbage_collection_events : 1; + unsigned int can_generate_object_free_events : 1; + unsigned int : 15; + unsigned int : 16; + unsigned int : 16; + unsigned int : 16; + unsigned int : 16; + unsigned int : 16; +} jvmtiCapabilities; + + + /* Event Definitions */ + +typedef void (JNICALL *jvmtiEventReserved)(void); + + +typedef void (JNICALL *jvmtiEventBreakpoint) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jlocation location); + +typedef void (JNICALL *jvmtiEventClassFileLoadHook) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jclass class_being_redefined, + jobject loader, + const char* name, + jobject protection_domain, + jint class_data_len, + const unsigned char* class_data, + jint* new_class_data_len, + unsigned char** new_class_data); + +typedef void (JNICALL *jvmtiEventClassLoad) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jclass klass); + +typedef void (JNICALL *jvmtiEventClassPrepare) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jclass klass); + +typedef void (JNICALL *jvmtiEventCompiledMethodLoad) + (jvmtiEnv *jvmti_env, + jmethodID method, + jint code_size, + const void* code_addr, + jint map_length, + const jvmtiAddrLocationMap* map, + const void* compile_info); + +typedef void (JNICALL *jvmtiEventCompiledMethodUnload) + (jvmtiEnv *jvmti_env, + jmethodID method, + const void* code_addr); + +typedef void (JNICALL *jvmtiEventDataDumpRequest) + (jvmtiEnv *jvmti_env); + +typedef void (JNICALL *jvmtiEventDynamicCodeGenerated) + (jvmtiEnv *jvmti_env, + const char* name, + const void* address, + jint length); + +typedef void (JNICALL *jvmtiEventException) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jlocation location, + jobject exception, + jmethodID catch_method, + jlocation catch_location); + +typedef void (JNICALL *jvmtiEventExceptionCatch) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jlocation location, + jobject exception); + +typedef void (JNICALL *jvmtiEventFieldAccess) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jlocation location, + jclass field_klass, + jobject object, + jfieldID field); + +typedef void (JNICALL *jvmtiEventFieldModification) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jlocation location, + jclass field_klass, + jobject object, + jfieldID field, + char signature_type, + jvalue new_value); + +typedef void (JNICALL *jvmtiEventFramePop) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jboolean was_popped_by_exception); + +typedef void (JNICALL *jvmtiEventGarbageCollectionFinish) + (jvmtiEnv *jvmti_env); + +typedef void (JNICALL *jvmtiEventGarbageCollectionStart) + (jvmtiEnv *jvmti_env); + +typedef void (JNICALL *jvmtiEventMethodEntry) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method); + +typedef void (JNICALL *jvmtiEventMethodExit) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jboolean was_popped_by_exception, + jvalue return_value); + +typedef void (JNICALL *jvmtiEventMonitorContendedEnter) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jobject object); + +typedef void (JNICALL *jvmtiEventMonitorContendedEntered) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jobject object); + +typedef void (JNICALL *jvmtiEventMonitorWait) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jobject object, + jlong timeout); + +typedef void (JNICALL *jvmtiEventMonitorWaited) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jobject object, + jboolean timed_out); + +typedef void (JNICALL *jvmtiEventNativeMethodBind) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + void* address, + void** new_address_ptr); + +typedef void (JNICALL *jvmtiEventObjectFree) + (jvmtiEnv *jvmti_env, + jlong tag); + +typedef void (JNICALL *jvmtiEventSingleStep) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jlocation location); + +typedef void (JNICALL *jvmtiEventThreadEnd) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread); + +typedef void (JNICALL *jvmtiEventThreadStart) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread); + +typedef void (JNICALL *jvmtiEventVMDeath) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env); + +typedef void (JNICALL *jvmtiEventVMInit) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread); + +typedef void (JNICALL *jvmtiEventVMObjectAlloc) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jobject object, + jclass object_klass, + jlong size); + +typedef void (JNICALL *jvmtiEventVMStart) + (jvmtiEnv *jvmti_env, + JNIEnv* jni_env); + + /* Event Callback Structure */ + +typedef struct { + /* 50 : VM Initialization Event */ + jvmtiEventVMInit VMInit; + /* 51 : VM Death Event */ + jvmtiEventVMDeath VMDeath; + /* 52 : Thread Start */ + jvmtiEventThreadStart ThreadStart; + /* 53 : Thread End */ + jvmtiEventThreadEnd ThreadEnd; + /* 54 : Class File Load Hook */ + jvmtiEventClassFileLoadHook ClassFileLoadHook; + /* 55 : Class Load */ + jvmtiEventClassLoad ClassLoad; + /* 56 : Class Prepare */ + jvmtiEventClassPrepare ClassPrepare; + /* 57 : VM Start Event */ + jvmtiEventVMStart VMStart; + /* 58 : Exception */ + jvmtiEventException Exception; + /* 59 : Exception Catch */ + jvmtiEventExceptionCatch ExceptionCatch; + /* 60 : Single Step */ + jvmtiEventSingleStep SingleStep; + /* 61 : Frame Pop */ + jvmtiEventFramePop FramePop; + /* 62 : Breakpoint */ + jvmtiEventBreakpoint Breakpoint; + /* 63 : Field Access */ + jvmtiEventFieldAccess FieldAccess; + /* 64 : Field Modification */ + jvmtiEventFieldModification FieldModification; + /* 65 : Method Entry */ + jvmtiEventMethodEntry MethodEntry; + /* 66 : Method Exit */ + jvmtiEventMethodExit MethodExit; + /* 67 : Native Method Bind */ + jvmtiEventNativeMethodBind NativeMethodBind; + /* 68 : Compiled Method Load */ + jvmtiEventCompiledMethodLoad CompiledMethodLoad; + /* 69 : Compiled Method Unload */ + jvmtiEventCompiledMethodUnload CompiledMethodUnload; + /* 70 : Dynamic Code Generated */ + jvmtiEventDynamicCodeGenerated DynamicCodeGenerated; + /* 71 : Data Dump Request */ + jvmtiEventDataDumpRequest DataDumpRequest; + /* 72 */ + jvmtiEventReserved reserved72; + /* 73 : Monitor Wait */ + jvmtiEventMonitorWait MonitorWait; + /* 74 : Monitor Waited */ + jvmtiEventMonitorWaited MonitorWaited; + /* 75 : Monitor Contended Enter */ + jvmtiEventMonitorContendedEnter MonitorContendedEnter; + /* 76 : Monitor Contended Entered */ + jvmtiEventMonitorContendedEntered MonitorContendedEntered; + /* 77 */ + jvmtiEventReserved reserved77; + /* 78 */ + jvmtiEventReserved reserved78; + /* 79 */ + jvmtiEventReserved reserved79; + /* 80 */ + jvmtiEventReserved reserved80; + /* 81 : Garbage Collection Start */ + jvmtiEventGarbageCollectionStart GarbageCollectionStart; + /* 82 : Garbage Collection Finish */ + jvmtiEventGarbageCollectionFinish GarbageCollectionFinish; + /* 83 : Object Free */ + jvmtiEventObjectFree ObjectFree; + /* 84 : VM Object Allocation */ + jvmtiEventVMObjectAlloc VMObjectAlloc; +} jvmtiEventCallbacks; + + + /* Function Interface */ + +typedef struct jvmtiInterface_1_ { + + /* 1 : RESERVED */ + void *reserved1; + + /* 2 : Set Event Notification Mode */ + jvmtiError (JNICALL *SetEventNotificationMode) (jvmtiEnv* env, + jvmtiEventMode mode, + jvmtiEvent event_type, + jthread event_thread, + ...); + + /* 3 : RESERVED */ + void *reserved3; + + /* 4 : Get All Threads */ + jvmtiError (JNICALL *GetAllThreads) (jvmtiEnv* env, + jint* threads_count_ptr, + jthread** threads_ptr); + + /* 5 : Suspend Thread */ + jvmtiError (JNICALL *SuspendThread) (jvmtiEnv* env, + jthread thread); + + /* 6 : Resume Thread */ + jvmtiError (JNICALL *ResumeThread) (jvmtiEnv* env, + jthread thread); + + /* 7 : Stop Thread */ + jvmtiError (JNICALL *StopThread) (jvmtiEnv* env, + jthread thread, + jobject exception); + + /* 8 : Interrupt Thread */ + jvmtiError (JNICALL *InterruptThread) (jvmtiEnv* env, + jthread thread); + + /* 9 : Get Thread Info */ + jvmtiError (JNICALL *GetThreadInfo) (jvmtiEnv* env, + jthread thread, + jvmtiThreadInfo* info_ptr); + + /* 10 : Get Owned Monitor Info */ + jvmtiError (JNICALL *GetOwnedMonitorInfo) (jvmtiEnv* env, + jthread thread, + jint* owned_monitor_count_ptr, + jobject** owned_monitors_ptr); + + /* 11 : Get Current Contended Monitor */ + jvmtiError (JNICALL *GetCurrentContendedMonitor) (jvmtiEnv* env, + jthread thread, + jobject* monitor_ptr); + + /* 12 : Run Agent Thread */ + jvmtiError (JNICALL *RunAgentThread) (jvmtiEnv* env, + jthread thread, + jvmtiStartFunction proc, + const void* arg, + jint priority); + + /* 13 : Get Top Thread Groups */ + jvmtiError (JNICALL *GetTopThreadGroups) (jvmtiEnv* env, + jint* group_count_ptr, + jthreadGroup** groups_ptr); + + /* 14 : Get Thread Group Info */ + jvmtiError (JNICALL *GetThreadGroupInfo) (jvmtiEnv* env, + jthreadGroup group, + jvmtiThreadGroupInfo* info_ptr); + + /* 15 : Get Thread Group Children */ + jvmtiError (JNICALL *GetThreadGroupChildren) (jvmtiEnv* env, + jthreadGroup group, + jint* thread_count_ptr, + jthread** threads_ptr, + jint* group_count_ptr, + jthreadGroup** groups_ptr); + + /* 16 : Get Frame Count */ + jvmtiError (JNICALL *GetFrameCount) (jvmtiEnv* env, + jthread thread, + jint* count_ptr); + + /* 17 : Get Thread State */ + jvmtiError (JNICALL *GetThreadState) (jvmtiEnv* env, + jthread thread, + jint* thread_state_ptr); + + /* 18 : RESERVED */ + void *reserved18; + + /* 19 : Get Frame Location */ + jvmtiError (JNICALL *GetFrameLocation) (jvmtiEnv* env, + jthread thread, + jint depth, + jmethodID* method_ptr, + jlocation* location_ptr); + + /* 20 : Notify Frame Pop */ + jvmtiError (JNICALL *NotifyFramePop) (jvmtiEnv* env, + jthread thread, + jint depth); + + /* 21 : Get Local Variable - Object */ + jvmtiError (JNICALL *GetLocalObject) (jvmtiEnv* env, + jthread thread, + jint depth, + jint slot, + jobject* value_ptr); + + /* 22 : Get Local Variable - Int */ + jvmtiError (JNICALL *GetLocalInt) (jvmtiEnv* env, + jthread thread, + jint depth, + jint slot, + jint* value_ptr); + + /* 23 : Get Local Variable - Long */ + jvmtiError (JNICALL *GetLocalLong) (jvmtiEnv* env, + jthread thread, + jint depth, + jint slot, + jlong* value_ptr); + + /* 24 : Get Local Variable - Float */ + jvmtiError (JNICALL *GetLocalFloat) (jvmtiEnv* env, + jthread thread, + jint depth, + jint slot, + jfloat* value_ptr); + + /* 25 : Get Local Variable - Double */ + jvmtiError (JNICALL *GetLocalDouble) (jvmtiEnv* env, + jthread thread, + jint depth, + jint slot, + jdouble* value_ptr); + + /* 26 : Set Local Variable - Object */ + jvmtiError (JNICALL *SetLocalObject) (jvmtiEnv* env, + jthread thread, + jint depth, + jint slot, + jobject value); + + /* 27 : Set Local Variable - Int */ + jvmtiError (JNICALL *SetLocalInt) (jvmtiEnv* env, + jthread thread, + jint depth, + jint slot, + jint value); + + /* 28 : Set Local Variable - Long */ + jvmtiError (JNICALL *SetLocalLong) (jvmtiEnv* env, + jthread thread, + jint depth, + jint slot, + jlong value); + + /* 29 : Set Local Variable - Float */ + jvmtiError (JNICALL *SetLocalFloat) (jvmtiEnv* env, + jthread thread, + jint depth, + jint slot, + jfloat value); + + /* 30 : Set Local Variable - Double */ + jvmtiError (JNICALL *SetLocalDouble) (jvmtiEnv* env, + jthread thread, + jint depth, + jint slot, + jdouble value); + + /* 31 : Create Raw Monitor */ + jvmtiError (JNICALL *CreateRawMonitor) (jvmtiEnv* env, + const char* name, + jrawMonitorID* monitor_ptr); + + /* 32 : Destroy Raw Monitor */ + jvmtiError (JNICALL *DestroyRawMonitor) (jvmtiEnv* env, + jrawMonitorID monitor); + + /* 33 : Raw Monitor Enter */ + jvmtiError (JNICALL *RawMonitorEnter) (jvmtiEnv* env, + jrawMonitorID monitor); + + /* 34 : Raw Monitor Exit */ + jvmtiError (JNICALL *RawMonitorExit) (jvmtiEnv* env, + jrawMonitorID monitor); + + /* 35 : Raw Monitor Wait */ + jvmtiError (JNICALL *RawMonitorWait) (jvmtiEnv* env, + jrawMonitorID monitor, + jlong millis); + + /* 36 : Raw Monitor Notify */ + jvmtiError (JNICALL *RawMonitorNotify) (jvmtiEnv* env, + jrawMonitorID monitor); + + /* 37 : Raw Monitor Notify All */ + jvmtiError (JNICALL *RawMonitorNotifyAll) (jvmtiEnv* env, + jrawMonitorID monitor); + + /* 38 : Set Breakpoint */ + jvmtiError (JNICALL *SetBreakpoint) (jvmtiEnv* env, + jmethodID method, + jlocation location); + + /* 39 : Clear Breakpoint */ + jvmtiError (JNICALL *ClearBreakpoint) (jvmtiEnv* env, + jmethodID method, + jlocation location); + + /* 40 : RESERVED */ + void *reserved40; + + /* 41 : Set Field Access Watch */ + jvmtiError (JNICALL *SetFieldAccessWatch) (jvmtiEnv* env, + jclass klass, + jfieldID field); + + /* 42 : Clear Field Access Watch */ + jvmtiError (JNICALL *ClearFieldAccessWatch) (jvmtiEnv* env, + jclass klass, + jfieldID field); + + /* 43 : Set Field Modification Watch */ + jvmtiError (JNICALL *SetFieldModificationWatch) (jvmtiEnv* env, + jclass klass, + jfieldID field); + + /* 44 : Clear Field Modification Watch */ + jvmtiError (JNICALL *ClearFieldModificationWatch) (jvmtiEnv* env, + jclass klass, + jfieldID field); + + /* 45 : RESERVED */ + void *reserved45; + + /* 46 : Allocate */ + jvmtiError (JNICALL *Allocate) (jvmtiEnv* env, + jlong size, + unsigned char** mem_ptr); + + /* 47 : Deallocate */ + jvmtiError (JNICALL *Deallocate) (jvmtiEnv* env, + unsigned char* mem); + + /* 48 : Get Class Signature */ + jvmtiError (JNICALL *GetClassSignature) (jvmtiEnv* env, + jclass klass, + char** signature_ptr, + char** generic_ptr); + + /* 49 : Get Class Status */ + jvmtiError (JNICALL *GetClassStatus) (jvmtiEnv* env, + jclass klass, + jint* status_ptr); + + /* 50 : Get Source File Name */ + jvmtiError (JNICALL *GetSourceFileName) (jvmtiEnv* env, + jclass klass, + char** source_name_ptr); + + /* 51 : Get Class Modifiers */ + jvmtiError (JNICALL *GetClassModifiers) (jvmtiEnv* env, + jclass klass, + jint* modifiers_ptr); + + /* 52 : Get Class Methods */ + jvmtiError (JNICALL *GetClassMethods) (jvmtiEnv* env, + jclass klass, + jint* method_count_ptr, + jmethodID** methods_ptr); + + /* 53 : Get Class Fields */ + jvmtiError (JNICALL *GetClassFields) (jvmtiEnv* env, + jclass klass, + jint* field_count_ptr, + jfieldID** fields_ptr); + + /* 54 : Get Implemented Interfaces */ + jvmtiError (JNICALL *GetImplementedInterfaces) (jvmtiEnv* env, + jclass klass, + jint* interface_count_ptr, + jclass** interfaces_ptr); + + /* 55 : Is Interface */ + jvmtiError (JNICALL *IsInterface) (jvmtiEnv* env, + jclass klass, + jboolean* is_interface_ptr); + + /* 56 : Is Array Class */ + jvmtiError (JNICALL *IsArrayClass) (jvmtiEnv* env, + jclass klass, + jboolean* is_array_class_ptr); + + /* 57 : Get Class Loader */ + jvmtiError (JNICALL *GetClassLoader) (jvmtiEnv* env, + jclass klass, + jobject* classloader_ptr); + + /* 58 : Get Object Hash Code */ + jvmtiError (JNICALL *GetObjectHashCode) (jvmtiEnv* env, + jobject object, + jint* hash_code_ptr); + + /* 59 : Get Object Monitor Usage */ + jvmtiError (JNICALL *GetObjectMonitorUsage) (jvmtiEnv* env, + jobject object, + jvmtiMonitorUsage* info_ptr); + + /* 60 : Get Field Name (and Signature) */ + jvmtiError (JNICALL *GetFieldName) (jvmtiEnv* env, + jclass klass, + jfieldID field, + char** name_ptr, + char** signature_ptr, + char** generic_ptr); + + /* 61 : Get Field Declaring Class */ + jvmtiError (JNICALL *GetFieldDeclaringClass) (jvmtiEnv* env, + jclass klass, + jfieldID field, + jclass* declaring_class_ptr); + + /* 62 : Get Field Modifiers */ + jvmtiError (JNICALL *GetFieldModifiers) (jvmtiEnv* env, + jclass klass, + jfieldID field, + jint* modifiers_ptr); + + /* 63 : Is Field Synthetic */ + jvmtiError (JNICALL *IsFieldSynthetic) (jvmtiEnv* env, + jclass klass, + jfieldID field, + jboolean* is_synthetic_ptr); + + /* 64 : Get Method Name (and Signature) */ + jvmtiError (JNICALL *GetMethodName) (jvmtiEnv* env, + jmethodID method, + char** name_ptr, + char** signature_ptr, + char** generic_ptr); + + /* 65 : Get Method Declaring Class */ + jvmtiError (JNICALL *GetMethodDeclaringClass) (jvmtiEnv* env, + jmethodID method, + jclass* declaring_class_ptr); + + /* 66 : Get Method Modifiers */ + jvmtiError (JNICALL *GetMethodModifiers) (jvmtiEnv* env, + jmethodID method, + jint* modifiers_ptr); + + /* 67 : RESERVED */ + void *reserved67; + + /* 68 : Get Max Locals */ + jvmtiError (JNICALL *GetMaxLocals) (jvmtiEnv* env, + jmethodID method, + jint* max_ptr); + + /* 69 : Get Arguments Size */ + jvmtiError (JNICALL *GetArgumentsSize) (jvmtiEnv* env, + jmethodID method, + jint* size_ptr); + + /* 70 : Get Line Number Table */ + jvmtiError (JNICALL *GetLineNumberTable) (jvmtiEnv* env, + jmethodID method, + jint* entry_count_ptr, + jvmtiLineNumberEntry** table_ptr); + + /* 71 : Get Method Location */ + jvmtiError (JNICALL *GetMethodLocation) (jvmtiEnv* env, + jmethodID method, + jlocation* start_location_ptr, + jlocation* end_location_ptr); + + /* 72 : Get Local Variable Table */ + jvmtiError (JNICALL *GetLocalVariableTable) (jvmtiEnv* env, + jmethodID method, + jint* entry_count_ptr, + jvmtiLocalVariableEntry** table_ptr); + + /* 73 : RESERVED */ + void *reserved73; + + /* 74 : RESERVED */ + void *reserved74; + + /* 75 : Get Bytecodes */ + jvmtiError (JNICALL *GetBytecodes) (jvmtiEnv* env, + jmethodID method, + jint* bytecode_count_ptr, + unsigned char** bytecodes_ptr); + + /* 76 : Is Method Native */ + jvmtiError (JNICALL *IsMethodNative) (jvmtiEnv* env, + jmethodID method, + jboolean* is_native_ptr); + + /* 77 : Is Method Synthetic */ + jvmtiError (JNICALL *IsMethodSynthetic) (jvmtiEnv* env, + jmethodID method, + jboolean* is_synthetic_ptr); + + /* 78 : Get Loaded Classes */ + jvmtiError (JNICALL *GetLoadedClasses) (jvmtiEnv* env, + jint* class_count_ptr, + jclass** classes_ptr); + + /* 79 : Get Classloader Classes */ + jvmtiError (JNICALL *GetClassLoaderClasses) (jvmtiEnv* env, + jobject initiating_loader, + jint* class_count_ptr, + jclass** classes_ptr); + + /* 80 : Pop Frame */ + jvmtiError (JNICALL *PopFrame) (jvmtiEnv* env, + jthread thread); + + /* 81 : RESERVED */ + void *reserved81; + + /* 82 : RESERVED */ + void *reserved82; + + /* 83 : RESERVED */ + void *reserved83; + + /* 84 : RESERVED */ + void *reserved84; + + /* 85 : RESERVED */ + void *reserved85; + + /* 86 : RESERVED */ + void *reserved86; + + /* 87 : Redefine Classes */ + jvmtiError (JNICALL *RedefineClasses) (jvmtiEnv* env, + jint class_count, + const jvmtiClassDefinition* class_definitions); + + /* 88 : Get Version Number */ + jvmtiError (JNICALL *GetVersionNumber) (jvmtiEnv* env, + jint* version_ptr); + + /* 89 : Get Capabilities */ + jvmtiError (JNICALL *GetCapabilities) (jvmtiEnv* env, + jvmtiCapabilities* capabilities_ptr); + + /* 90 : Get Source Debug Extension */ + jvmtiError (JNICALL *GetSourceDebugExtension) (jvmtiEnv* env, + jclass klass, + char** source_debug_extension_ptr); + + /* 91 : Is Method Obsolete */ + jvmtiError (JNICALL *IsMethodObsolete) (jvmtiEnv* env, + jmethodID method, + jboolean* is_obsolete_ptr); + + /* 92 : Suspend Thread List */ + jvmtiError (JNICALL *SuspendThreadList) (jvmtiEnv* env, + jint request_count, + const jthread* request_list, + jvmtiError* results); + + /* 93 : Resume Thread List */ + jvmtiError (JNICALL *ResumeThreadList) (jvmtiEnv* env, + jint request_count, + const jthread* request_list, + jvmtiError* results); + + /* 94 : RESERVED */ + void *reserved94; + + /* 95 : RESERVED */ + void *reserved95; + + /* 96 : RESERVED */ + void *reserved96; + + /* 97 : RESERVED */ + void *reserved97; + + /* 98 : RESERVED */ + void *reserved98; + + /* 99 : RESERVED */ + void *reserved99; + + /* 100 : Get All Stack Traces */ + jvmtiError (JNICALL *GetAllStackTraces) (jvmtiEnv* env, + jint max_frame_count, + jvmtiStackInfo** stack_info_ptr, + jint* thread_count_ptr); + + /* 101 : Get Thread List Stack Traces */ + jvmtiError (JNICALL *GetThreadListStackTraces) (jvmtiEnv* env, + jint thread_count, + const jthread* thread_list, + jint max_frame_count, + jvmtiStackInfo** stack_info_ptr); + + /* 102 : Get Thread Local Storage */ + jvmtiError (JNICALL *GetThreadLocalStorage) (jvmtiEnv* env, + jthread thread, + void** data_ptr); + + /* 103 : Set Thread Local Storage */ + jvmtiError (JNICALL *SetThreadLocalStorage) (jvmtiEnv* env, + jthread thread, + const void* data); + + /* 104 : Get Stack Trace */ + jvmtiError (JNICALL *GetStackTrace) (jvmtiEnv* env, + jthread thread, + jint start_depth, + jint max_frame_count, + jvmtiFrameInfo* frame_buffer, + jint* count_ptr); + + /* 105 : RESERVED */ + void *reserved105; + + /* 106 : Get Tag */ + jvmtiError (JNICALL *GetTag) (jvmtiEnv* env, + jobject object, + jlong* tag_ptr); + + /* 107 : Set Tag */ + jvmtiError (JNICALL *SetTag) (jvmtiEnv* env, + jobject object, + jlong tag); + + /* 108 : Force Garbage Collection */ + jvmtiError (JNICALL *ForceGarbageCollection) (jvmtiEnv* env); + + /* 109 : Iterate Over Objects Reachable From Object */ + jvmtiError (JNICALL *IterateOverObjectsReachableFromObject) (jvmtiEnv* env, + jobject object, + jvmtiObjectReferenceCallback object_reference_callback, + void* user_data); + + /* 110 : Iterate Over Reachable Objects */ + jvmtiError (JNICALL *IterateOverReachableObjects) (jvmtiEnv* env, + jvmtiHeapRootCallback heap_root_callback, + jvmtiStackReferenceCallback stack_ref_callback, + jvmtiObjectReferenceCallback object_ref_callback, + void* user_data); + + /* 111 : Iterate Over Heap */ + jvmtiError (JNICALL *IterateOverHeap) (jvmtiEnv* env, + jvmtiHeapObjectFilter object_filter, + jvmtiHeapObjectCallback heap_object_callback, + void* user_data); + + /* 112 : Iterate Over Instances Of Class */ + jvmtiError (JNICALL *IterateOverInstancesOfClass) (jvmtiEnv* env, + jclass klass, + jvmtiHeapObjectFilter object_filter, + jvmtiHeapObjectCallback heap_object_callback, + void* user_data); + + /* 113 : RESERVED */ + void *reserved113; + + /* 114 : Get Objects With Tags */ + jvmtiError (JNICALL *GetObjectsWithTags) (jvmtiEnv* env, + jint tag_count, + const jlong* tags, + jint* count_ptr, + jobject** object_result_ptr, + jlong** tag_result_ptr); + + /* 115 : RESERVED */ + void *reserved115; + + /* 116 : RESERVED */ + void *reserved116; + + /* 117 : RESERVED */ + void *reserved117; + + /* 118 : RESERVED */ + void *reserved118; + + /* 119 : RESERVED */ + void *reserved119; + + /* 120 : Set JNI Function Table */ + jvmtiError (JNICALL *SetJNIFunctionTable) (jvmtiEnv* env, + const jniNativeInterface* function_table); + + /* 121 : Get JNI Function Table */ + jvmtiError (JNICALL *GetJNIFunctionTable) (jvmtiEnv* env, + jniNativeInterface** function_table); + + /* 122 : Set Event Callbacks */ + jvmtiError (JNICALL *SetEventCallbacks) (jvmtiEnv* env, + const jvmtiEventCallbacks* callbacks, + jint size_of_callbacks); + + /* 123 : Generate Events */ + jvmtiError (JNICALL *GenerateEvents) (jvmtiEnv* env, + jvmtiEvent event_type); + + /* 124 : Get Extension Functions */ + jvmtiError (JNICALL *GetExtensionFunctions) (jvmtiEnv* env, + jint* extension_count_ptr, + jvmtiExtensionFunctionInfo** extensions); + + /* 125 : Get Extension Events */ + jvmtiError (JNICALL *GetExtensionEvents) (jvmtiEnv* env, + jint* extension_count_ptr, + jvmtiExtensionEventInfo** extensions); + + /* 126 : Set Extension Event Callback */ + jvmtiError (JNICALL *SetExtensionEventCallback) (jvmtiEnv* env, + jint extension_event_index, + jvmtiExtensionEvent callback); + + /* 127 : Dispose Environment */ + jvmtiError (JNICALL *DisposeEnvironment) (jvmtiEnv* env); + + /* 128 : Get Error Name */ + jvmtiError (JNICALL *GetErrorName) (jvmtiEnv* env, + jvmtiError error, + char** name_ptr); + + /* 129 : Get JLocation Format */ + jvmtiError (JNICALL *GetJLocationFormat) (jvmtiEnv* env, + jvmtiJlocationFormat* format_ptr); + + /* 130 : Get System Properties */ + jvmtiError (JNICALL *GetSystemProperties) (jvmtiEnv* env, + jint* count_ptr, + char*** property_ptr); + + /* 131 : Get System Property */ + jvmtiError (JNICALL *GetSystemProperty) (jvmtiEnv* env, + const char* property, + char** value_ptr); + + /* 132 : Set System Property */ + jvmtiError (JNICALL *SetSystemProperty) (jvmtiEnv* env, + const char* property, + const char* value); + + /* 133 : Get Phase */ + jvmtiError (JNICALL *GetPhase) (jvmtiEnv* env, + jvmtiPhase* phase_ptr); + + /* 134 : Get Current Thread CPU Timer Information */ + jvmtiError (JNICALL *GetCurrentThreadCpuTimerInfo) (jvmtiEnv* env, + jvmtiTimerInfo* info_ptr); + + /* 135 : Get Current Thread CPU Time */ + jvmtiError (JNICALL *GetCurrentThreadCpuTime) (jvmtiEnv* env, + jlong* nanos_ptr); + + /* 136 : Get Thread CPU Timer Information */ + jvmtiError (JNICALL *GetThreadCpuTimerInfo) (jvmtiEnv* env, + jvmtiTimerInfo* info_ptr); + + /* 137 : Get Thread CPU Time */ + jvmtiError (JNICALL *GetThreadCpuTime) (jvmtiEnv* env, + jthread thread, + jlong* nanos_ptr); + + /* 138 : Get Timer Information */ + jvmtiError (JNICALL *GetTimerInfo) (jvmtiEnv* env, + jvmtiTimerInfo* info_ptr); + + /* 139 : Get Time */ + jvmtiError (JNICALL *GetTime) (jvmtiEnv* env, + jlong* nanos_ptr); + + /* 140 : Get Potential Capabilities */ + jvmtiError (JNICALL *GetPotentialCapabilities) (jvmtiEnv* env, + jvmtiCapabilities* capabilities_ptr); + + /* 141 : RESERVED */ + void *reserved141; + + /* 142 : Add Capabilities */ + jvmtiError (JNICALL *AddCapabilities) (jvmtiEnv* env, + const jvmtiCapabilities* capabilities_ptr); + + /* 143 : Relinquish Capabilities */ + jvmtiError (JNICALL *RelinquishCapabilities) (jvmtiEnv* env, + const jvmtiCapabilities* capabilities_ptr); + + /* 144 : Get Available Processors */ + jvmtiError (JNICALL *GetAvailableProcessors) (jvmtiEnv* env, + jint* processor_count_ptr); + + /* 145 : RESERVED */ + void *reserved145; + + /* 146 : RESERVED */ + void *reserved146; + + /* 147 : Get Environment Local Storage */ + jvmtiError (JNICALL *GetEnvironmentLocalStorage) (jvmtiEnv* env, + void** data_ptr); + + /* 148 : Set Environment Local Storage */ + jvmtiError (JNICALL *SetEnvironmentLocalStorage) (jvmtiEnv* env, + const void* data); + + /* 149 : Add To Bootstrap Class Loader Search */ + jvmtiError (JNICALL *AddToBootstrapClassLoaderSearch) (jvmtiEnv* env, + const char* segment); + + /* 150 : Set Verbose Flag */ + jvmtiError (JNICALL *SetVerboseFlag) (jvmtiEnv* env, + jvmtiVerboseFlag flag, + jboolean value); + + /* 151 : RESERVED */ + void *reserved151; + + /* 152 : RESERVED */ + void *reserved152; + + /* 153 : RESERVED */ + void *reserved153; + + /* 154 : Get Object Size */ + jvmtiError (JNICALL *GetObjectSize) (jvmtiEnv* env, + jobject object, + jlong* size_ptr); + +} jvmtiInterface_1; + +struct _jvmtiEnv { + const struct jvmtiInterface_1_ *functions; +#ifdef __cplusplus + + + jvmtiError Allocate(jlong size, + unsigned char** mem_ptr) { + return functions->Allocate(this, size, mem_ptr); + } + + jvmtiError Deallocate(unsigned char* mem) { + return functions->Deallocate(this, mem); + } + + jvmtiError GetThreadState(jthread thread, + jint* thread_state_ptr) { + return functions->GetThreadState(this, thread, thread_state_ptr); + } + + jvmtiError GetAllThreads(jint* threads_count_ptr, + jthread** threads_ptr) { + return functions->GetAllThreads(this, threads_count_ptr, threads_ptr); + } + + jvmtiError SuspendThread(jthread thread) { + return functions->SuspendThread(this, thread); + } + + jvmtiError SuspendThreadList(jint request_count, + const jthread* request_list, + jvmtiError* results) { + return functions->SuspendThreadList(this, request_count, request_list, results); + } + + jvmtiError ResumeThread(jthread thread) { + return functions->ResumeThread(this, thread); + } + + jvmtiError ResumeThreadList(jint request_count, + const jthread* request_list, + jvmtiError* results) { + return functions->ResumeThreadList(this, request_count, request_list, results); + } + + jvmtiError StopThread(jthread thread, + jobject exception) { + return functions->StopThread(this, thread, exception); + } + + jvmtiError InterruptThread(jthread thread) { + return functions->InterruptThread(this, thread); + } + + jvmtiError GetThreadInfo(jthread thread, + jvmtiThreadInfo* info_ptr) { + return functions->GetThreadInfo(this, thread, info_ptr); + } + + jvmtiError GetOwnedMonitorInfo(jthread thread, + jint* owned_monitor_count_ptr, + jobject** owned_monitors_ptr) { + return functions->GetOwnedMonitorInfo(this, thread, owned_monitor_count_ptr, owned_monitors_ptr); + } + + jvmtiError GetCurrentContendedMonitor(jthread thread, + jobject* monitor_ptr) { + return functions->GetCurrentContendedMonitor(this, thread, monitor_ptr); + } + + jvmtiError RunAgentThread(jthread thread, + jvmtiStartFunction proc, + const void* arg, + jint priority) { + return functions->RunAgentThread(this, thread, proc, arg, priority); + } + + jvmtiError SetThreadLocalStorage(jthread thread, + const void* data) { + return functions->SetThreadLocalStorage(this, thread, data); + } + + jvmtiError GetThreadLocalStorage(jthread thread, + void** data_ptr) { + return functions->GetThreadLocalStorage(this, thread, data_ptr); + } + + jvmtiError GetTopThreadGroups(jint* group_count_ptr, + jthreadGroup** groups_ptr) { + return functions->GetTopThreadGroups(this, group_count_ptr, groups_ptr); + } + + jvmtiError GetThreadGroupInfo(jthreadGroup group, + jvmtiThreadGroupInfo* info_ptr) { + return functions->GetThreadGroupInfo(this, group, info_ptr); + } + + jvmtiError GetThreadGroupChildren(jthreadGroup group, + jint* thread_count_ptr, + jthread** threads_ptr, + jint* group_count_ptr, + jthreadGroup** groups_ptr) { + return functions->GetThreadGroupChildren(this, group, thread_count_ptr, threads_ptr, group_count_ptr, groups_ptr); + } + + jvmtiError GetStackTrace(jthread thread, + jint start_depth, + jint max_frame_count, + jvmtiFrameInfo* frame_buffer, + jint* count_ptr) { + return functions->GetStackTrace(this, thread, start_depth, max_frame_count, frame_buffer, count_ptr); + } + + jvmtiError GetAllStackTraces(jint max_frame_count, + jvmtiStackInfo** stack_info_ptr, + jint* thread_count_ptr) { + return functions->GetAllStackTraces(this, max_frame_count, stack_info_ptr, thread_count_ptr); + } + + jvmtiError GetThreadListStackTraces(jint thread_count, + const jthread* thread_list, + jint max_frame_count, + jvmtiStackInfo** stack_info_ptr) { + return functions->GetThreadListStackTraces(this, thread_count, thread_list, max_frame_count, stack_info_ptr); + } + + jvmtiError GetFrameCount(jthread thread, + jint* count_ptr) { + return functions->GetFrameCount(this, thread, count_ptr); + } + + jvmtiError PopFrame(jthread thread) { + return functions->PopFrame(this, thread); + } + + jvmtiError GetFrameLocation(jthread thread, + jint depth, + jmethodID* method_ptr, + jlocation* location_ptr) { + return functions->GetFrameLocation(this, thread, depth, method_ptr, location_ptr); + } + + jvmtiError NotifyFramePop(jthread thread, + jint depth) { + return functions->NotifyFramePop(this, thread, depth); + } + + jvmtiError GetTag(jobject object, + jlong* tag_ptr) { + return functions->GetTag(this, object, tag_ptr); + } + + jvmtiError SetTag(jobject object, + jlong tag) { + return functions->SetTag(this, object, tag); + } + + jvmtiError ForceGarbageCollection() { + return functions->ForceGarbageCollection(this); + } + + jvmtiError IterateOverObjectsReachableFromObject(jobject object, + jvmtiObjectReferenceCallback object_reference_callback, + void* user_data) { + return functions->IterateOverObjectsReachableFromObject(this, object, object_reference_callback, user_data); + } + + jvmtiError IterateOverReachableObjects(jvmtiHeapRootCallback heap_root_callback, + jvmtiStackReferenceCallback stack_ref_callback, + jvmtiObjectReferenceCallback object_ref_callback, + void* user_data) { + return functions->IterateOverReachableObjects(this, heap_root_callback, stack_ref_callback, object_ref_callback, user_data); + } + + jvmtiError IterateOverHeap(jvmtiHeapObjectFilter object_filter, + jvmtiHeapObjectCallback heap_object_callback, + void* user_data) { + return functions->IterateOverHeap(this, object_filter, heap_object_callback, user_data); + } + + jvmtiError IterateOverInstancesOfClass(jclass klass, + jvmtiHeapObjectFilter object_filter, + jvmtiHeapObjectCallback heap_object_callback, + void* user_data) { + return functions->IterateOverInstancesOfClass(this, klass, object_filter, heap_object_callback, user_data); + } + + jvmtiError GetObjectsWithTags(jint tag_count, + const jlong* tags, + jint* count_ptr, + jobject** object_result_ptr, + jlong** tag_result_ptr) { + return functions->GetObjectsWithTags(this, tag_count, tags, count_ptr, object_result_ptr, tag_result_ptr); + } + + jvmtiError GetLocalObject(jthread thread, + jint depth, + jint slot, + jobject* value_ptr) { + return functions->GetLocalObject(this, thread, depth, slot, value_ptr); + } + + jvmtiError GetLocalInt(jthread thread, + jint depth, + jint slot, + jint* value_ptr) { + return functions->GetLocalInt(this, thread, depth, slot, value_ptr); + } + + jvmtiError GetLocalLong(jthread thread, + jint depth, + jint slot, + jlong* value_ptr) { + return functions->GetLocalLong(this, thread, depth, slot, value_ptr); + } + + jvmtiError GetLocalFloat(jthread thread, + jint depth, + jint slot, + jfloat* value_ptr) { + return functions->GetLocalFloat(this, thread, depth, slot, value_ptr); + } + + jvmtiError GetLocalDouble(jthread thread, + jint depth, + jint slot, + jdouble* value_ptr) { + return functions->GetLocalDouble(this, thread, depth, slot, value_ptr); + } + + jvmtiError SetLocalObject(jthread thread, + jint depth, + jint slot, + jobject value) { + return functions->SetLocalObject(this, thread, depth, slot, value); + } + + jvmtiError SetLocalInt(jthread thread, + jint depth, + jint slot, + jint value) { + return functions->SetLocalInt(this, thread, depth, slot, value); + } + + jvmtiError SetLocalLong(jthread thread, + jint depth, + jint slot, + jlong value) { + return functions->SetLocalLong(this, thread, depth, slot, value); + } + + jvmtiError SetLocalFloat(jthread thread, + jint depth, + jint slot, + jfloat value) { + return functions->SetLocalFloat(this, thread, depth, slot, value); + } + + jvmtiError SetLocalDouble(jthread thread, + jint depth, + jint slot, + jdouble value) { + return functions->SetLocalDouble(this, thread, depth, slot, value); + } + + jvmtiError SetBreakpoint(jmethodID method, + jlocation location) { + return functions->SetBreakpoint(this, method, location); + } + + jvmtiError ClearBreakpoint(jmethodID method, + jlocation location) { + return functions->ClearBreakpoint(this, method, location); + } + + jvmtiError SetFieldAccessWatch(jclass klass, + jfieldID field) { + return functions->SetFieldAccessWatch(this, klass, field); + } + + jvmtiError ClearFieldAccessWatch(jclass klass, + jfieldID field) { + return functions->ClearFieldAccessWatch(this, klass, field); + } + + jvmtiError SetFieldModificationWatch(jclass klass, + jfieldID field) { + return functions->SetFieldModificationWatch(this, klass, field); + } + + jvmtiError ClearFieldModificationWatch(jclass klass, + jfieldID field) { + return functions->ClearFieldModificationWatch(this, klass, field); + } + + jvmtiError GetLoadedClasses(jint* class_count_ptr, + jclass** classes_ptr) { + return functions->GetLoadedClasses(this, class_count_ptr, classes_ptr); + } + + jvmtiError GetClassLoaderClasses(jobject initiating_loader, + jint* class_count_ptr, + jclass** classes_ptr) { + return functions->GetClassLoaderClasses(this, initiating_loader, class_count_ptr, classes_ptr); + } + + jvmtiError GetClassSignature(jclass klass, + char** signature_ptr, + char** generic_ptr) { + return functions->GetClassSignature(this, klass, signature_ptr, generic_ptr); + } + + jvmtiError GetClassStatus(jclass klass, + jint* status_ptr) { + return functions->GetClassStatus(this, klass, status_ptr); + } + + jvmtiError GetSourceFileName(jclass klass, + char** source_name_ptr) { + return functions->GetSourceFileName(this, klass, source_name_ptr); + } + + jvmtiError GetClassModifiers(jclass klass, + jint* modifiers_ptr) { + return functions->GetClassModifiers(this, klass, modifiers_ptr); + } + + jvmtiError GetClassMethods(jclass klass, + jint* method_count_ptr, + jmethodID** methods_ptr) { + return functions->GetClassMethods(this, klass, method_count_ptr, methods_ptr); + } + + jvmtiError GetClassFields(jclass klass, + jint* field_count_ptr, + jfieldID** fields_ptr) { + return functions->GetClassFields(this, klass, field_count_ptr, fields_ptr); + } + + jvmtiError GetImplementedInterfaces(jclass klass, + jint* interface_count_ptr, + jclass** interfaces_ptr) { + return functions->GetImplementedInterfaces(this, klass, interface_count_ptr, interfaces_ptr); + } + + jvmtiError IsInterface(jclass klass, + jboolean* is_interface_ptr) { + return functions->IsInterface(this, klass, is_interface_ptr); + } + + jvmtiError IsArrayClass(jclass klass, + jboolean* is_array_class_ptr) { + return functions->IsArrayClass(this, klass, is_array_class_ptr); + } + + jvmtiError GetClassLoader(jclass klass, + jobject* classloader_ptr) { + return functions->GetClassLoader(this, klass, classloader_ptr); + } + + jvmtiError GetSourceDebugExtension(jclass klass, + char** source_debug_extension_ptr) { + return functions->GetSourceDebugExtension(this, klass, source_debug_extension_ptr); + } + + jvmtiError RedefineClasses(jint class_count, + const jvmtiClassDefinition* class_definitions) { + return functions->RedefineClasses(this, class_count, class_definitions); + } + + jvmtiError GetObjectSize(jobject object, + jlong* size_ptr) { + return functions->GetObjectSize(this, object, size_ptr); + } + + jvmtiError GetObjectHashCode(jobject object, + jint* hash_code_ptr) { + return functions->GetObjectHashCode(this, object, hash_code_ptr); + } + + jvmtiError GetObjectMonitorUsage(jobject object, + jvmtiMonitorUsage* info_ptr) { + return functions->GetObjectMonitorUsage(this, object, info_ptr); + } + + jvmtiError GetFieldName(jclass klass, + jfieldID field, + char** name_ptr, + char** signature_ptr, + char** generic_ptr) { + return functions->GetFieldName(this, klass, field, name_ptr, signature_ptr, generic_ptr); + } + + jvmtiError GetFieldDeclaringClass(jclass klass, + jfieldID field, + jclass* declaring_class_ptr) { + return functions->GetFieldDeclaringClass(this, klass, field, declaring_class_ptr); + } + + jvmtiError GetFieldModifiers(jclass klass, + jfieldID field, + jint* modifiers_ptr) { + return functions->GetFieldModifiers(this, klass, field, modifiers_ptr); + } + + jvmtiError IsFieldSynthetic(jclass klass, + jfieldID field, + jboolean* is_synthetic_ptr) { + return functions->IsFieldSynthetic(this, klass, field, is_synthetic_ptr); + } + + jvmtiError GetMethodName(jmethodID method, + char** name_ptr, + char** signature_ptr, + char** generic_ptr) { + return functions->GetMethodName(this, method, name_ptr, signature_ptr, generic_ptr); + } + + jvmtiError GetMethodDeclaringClass(jmethodID method, + jclass* declaring_class_ptr) { + return functions->GetMethodDeclaringClass(this, method, declaring_class_ptr); + } + + jvmtiError GetMethodModifiers(jmethodID method, + jint* modifiers_ptr) { + return functions->GetMethodModifiers(this, method, modifiers_ptr); + } + + jvmtiError GetMaxLocals(jmethodID method, + jint* max_ptr) { + return functions->GetMaxLocals(this, method, max_ptr); + } + + jvmtiError GetArgumentsSize(jmethodID method, + jint* size_ptr) { + return functions->GetArgumentsSize(this, method, size_ptr); + } + + jvmtiError GetLineNumberTable(jmethodID method, + jint* entry_count_ptr, + jvmtiLineNumberEntry** table_ptr) { + return functions->GetLineNumberTable(this, method, entry_count_ptr, table_ptr); + } + + jvmtiError GetMethodLocation(jmethodID method, + jlocation* start_location_ptr, + jlocation* end_location_ptr) { + return functions->GetMethodLocation(this, method, start_location_ptr, end_location_ptr); + } + + jvmtiError GetLocalVariableTable(jmethodID method, + jint* entry_count_ptr, + jvmtiLocalVariableEntry** table_ptr) { + return functions->GetLocalVariableTable(this, method, entry_count_ptr, table_ptr); + } + + jvmtiError GetBytecodes(jmethodID method, + jint* bytecode_count_ptr, + unsigned char** bytecodes_ptr) { + return functions->GetBytecodes(this, method, bytecode_count_ptr, bytecodes_ptr); + } + + jvmtiError IsMethodNative(jmethodID method, + jboolean* is_native_ptr) { + return functions->IsMethodNative(this, method, is_native_ptr); + } + + jvmtiError IsMethodSynthetic(jmethodID method, + jboolean* is_synthetic_ptr) { + return functions->IsMethodSynthetic(this, method, is_synthetic_ptr); + } + + jvmtiError IsMethodObsolete(jmethodID method, + jboolean* is_obsolete_ptr) { + return functions->IsMethodObsolete(this, method, is_obsolete_ptr); + } + + jvmtiError CreateRawMonitor(const char* name, + jrawMonitorID* monitor_ptr) { + return functions->CreateRawMonitor(this, name, monitor_ptr); + } + + jvmtiError DestroyRawMonitor(jrawMonitorID monitor) { + return functions->DestroyRawMonitor(this, monitor); + } + + jvmtiError RawMonitorEnter(jrawMonitorID monitor) { + return functions->RawMonitorEnter(this, monitor); + } + + jvmtiError RawMonitorExit(jrawMonitorID monitor) { + return functions->RawMonitorExit(this, monitor); + } + + jvmtiError RawMonitorWait(jrawMonitorID monitor, + jlong millis) { + return functions->RawMonitorWait(this, monitor, millis); + } + + jvmtiError RawMonitorNotify(jrawMonitorID monitor) { + return functions->RawMonitorNotify(this, monitor); + } + + jvmtiError RawMonitorNotifyAll(jrawMonitorID monitor) { + return functions->RawMonitorNotifyAll(this, monitor); + } + + jvmtiError SetJNIFunctionTable(const jniNativeInterface* function_table) { + return functions->SetJNIFunctionTable(this, function_table); + } + + jvmtiError GetJNIFunctionTable(jniNativeInterface** function_table) { + return functions->GetJNIFunctionTable(this, function_table); + } + + jvmtiError SetEventCallbacks(const jvmtiEventCallbacks* callbacks, + jint size_of_callbacks) { + return functions->SetEventCallbacks(this, callbacks, size_of_callbacks); + } + + jvmtiError SetEventNotificationMode(jvmtiEventMode mode, + jvmtiEvent event_type, + jthread event_thread, + ...) { + return functions->SetEventNotificationMode(this, mode, event_type, event_thread); + } + + jvmtiError GenerateEvents(jvmtiEvent event_type) { + return functions->GenerateEvents(this, event_type); + } + + jvmtiError GetExtensionFunctions(jint* extension_count_ptr, + jvmtiExtensionFunctionInfo** extensions) { + return functions->GetExtensionFunctions(this, extension_count_ptr, extensions); + } + + jvmtiError GetExtensionEvents(jint* extension_count_ptr, + jvmtiExtensionEventInfo** extensions) { + return functions->GetExtensionEvents(this, extension_count_ptr, extensions); + } + + jvmtiError SetExtensionEventCallback(jint extension_event_index, + jvmtiExtensionEvent callback) { + return functions->SetExtensionEventCallback(this, extension_event_index, callback); + } + + jvmtiError GetPotentialCapabilities(jvmtiCapabilities* capabilities_ptr) { + return functions->GetPotentialCapabilities(this, capabilities_ptr); + } + + jvmtiError AddCapabilities(const jvmtiCapabilities* capabilities_ptr) { + return functions->AddCapabilities(this, capabilities_ptr); + } + + jvmtiError RelinquishCapabilities(const jvmtiCapabilities* capabilities_ptr) { + return functions->RelinquishCapabilities(this, capabilities_ptr); + } + + jvmtiError GetCapabilities(jvmtiCapabilities* capabilities_ptr) { + return functions->GetCapabilities(this, capabilities_ptr); + } + + jvmtiError GetCurrentThreadCpuTimerInfo(jvmtiTimerInfo* info_ptr) { + return functions->GetCurrentThreadCpuTimerInfo(this, info_ptr); + } + + jvmtiError GetCurrentThreadCpuTime(jlong* nanos_ptr) { + return functions->GetCurrentThreadCpuTime(this, nanos_ptr); + } + + jvmtiError GetThreadCpuTimerInfo(jvmtiTimerInfo* info_ptr) { + return functions->GetThreadCpuTimerInfo(this, info_ptr); + } + + jvmtiError GetThreadCpuTime(jthread thread, + jlong* nanos_ptr) { + return functions->GetThreadCpuTime(this, thread, nanos_ptr); + } + + jvmtiError GetTimerInfo(jvmtiTimerInfo* info_ptr) { + return functions->GetTimerInfo(this, info_ptr); + } + + jvmtiError GetTime(jlong* nanos_ptr) { + return functions->GetTime(this, nanos_ptr); + } + + jvmtiError GetAvailableProcessors(jint* processor_count_ptr) { + return functions->GetAvailableProcessors(this, processor_count_ptr); + } + + jvmtiError AddToBootstrapClassLoaderSearch(const char* segment) { + return functions->AddToBootstrapClassLoaderSearch(this, segment); + } + + jvmtiError GetSystemProperties(jint* count_ptr, + char*** property_ptr) { + return functions->GetSystemProperties(this, count_ptr, property_ptr); + } + + jvmtiError GetSystemProperty(const char* property, + char** value_ptr) { + return functions->GetSystemProperty(this, property, value_ptr); + } + + jvmtiError SetSystemProperty(const char* property, + const char* value) { + return functions->SetSystemProperty(this, property, value); + } + + jvmtiError GetPhase(jvmtiPhase* phase_ptr) { + return functions->GetPhase(this, phase_ptr); + } + + jvmtiError DisposeEnvironment() { + return functions->DisposeEnvironment(this); + } + + jvmtiError SetEnvironmentLocalStorage(const void* data) { + return functions->SetEnvironmentLocalStorage(this, data); + } + + jvmtiError GetEnvironmentLocalStorage(void** data_ptr) { + return functions->GetEnvironmentLocalStorage(this, data_ptr); + } + + jvmtiError GetVersionNumber(jint* version_ptr) { + return functions->GetVersionNumber(this, version_ptr); + } + + jvmtiError GetErrorName(jvmtiError error, + char** name_ptr) { + return functions->GetErrorName(this, error, name_ptr); + } + + jvmtiError SetVerboseFlag(jvmtiVerboseFlag flag, + jboolean value) { + return functions->SetVerboseFlag(this, flag, value); + } + + jvmtiError GetJLocationFormat(jvmtiJlocationFormat* format_ptr) { + return functions->GetJLocationFormat(this, format_ptr); + } + +#endif /* __cplusplus */ +}; + + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* !_JAVA_JVMTI_H_ */ + diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/win32/jawt_md.h b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/win32/jawt_md.h new file mode 100644 index 0000000000..5df3e469e2 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/win32/jawt_md.h @@ -0,0 +1,41 @@ +/* + * @(#)jawt_md.h 1.7 03/12/19 + * + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +#ifndef _JAVASOFT_JAWT_MD_H_ +#define _JAVASOFT_JAWT_MD_H_ + +#include +#include "jawt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Win32-specific declarations for AWT native interface. + * See notes in jawt.h for an example of use. + */ +typedef struct jawt_Win32DrawingSurfaceInfo { + /* Native window, DDB, or DIB handle */ + union { + HWND hwnd; + HBITMAP hbitmap; + void* pbits; + }; + /* + * This HDC should always be used instead of the HDC returned from + * BeginPaint() or any calls to GetDC(). + */ + HDC hdc; + HPALETTE hpalette; +} JAWT_Win32DrawingSurfaceInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* !_JAVASOFT_JAWT_MD_H_ */ diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/win32/jni_md.h b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/win32/jni_md.h new file mode 100644 index 0000000000..fdc79a07f6 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/include/win32/jni_md.h @@ -0,0 +1,19 @@ +/* + * @(#)jni_md.h 1.14 03/12/19 + * + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +#ifndef _JAVASOFT_JNI_MD_H_ +#define _JAVASOFT_JNI_MD_H_ + +#define JNIEXPORT __declspec(dllexport) +#define JNIIMPORT __declspec(dllimport) +#define JNICALL __stdcall + +typedef long jint; +typedef __int64 jlong; +typedef signed char jbyte; + +#endif /* !_JAVASOFT_JNI_MD_H_ */ diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/lib/jvm.lib b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/java-jni/lib/jvm.lib new file mode 100644 index 0000000000000000000000000000000000000000..672855a0f0f4d9f1d4a5f37637b5c160290e1a5b GIT binary patch literal 273276 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 a6% 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 LWKe?6JmUWYI;fM( literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/org_openJpeg_OpenJPEGJavaDecoder.h b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/org_openJpeg_OpenJPEGJavaDecoder.h new file mode 100644 index 0000000000..0e8de2e75f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/org_openJpeg_OpenJPEGJavaDecoder.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_openJpeg_OpenJPEGJavaDecoder */ + +#ifndef _Included_org_openJpeg_OpenJPEGJavaDecoder +#define _Included_org_openJpeg_OpenJPEGJavaDecoder +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_openJpeg_OpenJPEGJavaDecoder + * Method: internalDecodeJ2KtoImage + * Signature: ([Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_openJpeg_OpenJPEGJavaDecoder_internalDecodeJ2KtoImage + (JNIEnv *, jobject, jobjectArray); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/contrib/menuetlibc/openjpeg/JavaOpenJPEG/org_openJpeg_OpenJPEGJavaEncoder.h b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/org_openJpeg_OpenJPEGJavaEncoder.h new file mode 100644 index 0000000000..22b3d9589d --- /dev/null +++ b/contrib/menuetlibc/openjpeg/JavaOpenJPEG/org_openJpeg_OpenJPEGJavaEncoder.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_openJpeg_OpenJPEGJavaEncoder */ + +#ifndef _Included_org_openJpeg_OpenJPEGJavaEncoder +#define _Included_org_openJpeg_OpenJPEGJavaEncoder +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_openJpeg_OpenJPEGJavaEncoder + * Method: internalEncodeImageToJ2K + * Signature: ([Ljava/lang/String;)J + */ +JNIEXPORT jlong JNICALL Java_org_openJpeg_OpenJPEGJavaEncoder_internalEncodeImageToJ2K + (JNIEnv *, jobject, jobjectArray); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/contrib/menuetlibc/openjpeg/LICENSE b/contrib/menuetlibc/openjpeg/LICENSE new file mode 100644 index 0000000000..d1e5b6a533 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/LICENSE @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/LibOpenJPEG.dsp b/contrib/menuetlibc/openjpeg/LibOpenJPEG.dsp new file mode 100644 index 0000000000..3f1766ed4b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/LibOpenJPEG.dsp @@ -0,0 +1,262 @@ +# Microsoft Developer Studio Project File - Name="LibOpenJPEG" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=LibOpenJPEG - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "LibOpenJPEG.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "LibOpenJPEG.mak" CFG="LibOpenJPEG - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "LibOpenJPEG - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "LibOpenJPEG - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "LibOpenJPEG - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "OPJ_STATIC" /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=if not exist dist mkdir dist copy Release\LibOpenJPEG.lib dist copy libopenjpeg\openjpeg.h dist +# End Special Build Tool + +!ELSEIF "$(CFG)" == "LibOpenJPEG - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "OPJ_STATIC" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"Debug\LibOpenJPEGd.lib" +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=if not exist dist mkdir dist copy Debug\LibOpenJPEGd.lib dist copy libopenjpeg\openjpeg.h dist +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "LibOpenJPEG - Win32 Release" +# Name "LibOpenJPEG - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=libopenjpeg\bio.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\cio.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\dwt.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\event.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\image.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\j2k.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\j2k_lib.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\jp2.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\jpt.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\mct.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\mqc.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\openjpeg.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\pi.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\raw.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\t1.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\t2.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\tcd.c +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\tgt.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=libopenjpeg\bio.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\cio.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\dwt.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\event.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\fix.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\image.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\int.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\j2k.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\j2k_lib.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\jp2.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\jpt.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\mct.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\mqc.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\openjpeg.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\opj_includes.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\pi.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\raw.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\t1.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\t1_luts.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\t2.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\tcd.h +# End Source File +# Begin Source File + +SOURCE=libopenjpeg\tgt.h +# End Source File +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/LibOpenJPEG.dsw b/contrib/menuetlibc/openjpeg/LibOpenJPEG.dsw new file mode 100644 index 0000000000..fdff9aeeb2 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/LibOpenJPEG.dsw @@ -0,0 +1,41 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "DllOpenJPEG"=.\DllOpenJPEG.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "LibOpenJPEG"=.\LibOpenJPEG.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/LibOpenJPEG.sln b/contrib/menuetlibc/openjpeg/LibOpenJPEG.sln new file mode 100644 index 0000000000..f088d7a999 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/LibOpenJPEG.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibOpenJPEG", "LibOpenJPEG.vcproj", "{6A47DBE3-8F80-4ABE-8688-5F8DC620977C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6A47DBE3-8F80-4ABE-8688-5F8DC620977C}.Debug|Win32.ActiveCfg = Debug|Win32 + {6A47DBE3-8F80-4ABE-8688-5F8DC620977C}.Debug|Win32.Build.0 = Debug|Win32 + {6A47DBE3-8F80-4ABE-8688-5F8DC620977C}.Release|Win32.ActiveCfg = Release|Win32 + {6A47DBE3-8F80-4ABE-8688-5F8DC620977C}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/contrib/menuetlibc/openjpeg/LibOpenJPEG.vcproj b/contrib/menuetlibc/openjpeg/LibOpenJPEG.vcproj new file mode 100644 index 0000000000..8d217d12ac --- /dev/null +++ b/contrib/menuetlibc/openjpeg/LibOpenJPEG.vcproj @@ -0,0 +1,642 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/Makefile b/contrib/menuetlibc/openjpeg/Makefile new file mode 100644 index 0000000000..b575d57a97 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/Makefile @@ -0,0 +1,776 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +pkgdatadir = $(datadir)/openjpeg-1.4.0 +pkgincludedir = $(includedir)/openjpeg-1.4.0 +pkglibdir = $(libdir)/openjpeg-1.4.0 +pkglibexecdir = $(libexecdir)/openjpeg-1.4.0 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/libopenjpeg.pc.in \ + $(srcdir)/opj_config.h.in $(top_srcdir)/configure INSTALL \ + config.guess config.sub depcomp install-sh ltmain.sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = opj_config.h +CONFIG_CLEAN_FILES = libopenjpeg.pc +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf +AUTOHEADER = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader +AUTOMAKE = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11 +AWK = mawk +BUILD_NR = 0 +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JP3D_BUILD_NR = 0 +JP3D_MAJOR_NR = 1 +JP3D_MINOR_NR = 3 +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBPNG_CONFIG = /usr/bin/libpng-config +LIBS = -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAJOR_NR = 1 +MAKEINFO = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo +MINOR_NR = 4 +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = openjpeg-1.4.0 +PACKAGE_BUGREPORT = http://code.google.com/p/openjpeg/ +PACKAGE_NAME = OpenJPEG +PACKAGE_STRING = OpenJPEG 1.4.0 +PACKAGE_TARNAME = openjpeg-1.4.0 +PACKAGE_URL = http://www.openjpeg.org/ +PACKAGE_VERSION = 1.4.0 +PATH_SEPARATOR = : +PKGCONFIG = /usr/bin/pkg-config +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 1.4.0 +abs_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_top_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_top_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh +jp3d_dir = +jpwl_dir = +lcms1includes = -I/usr/include +lcms1libs = -llcms +lcms2includes = +lcms2libs = +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pngincludes = -I/usr/include/libpng12 +pnglibs = -L/usr/lib/x86_64-linux-gnu -lpng12 +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +tiffincludes = +tifflibs = -ltiff +top_build_prefix = +top_builddir = . +top_srcdir = . +with_doxygen = no + +#OpenJPEG top source directory +SUBDIRS = libopenjpeg codec mj2 doc +pkgconf_dir = /usr/lib/pkgconfig +all: opj_config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +opj_config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/opj_config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status opj_config.h +$(srcdir)/opj_config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f opj_config.h stamp-h1 +libopenjpeg.pc: $(top_builddir)/config.status $(srcdir)/libopenjpeg.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) opj_config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) opj_config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) opj_config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) opj_config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile opj_config.h +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-data-am install-strip \ + tags-recursive uninstall-am + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool clean-local ctags ctags-recursive dist dist-all \ + dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-hook install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-hook + + +clean-local: + @rm -rf bin + @l='$(SUBDIRS)'; for f in $$l ; do \ + rm -f $$f/.report.txt ; \ + done + +distclean-local: clean-local + +install-data-hook: + @echo "" + @l='$(SUBDIRS)'; for f in $$l ; do \ + cat $$f/.report.txt ; \ + done + @echo "" + @echo "Installing: libopenjpeg1.pc $(pkgconf_dir)" + @echo "" + @$(INSTALL) -d $(pkgconf_dir) + @cp libopenjpeg.pc $(pkgconf_dir)/libopenjpeg1.pc + @(cd $(pkgconf_dir) && $(RM) libopenjpeg.pc && \ + $(LN_S) libopenjpeg1.pc libopenjpeg.pc) + +uninstall-hook: + @(cd $(pkgconf_dir) && $(RM) libopenjpeg.pc libopenjpeg1.pc) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/Makefile.am b/contrib/menuetlibc/openjpeg/Makefile.am new file mode 100644 index 0000000000..9d5aa9b6dc --- /dev/null +++ b/contrib/menuetlibc/openjpeg/Makefile.am @@ -0,0 +1,28 @@ +#OpenJPEG top source directory +SUBDIRS = libopenjpeg codec mj2 @jpwl_dir@ @jp3d_dir@ doc + +clean-local: + @rm -rf bin + @l='$(SUBDIRS)'; for f in $$l ; do \ + rm -f $$f/.report.txt ; \ + done + +distclean-local: clean-local + +pkgconf_dir = /usr/lib/pkgconfig + +install-data-hook: + @echo "" + @l='$(SUBDIRS)'; for f in $$l ; do \ + cat $$f/.report.txt ; \ + done + @echo "" + @echo "Installing: libopenjpeg1.pc $(pkgconf_dir)" + @echo "" + @$(INSTALL) -d $(pkgconf_dir) + @cp libopenjpeg.pc $(pkgconf_dir)/libopenjpeg1.pc + @(cd $(pkgconf_dir) && $(RM) libopenjpeg.pc && \ + $(LN_S) libopenjpeg1.pc libopenjpeg.pc) + +uninstall-hook: + @(cd $(pkgconf_dir) && $(RM) libopenjpeg.pc libopenjpeg1.pc) diff --git a/contrib/menuetlibc/openjpeg/Makefile.in b/contrib/menuetlibc/openjpeg/Makefile.in new file mode 100644 index 0000000000..c051ac2dfa --- /dev/null +++ b/contrib/menuetlibc/openjpeg/Makefile.in @@ -0,0 +1,776 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/libopenjpeg.pc.in \ + $(srcdir)/opj_config.h.in $(top_srcdir)/configure INSTALL \ + config.guess config.sub depcomp install-sh ltmain.sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = opj_config.h +CONFIG_CLEAN_FILES = libopenjpeg.pc +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_NR = @BUILD_NR@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JP3D_BUILD_NR = @JP3D_BUILD_NR@ +JP3D_MAJOR_NR = @JP3D_MAJOR_NR@ +JP3D_MINOR_NR = @JP3D_MINOR_NR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBPNG_CONFIG = @LIBPNG_CONFIG@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAJOR_NR = @MAJOR_NR@ +MAKEINFO = @MAKEINFO@ +MINOR_NR = @MINOR_NR@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG = @PKGCONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +jp3d_dir = @jp3d_dir@ +jpwl_dir = @jpwl_dir@ +lcms1includes = @lcms1includes@ +lcms1libs = @lcms1libs@ +lcms2includes = @lcms2includes@ +lcms2libs = @lcms2libs@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pngincludes = @pngincludes@ +pnglibs = @pnglibs@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +tiffincludes = @tiffincludes@ +tifflibs = @tifflibs@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_doxygen = @with_doxygen@ + +#OpenJPEG top source directory +SUBDIRS = libopenjpeg codec mj2 @jpwl_dir@ @jp3d_dir@ doc +pkgconf_dir = /usr/lib/pkgconfig +all: opj_config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +opj_config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/opj_config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status opj_config.h +$(srcdir)/opj_config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f opj_config.h stamp-h1 +libopenjpeg.pc: $(top_builddir)/config.status $(srcdir)/libopenjpeg.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) opj_config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) opj_config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) opj_config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) opj_config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile opj_config.h +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-data-am install-strip \ + tags-recursive uninstall-am + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool clean-local ctags ctags-recursive dist dist-all \ + dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-hook install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-hook + + +clean-local: + @rm -rf bin + @l='$(SUBDIRS)'; for f in $$l ; do \ + rm -f $$f/.report.txt ; \ + done + +distclean-local: clean-local + +install-data-hook: + @echo "" + @l='$(SUBDIRS)'; for f in $$l ; do \ + cat $$f/.report.txt ; \ + done + @echo "" + @echo "Installing: libopenjpeg1.pc $(pkgconf_dir)" + @echo "" + @$(INSTALL) -d $(pkgconf_dir) + @cp libopenjpeg.pc $(pkgconf_dir)/libopenjpeg1.pc + @(cd $(pkgconf_dir) && $(RM) libopenjpeg.pc && \ + $(LN_S) libopenjpeg1.pc libopenjpeg.pc) + +uninstall-hook: + @(cd $(pkgconf_dir) && $(RM) libopenjpeg.pc libopenjpeg1.pc) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/Makefile.nix b/contrib/menuetlibc/openjpeg/Makefile.nix new file mode 100644 index 0000000000..b1da4b18fe --- /dev/null +++ b/contrib/menuetlibc/openjpeg/Makefile.nix @@ -0,0 +1,183 @@ +#top Makefile.nix +include config.nix + +TARGET = openjpeg +COMPILERFLAGS = -Wall -O3 -ffast-math -std=c99 -fPIC + +INCLUDE = -I. -Ilibopenjpeg +LIBRARIES = -lstdc++ + +SRCS = ./libopenjpeg/bio.c ./libopenjpeg/cio.c ./libopenjpeg/dwt.c \ + ./libopenjpeg/event.c ./libopenjpeg/image.c ./libopenjpeg/j2k.c \ + ./libopenjpeg/j2k_lib.c ./libopenjpeg/jp2.c ./libopenjpeg/jpt.c \ + ./libopenjpeg/mct.c ./libopenjpeg/mqc.c ./libopenjpeg/openjpeg.c \ + ./libopenjpeg/pi.c ./libopenjpeg/raw.c ./libopenjpeg/t1.c \ + ./libopenjpeg/t2.c ./libopenjpeg/tcd.c ./libopenjpeg/tgt.c \ + +INCLS = ./libopenjpeg/bio.h ./libopenjpeg/cio.h ./libopenjpeg/dwt.h \ + ./libopenjpeg/event.h ./libopenjpeg/fix.h ./libopenjpeg/image.h \ + ./libopenjpeg/int.h ./libopenjpeg/j2k.h ./libopenjpeg/j2k_lib.h \ + ./libopenjpeg/jp2.h ./libopenjpeg/jpt.h ./libopenjpeg/mct.h \ + ./libopenjpeg/mqc.h ./libopenjpeg/openjpeg.h ./libopenjpeg/pi.h \ + ./libopenjpeg/raw.h ./libopenjpeg/t1.h ./libopenjpeg/t2.h \ + ./libopenjpeg/tcd.h ./libopenjpeg/tgt.h ./libopenjpeg/opj_malloc.h \ + ./libopenjpeg/opj_includes.h + +INSTALL_LIBDIR = $(prefix)/lib +headerdir = openjpeg-$(MAJOR).$(MINOR) +INSTALL_INCLUDE = $(prefix)/include/$(headerdir) + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix + +MODULES = $(SRCS:.c=.o) + +CFLAGS = $(COMPILERFLAGS) $(INCLUDE) + +LIBNAME = lib$(TARGET) + +ifeq ($(ENABLE_SHARED),yes) +SHAREDLIB = $(LIBNAME).so.$(MAJOR).$(MINOR).$(BUILD) +else +STATICLIB = $(LIBNAME).a +endif + +default: all + +all: OpenJPEG + make -C codec -f Makefile.nix all + make -C mj2 -f Makefile.nix all +ifeq ($(WITH_JPWL),yes) + make -C jpwl -f Makefile.nix all +endif +ifeq ($(WITH_JP3D),yes) + make -C jp3d -f Makefile.nix all +endif + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +OpenJPEG: $(STATICLIB) $(SHAREDLIB) + install -d bin +ifeq ($(ENABLE_SHARED),yes) + install -m 755 $(SHAREDLIB) bin + (cd bin && ln -sf $(SHAREDLIB) $(LIBNAME).so.$(MAJOR).$(MINOR)) + (cd bin && ln -sf $(SHAREDLIB) $(LIBNAME).so) +else + install -m 644 $(STATICLIB) bin +endif + +.c.o: + $(CC) $(CFLAGS) -c $< -o $@ + +ifeq ($(ENABLE_SHARED),yes) +$(SHAREDLIB): $(MODULES) + $(CC) -shared -Wl,-soname,$(LIBNAME) -o $@ $(MODULES) $(LIBRARIES) +else +$(STATICLIB): $(MODULES) + rm -f $(STATICLIB) + $(AR) r $@ $(MODULES) +endif + +install: OpenJPEG + install -d $(DESTDIR)$(INSTALL_LIBDIR) +ifeq ($(ENABLE_SHARED),yes) + install -m 755 -o root -g root $(SHAREDLIB) $(DESTDIR)$(INSTALL_LIBDIR) + (cd $(DESTDIR)$(INSTALL_LIBDIR) && \ + ln -sf $(SHAREDLIB) $(LIBNAME).so.$(MAJOR).$(MINOR) ) + (cd $(DESTDIR)$(INSTALL_LIBDIR) && \ + ln -sf $(SHAREDLIB) $(LIBNAME).so ) +else + install -m 644 -o root -g root $(STATICLIB) $(DESTDIR)$(INSTALL_LIBDIR) + (cd $(DESTDIR)$(INSTALL_LIBDIR) && ranlib $(STATICLIB) ) +endif + install -d $(DESTDIR)$(INSTALL_INCLUDE) + install -m 644 -o root -g root libopenjpeg/openjpeg.h \ + $(DESTDIR)$(INSTALL_INCLUDE) + (cd $(DESTDIR)$(prefix)/include && \ + ln -sf $(headerdir)/openjpeg.h openjpeg.h) + make -C codec -f Makefile.nix install + make -C mj2 -f Makefile.nix install +ifeq ($(WITH_JPWL),yes) + make -C jpwl -f Makefile.nix install +endif +ifeq ($(WITH_JP3D),yes) + make -C jp3d -f Makefile.nix install +endif + $(LDCONFIG) + make -C doc -f Makefile.nix install + +ifeq ($(WITH_JPWL),yes) +jpwl-all: + make -C jpwl -f Makefile.nix all + +jpwl-install: jpwl-all + make -C jpwl -f Makefile.nix install + $(LDCONFIG) + +jpwl-clean: + make -C jpwl -f Makefile.nix clean + +jpwl-uninstall: + make -C jpwl -f Makefile.nix uninstall +endif + +ifeq ($(WITH_JP3D),yes) +jp3d-all: + make -C jp3d -f Makefile.nix all + +jp3d-install: jp3d-all + make -C jp3d -f Makefile.nix install + $(LDCONFIG) + +jp3d-clean: + make -C jp3d -f Makefile.nix clean + +jp3d-uninstall: + make -C jp3d -f Makefile.nix uninstall +endif + +doc-all: + make -C doc -f Makefile.nix all + +doc-install: doc-all + make -C doc -f Makefile.nix install + +clean: + rm -rf bin + rm -f core u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) + make -C codec -f Makefile.nix clean + make -C mj2 -f Makefile.nix clean + make -C doc -f Makefile.nix clean +ifeq ($(WITH_JPWL),yes) + make -C jpwl -f Makefile.nix clean +endif +ifeq ($(WITH_JP3D),yes) + make -C jp3d -f Makefile.nix clean +endif + +doc-clean: + make -C doc -f Makefile.nix clean + +uninstall: +ifeq ($(ENABLE_SHARED),yes) + (cd $(DESTDIR)$(INSTALL_LIBDIR) && \ + rm -f $(LIBNAME).so $(LIBNAME).so.$(MAJOR).$(MINOR) $(SHAREDLIB) ) +else + rm -f $(DESTDIR)$(INSTALL_LIBDIR)/$(STATICLIB) +endif + $(LDCONFIG) + rm -f $(DESTDIR)$(prefix)/include/openjpeg.h + rm -rf $(DESTDIR)$(INSTALL_INCLUDE) + make -C codec -f Makefile.nix uninstall + make -C mj2 -f Makefile.nix uninstall + make -C doc -f Makefile.nix uninstall +ifeq ($(WITH_JPWL),yes) + make -C jpwl -f Makefile.nix uninstall +endif +ifeq ($(WITH_JP3D),yes) + make -C jp3d -f Makefile.nix uninstall +endif + +distclean: clean + rm -rf bin diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/Makefile b/contrib/menuetlibc/openjpeg/OPJViewer/Makefile new file mode 100644 index 0000000000..b691dc7be9 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/Makefile @@ -0,0 +1,41 @@ +# Makefile for OPJViewer + +# General configuration variables: +CC = $(shell wx-config-2.8 --cxx) +AR = ar + +CFLAGS = -DUSE_JPWL -DwxUSE_LIBOPENJPEG -DwxUSE_GUI=1 -DOPJ_STATIC -DOPJ_HTMLABOUT -DOPJ_INICONFIG -DUSE_JPSEC -DOPJ_MANYFORMATS $(shell wx-config-2.8 --cxxflags) # -g -p -pg -DUSE_JPWL + +OPJV_SRCS = source/imagjpeg2000.cpp source/wxj2kparser.cpp source/OPJViewer.cpp source/wxjp2parser.cpp source/OPJDialogs.cpp source/OPJThreads.cpp source/OPJAbout.cpp ../codec/index.c + +MODULES = $(OPJV_SRCS:.cpp=.o) + +all: opjviewer lib + +.cpp.o: + $(CC) $(CFLAGS) -c $< -o $@ + +lib: + cd ../jpwl; make + +opjviewer: $(OPJV_SRCS) lib + $(CC) $(CFLAGS) -I .. -I ../codec -I ../libopenjpeg $(OPJV_SRCS) -o OPJViewer -L ../jpwl -lopenjpeg_JPWL -lm -lstdc++ -ltiff $(shell wx-config-2.8 --libs) + + +clean: + rm -f OPJViewer *.o *.a + cd ../libopenjpeg; rm -f *.o + + + + +#.cpp.o : +# $(CXX) -g -c `wx-config-2.8 --cxxflags` -I ../.. -D wxUSE_LIBOPENJPEG -D wxHACK_BOOLEAN -o $@ $< + +#all: $(PROGRAM) + +#$(PROGRAM): $(OBJECTS) +# $(CXX) -o $(PROGRAM) $(OBJECTS) -lopenjpeg -L ../.. `wx-config-2.8 --libs` + +#clean: +# rm -f *.o $(PROGRAM) diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.dsp b/contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.dsp new file mode 100644 index 0000000000..4939f646e0 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.dsp @@ -0,0 +1,290 @@ +# Microsoft Developer Studio Project File - Name="OPJViewer" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=OPJVIEWER - WIN32 RELEASE +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "OPJViewer.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "OPJViewer.mak" CFG="OPJVIEWER - WIN32 RELEASE" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "OPJViewer - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "OPJViewer - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "OPJViewer - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "$(WXWIN28)\lib\vc_lib\msw" /I "$(WXWIN28)\include" /I ".." /I "..\libopenjpeg" /I "$(MXFLIB)" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /D "OPJ_HTMLABOUT" /D "OPJ_MANYFORMATS" /D "OPJ_INICONFIG" /FR /FD /Zm200 /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x409 /i "$(WXWIN28)\include" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib wxzlib.lib wxregex.lib wxpng.lib wxjpeg.lib wxbase28.lib wxmsw28_core.lib wxmsw28_html.lib wxmsw28_adv.lib wxmsw28_core.lib wxbase28.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregex.lib wxexpat.lib LibOpenJPEG_JPWL.lib mxflib.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libcmt.lib" /libpath:"$(WXWIN28)\lib\vc_lib" /libpath:"..\jpwl\Release" /libpath:"$(MXFLIB)\build\msvc\Release" /IGNORE:4089 +# SUBTRACT LINK32 /pdb:none /nodefaultlib +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Desc=Update build number +PostBuild_Cmds=buildupdate.bat +# End Special Build Tool + +!ELSEIF "$(CFG)" == "OPJViewer - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "OPJViewer___Win32_Debug" +# PROP BASE Intermediate_Dir "OPJViewer___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "$(WXWIN28)\INCLUDE" /I "$(WXWIN28)\lib\vc_lib\msw" /I "$(WXWIN28)\include" /I ".." /I "..\libopenjpeg" /I "$(MXFLIB)" /D "_DEBUG" /D "__WXDEBUG__" /D WXDEBUG=1 /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /D "OPJ_INICONFIG" /D "OPJ_MANYFORMATS" /D "USE_JPSEC" /FR /FD /GZ /Zm200 /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /i "$(WXWIN28)\include" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib wxzlibd.lib wxregexd.lib wxpngd.lib wxjpegd.lib wxtiffd.lib wxbase28d.lib wxmsw28d_core.lib wxmsw28d_html.lib wxmsw28d_adv.lib LibOpenJPEG_JPWLd.lib mxflib.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcmtd.lib" /pdbtype:sept /libpath:"$(WXWIN28)\lib\vc_lib" /libpath:"..\jpwl\Debug" /libpath:"$(MXFLIB)\build\msvc\Debug" +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "OPJViewer - Win32 Release" +# Name "OPJViewer - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\source\imagjpeg2000.cpp +# End Source File +# Begin Source File + +SOURCE=.\source\imagmxf.cpp +# End Source File +# Begin Source File + +SOURCE=..\codec\index.c +# End Source File +# Begin Source File + +SOURCE=.\source\OPJAbout.cpp +# End Source File +# Begin Source File + +SOURCE=.\source\OPJDialogs.cpp +# End Source File +# Begin Source File + +SOURCE=.\source\OPJThreads.cpp +# End Source File +# Begin Source File + +SOURCE=.\source\OPJViewer.cpp +# End Source File +# Begin Source File + +SOURCE=.\source\wxj2kparser.cpp +# End Source File +# Begin Source File + +SOURCE=.\source\wxjp2parser.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\source\about_htm.h +# End Source File +# Begin Source File + +SOURCE=.\source\build.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\source\imagjpeg2000.h +# End Source File +# Begin Source File + +SOURCE=.\source\imagmxf.h +# End Source File +# Begin Source File + +SOURCE=..\codec\index.h +# End Source File +# Begin Source File + +SOURCE=.\source\OPJViewer.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\source\wx\msw\blank.cur +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\bullseye.cur +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\cdrom.ico +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\computer.ico +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\cross.cur +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\drive.ico +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\file1.ico +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\floppy.ico +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\folder1.ico +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\folder2.ico +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\hand.cur +# End Source File +# Begin Source File + +SOURCE=.\source\icon1.xpm +# End Source File +# Begin Source File + +SOURCE=.\source\icon2.xpm +# End Source File +# Begin Source File + +SOURCE=.\source\icon3.xpm +# End Source File +# Begin Source File + +SOURCE=.\source\icon4.xpm +# End Source File +# Begin Source File + +SOURCE=.\source\icon5.xpm +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\magnif1.cur +# End Source File +# Begin Source File + +SOURCE=.\source\opj_logo.xpm +# End Source File +# Begin Source File + +SOURCE=.\source\OPJChild.ico +# End Source File +# Begin Source File + +SOURCE=.\source\OPJChild16.xpm +# End Source File +# Begin Source File + +SOURCE=.\source\OPJViewer.ico +# End Source File +# Begin Source File + +SOURCE=.\source\OPJViewer.rc +# End Source File +# Begin Source File + +SOURCE=.\source\OPJViewer16.xpm +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\pbrush.cur +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\pencil.cur +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\pntleft.cur +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\pntright.cur +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\removble.ico +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\rightarr.cur +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\roller.cur +# End Source File +# Begin Source File + +SOURCE=.\source\wx\msw\std.ico +# End Source File +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.dsw b/contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.dsw new file mode 100644 index 0000000000..772043d509 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.dsw @@ -0,0 +1,56 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "LibOpenJPEG_JPWL"=..\jpwl\LibOpenJPEG_JPWL.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "OPJViewer"=.\OPJViewer.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG_JPWL + End Project Dependency +}}} + +############################################################################### + +Project: "mxflib"="..\..\..\..\mxflib-1.0.0\build\msvc\mxflib.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.iss b/contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.iss new file mode 100644 index 0000000000..d4cfadbb1c --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/OPJViewer.iss @@ -0,0 +1,48 @@ +; Script generated by the Inno Setup Script Wizard. +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! + +[Setup] +AppName=OPJViewer +AppVerName=OPJViewer 0.4 beta +AppPublisher=OpenJPEG +AppPublisherURL=http://www.openjpeg.org +AppSupportURL=http://www.openjpeg.org +AppUpdatesURL=http://www.openjpeg.org +DefaultDirName={pf}\OPJViewer +DefaultGroupName=OPJViewer +OutputDir=setup +OutputBaseFilename=OPJViewer04beta_setup +Compression=lzma +SolidCompression=true +InfoBeforeFile=source\readmebefore.txt +InfoAfterFile=source\readmeafter.txt +LicenseFile=source\license.txt +VersionInfoVersion=0.4.0.0 +VersionInfoCompany=OpenJPEG +VersionInfoDescription=JPEG 2000 viewer +ShowLanguageDialog=yes +SetupIconFile=source\OPJViewer.ico + +[Languages] +Name: english; MessagesFile: compiler:Default.isl + +[Tasks] +Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked + +[Files] +Source: Release\OPJViewer.exe; DestDir: {app}; Flags: ignoreversion +;Source: about\about.htm; DestDir: {app}/about; Flags: ignoreversion +;Source: about\opj_logo.png; DestDir: {app}/about; Flags: ignoreversion +; NOTE: Don't use "Flags: ignoreversion" on any shared system files + +[Icons] +Name: {group}\OPJViewer; Filename: {app}\OPJViewer.exe; WorkingDir: {app}; IconIndex: 0 +Name: {group}\{cm:UninstallProgram,OPJViewer}; Filename: {uninstallexe} +Name: {userdesktop}\OPJViewer; Filename: {app}\OPJViewer.exe; Tasks: desktopicon; WorkingDir: {app}; IconIndex: 0 + +[Run] +Filename: {app}\OPJViewer.exe; Description: {cm:LaunchProgram,OPJViewer}; Flags: nowait postinstall skipifsilent; WorkingDir: {app} + +[Registry] +Root: HKCU; Subkey: Software\OpenJPEG; ValueType: none; ValueData: 1; Flags: uninsdeletekey; Tasks: ; Languages: +Root: HKCU; Subkey: Software\OpenJPEG\OPJViewer; ValueType: none; ValueData: 1; Flags: uninsdeletekey; Tasks: ; Languages: diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/Readme.txt b/contrib/menuetlibc/openjpeg/OPJViewer/Readme.txt new file mode 100644 index 0000000000..7eb3e4673f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/Readme.txt @@ -0,0 +1,100 @@ +=============================================================================== + JPEG2000 Visualization Software - OPJViewer + + Version 0.4 beta +=============================================================================== + + +1. Scope +============= + +This document describes the installation and use of the OPJViewer in the framework of OpenJPEG library. + +This implementation has been developed using the OpenJPEG library as decoding engine and wxWidgets 2.8 as GUI engine. + +If you find some bugs or if you have problems using the viewer, please send an e-mail to jpwl@diei.unipg.it + +2. Installing the viewer +========================== + +There are two options available, at the moment: + +a) compile from source code +b) download a precompiled binary. + +In order to use option a), it is mandatory to have compiled and built the LibOpenJPEG_JPWL library and the wxWidgets 2.8 framework (you have to download it from http://www.wxwidgets.org/ and compile the wx* libraries). + +2.1. Compiling the source code in Windows +------------------------------------------- + +The steps required to compile the viewer under windows are: + +a) Download at least the libopenjpeg, jpwl, and opjviewer folders from the SVN trunk. +b) Open the OPJViewer.dsw workspace with Visual C++ 6 and activate the "OPJViewer - Win32 Release" configuration. +c) In the configuration settings, go to the C++ tab and modify the wxWidgets paths in order to reflect your wx* install configuration (Preprocessor -> Additional include directories): simply update each instance of the two wx paths, do not remove or add them. +d) In the configuration settings, go to the Link tab and modify the wxWidgets path in order to reflect your wx* install configuration (Input -> Additional library path): simply update the wx path. +e) In the configuration settings, go to the Resources tab and modify the wxWidgets path in order to reflect your wx* install configuration (Additional resource include directories): simply update the wx path. +f) Build! +g) Run! +h) (OPTIONAL) Prepare an installer by compiling the InnoSetup script OPJViewer.iss (you need to download InnoSetup from http://www.jrsoftware.org/isinfo.php). + +2.1.1 Additional libraries +---------------------------- + +Since we are also working on the Digital Cinema JPEG 2000, we are integrating the viewer with the MXF library, which is used to prepare the DCPs for digital movies. You can enable its linking in the code by specifying the USE_MXF preprocessor directive but, remember, the integration is at a very early stage. + +2.2. Compiling the source code in Unix-like systems +----------------------------------------------------- + +The porting is possible and under way. + + +3. General information on the viewer +==================================== + +This viewer is conceived to open and display information and image content of J2K, JP2, and MJ2 files. +The viewer application interface is divided into three main panels: +- a browsing pane; +- a viewing pane; +- a log/peek pane. + +The browsing pane will present the markers or boxes hierarchy, with position (byte number where marker/box starts and stops) and length information (i.e., inner length as signalled by marker/box and total length, with marker/box sign included), in the following form: + +filename +| +|_ #000: Marker/Box short name (Hex code) +| | +| |_ *** Marker/Box long name *** +| |_ startbyte > stopbyte, inner_length + marker/box sign length (total length) +| |_ Additional info, depending on the marker/box type +| |_ ... +| +|_ #001: Marker/Box short name (Hex code) +| | +| |_ ... +| +... + + +The viewing pane will display the decoded image contained in the JPEG 2000 file. +It should display correctly images as large as 4000x2000, provided that a couple of GB of RAM are available. Nothing is known about the display of larger sizes: let us know if you manage to get it working. + + +The log/peek pane is shared among two different subpanels: + +- the log panel will report a lot of debugging info coming out from the wx GUI as well as from the openjpeg library +- the peek pane tries to give a peek on the codestream/file portion which is currently selected in the browsing pane. It shows both hex and ascii values corresponding to the marker/box section. + + +4. Known bugs and limitations +=============================== + +4.1. Bugs +----------- + +* + +4.2. Limitations +------------------ + +* For mj2 files, rendering is only in B/W diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/about/about.htm b/contrib/menuetlibc/openjpeg/OPJViewer/about/about.htm new file mode 100644 index 0000000000..fec6028fb4 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/about/about.htm @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + +
+

+
+OPJViewer v0.2 alpha
+A JPEG 2000 image viewer +
+
OpenJPEG
+The OpenJPEG library is an open-source JPEG 2000 codec written in C language. +In addition to the basic codec, various other features are under development, +among them the JP2 and MJ2 (Motion JPEG 2000) file formats, an indexing tool +useful for the JPIP protocol, JPWL-tools for error-resilience, ... +
+OpenJPEG is © 2002-2007 TELE - Université Catholique de Louvain
+OPJViewer is also © 2005-2007 DSPLab - Università degli studi di Perugia +
+ + diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/about/opj_logo.png b/contrib/menuetlibc/openjpeg/OPJViewer/about/opj_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0f43840a0184278d122f52bbbc11a943b888eec4 GIT binary patch literal 6500 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 KMNUMnLSTZ7N^0N$ literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/buildupdate.bat b/contrib/menuetlibc/openjpeg/OPJViewer/buildupdate.bat new file mode 100644 index 0000000000..0aae1c1c15 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/buildupdate.bat @@ -0,0 +1,15 @@ +::== buildupdate.bat +@echo off +setLocal EnableDelayedExpansion + +for /f "tokens=2,* delims=^(^) " %%a in ('find /v "" ^< .\source\build.h') do ( +rem echo %%a +set /A M = %%a + 1 +echo Build %%a done^! +echo wxT^("!M!"^) > buildtemp283746825t347 +) + +if exist buildtemp283746825t347 move /Y buildtemp283746825t347 .\source\build.h +if exist buildtemp283746825t347 del /F /Q buildtemp283746825t347 + +::== \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJAbout.cpp b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJAbout.cpp new file mode 100644 index 0000000000..ecc5f45d18 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJAbout.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita'  degli studi di Perugia (UPG), Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifdef USE_MXF +#include "mxflib/mxflib.h" +#endif // USE_MXF + +#include "OPJViewer.h" + +// about window for the frame +void OPJFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) +{ +#ifdef OPJ_HTMLABOUT +#include "about_htm.h" +#include "opj_logo.xpm" + + wxBoxSizer *topsizer; + wxHtmlWindow *html; + wxDialog dlg(this, wxID_ANY, wxString(_("About"))); + + wxMemoryFSHandler::AddFile(wxT("opj_logo.xpm"), wxBitmap(opj_logo), wxBITMAP_TYPE_XPM); + + topsizer = new wxBoxSizer(wxVERTICAL); + + html = new wxHtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(320, 250), wxHW_SCROLLBAR_NEVER); + html->SetBorders(0); + //html->LoadPage(wxT("about/about.htm")); + //html->SetPage("Hello, world!"); + html->SetPage(htmlaboutpage); + html->SetSize(html->GetInternalRepresentation()->GetWidth(), + html->GetInternalRepresentation()->GetHeight()); + + topsizer->Add(html, 1, wxALL, 10); + + topsizer->Add(new wxStaticLine(&dlg, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 10); + + wxButton *bu1 = new wxButton(&dlg, wxID_OK, wxT("OK")); + bu1->SetDefault(); + + topsizer->Add(bu1, 0, wxALL | wxALIGN_RIGHT, 15); + + dlg.SetSizer(topsizer); + topsizer->Fit(&dlg); + + dlg.ShowModal(); + +#else + + wxMessageBox(wxString::Format(OPJ_APPLICATION_TITLEBAR + wxT("\n\n") + wxT("Built with %s and OpenJPEG ") + wxT(OPENJPEG_VERSION) + wxT("\non ") wxT(__DATE__) wxT(", ") wxT(__TIME__) + wxT("\nRunning under %s\n\n") + OPJ_APPLICATION_COPYRIGHT, + wxVERSION_STRING, + wxGetOsDescription().c_str()), + wxT("About ") OPJ_APPLICATION_NAME, + wxOK | wxICON_INFORMATION, + this + ); + +#endif + +} diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJChild.ico b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJChild.ico new file mode 100644 index 0000000000000000000000000000000000000000..7a127189d5bd3506e6c763205e60631369603798 GIT binary patch literal 1078 zcmd5*OAf*y5PfZ3TaG|nnC`fOmvG&ya1B?z3deD2OuEK5d_pBnOw|})JD?#x6Q#k98nB$Z4$B}T)<#237tT3a3Hb2Bd+{iIWJuIj zaM1$5d|qG_K9+dohYa%_ZbAVjP5I1)nEr@Y`^%r7_gkG$eSV+ul3cu(x4WF~fbLh4 z>q?(X=W9ytb4Pz2mOai0dpa0ux|{mEkA-i2JY`xLm}&34rYCEBEnable(false); + wxPanel* mjpeg2000Settings = CreatePart3SettingsPage(m_settingsNotebook); + if (!wxGetApp().m_enabledeco) + mjpeg2000Settings->Enable(false); +#ifdef USE_JPWL + wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook); + if (!wxGetApp().m_enabledeco) + jpwlSettings->Enable(false); +#endif // USE_JPWL + + m_settingsNotebook->AddPage(mainSettings, wxT("Display"), false); + m_settingsNotebook->AddPage(jpeg2000Settings, wxT("JPEG 2000"), false); + m_settingsNotebook->AddPage(mjpeg2000Settings, wxT("MJPEG 2000"), false); +#ifdef USE_JPWL + m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false); +#endif // USE_JPWL + + LayoutDialog(); +} + +OPJDecoderDialog::~OPJDecoderDialog() +{ +} + +wxPanel* OPJDecoderDialog::CreateMainSettingsPage(wxWindow* parent) +{ + wxPanel* panel = new wxPanel(parent, wxID_ANY); + + // top sizer + wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL); + + // sub top sizer + wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL); + + // add decoding enabling check box + subtopSizer->Add( + m_enabledecoCheck = new wxCheckBox(panel, OPJDECO_ENABLEDECO, wxT("Enable decoding"), wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 5); + m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco); + + // add parsing enabling check box + subtopSizer->Add( + m_enableparseCheck = new wxCheckBox(panel, OPJDECO_ENABLEPARSE, wxT("Enable parsing"), wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 5); + m_enableparseCheck->SetValue(wxGetApp().m_enableparse); + + // resize settings, column + wxString choices[] = {wxT("Don't resize"), wxT("Low quality"), wxT("High quality")}; + m_resizeBox = new wxRadioBox(panel, OPJDECO_RESMETHOD, + wxT("Resize method"), + wxDefaultPosition, wxDefaultSize, + WXSIZEOF(choices), + choices, + 1, + wxRA_SPECIFY_ROWS); + m_resizeBox->SetSelection(wxGetApp().m_resizemethod + 1); + + subtopSizer->Add(m_resizeBox, 0, wxGROW | wxALL, 5); + + topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5); + + // assign top and fit it + panel->SetSizer(topSizer); + topSizer->Fit(panel); + + return panel; +} + +wxPanel* OPJDecoderDialog::CreatePart3SettingsPage(wxWindow* parent) +{ + wxPanel* panel = new wxPanel(parent, wxID_ANY); + + // top sizer + wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL); + + // add some space + //topSizer->AddSpacer(5); + + // sub top sizer + wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL); + + // frame settings, column + wxStaticBox* frameBox = new wxStaticBox(panel, wxID_ANY, wxT("Frame")); + wxBoxSizer* frameSizer = new wxStaticBoxSizer(frameBox, wxVERTICAL); + + // selected frame number, row + wxBoxSizer* framenumSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + framenumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Displayed frame:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 5); + + // add some horizontal space + framenumSizer->Add(5, 5, 1, wxALL, 0); + + // add the value control + framenumSizer->Add( + m_framenumCtrl = new wxSpinCtrl(panel, OPJDECO_FRAMENUM, + wxString::Format(wxT("%d"), wxGetApp().m_framenum), + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxSP_ARROW_KEYS, + 1, 100000, wxGetApp().m_framenum), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); + + frameSizer->Add(framenumSizer, 0, wxGROW | wxALL, 5); + + subtopSizer->Add(frameSizer, 0, wxGROW | wxALL, 5); + + topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5); + + // assign top and fit it + panel->SetSizer(topSizer); + topSizer->Fit(panel); + + return panel; +} + +wxPanel* OPJDecoderDialog::CreatePart1SettingsPage(wxWindow* parent) +{ + wxPanel* panel = new wxPanel(parent, wxID_ANY); + + // top sizer + wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL); + + // add some space + //topSizer->AddSpacer(5); + + // sub top sizer + wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL); + + // resolutions settings, column + wxStaticBox* resolutionBox = new wxStaticBox(panel, wxID_ANY, wxT("Resolutions")); + wxBoxSizer* resolutionSizer = new wxStaticBoxSizer(resolutionBox, wxVERTICAL); + + // reduce factor sizer, row + wxBoxSizer* reduceSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + reduceSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Reduce factor:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 5); + + // add some horizontal space + reduceSizer->Add(5, 5, 1, wxALL, 0); + + // add the value control + reduceSizer->Add( + m_reduceCtrl = new wxSpinCtrl(panel, OPJDECO_REDUCEFACTOR, + wxString::Format(wxT("%d"), wxGetApp().m_reducefactor), + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxSP_ARROW_KEYS, + 0, 10000, wxGetApp().m_reducefactor), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); + + resolutionSizer->Add(reduceSizer, 0, wxGROW | wxALL, 5); + + subtopSizer->Add(resolutionSizer, 0, wxGROW | wxALL, 5); + + // quality layer settings, column + wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers")); + wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL); + + // quality layers sizer, row + wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality layers:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 5); + + // add some horizontal space + qualitySizer->Add(5, 5, 1, wxALL, 0); + + // add the value control + qualitySizer->Add( + m_layerCtrl = new wxSpinCtrl(panel, OPJDECO_QUALITYLAYERS, + wxString::Format(wxT("%d"), wxGetApp().m_qualitylayers), + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxSP_ARROW_KEYS, + 0, 100000, wxGetApp().m_qualitylayers), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); + + layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 5); + + subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 5); + + // component settings, column + wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components")); + wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL); + + // quality layers sizer, row + wxBoxSizer* numcompsSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component displayed:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 5); + + // add some horizontal space + numcompsSizer->Add(5, 5, 1, wxALL, 0); + + // add the value control + numcompsSizer->Add( + m_numcompsCtrl = new wxSpinCtrl(panel, OPJDECO_NUMCOMPS, + wxString::Format(wxT("%d"), wxGetApp().m_components), + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxSP_ARROW_KEYS, + 0, 100000, wxGetApp().m_components), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); + m_numcompsCtrl->Enable(true); + + compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5); + + subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5); + + topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5); + + // assign top and fit it + panel->SetSizer(topSizer); + topSizer->Fit(panel); + + return panel; +} + +#ifdef USE_JPWL +wxPanel* OPJDecoderDialog::CreatePart11SettingsPage(wxWindow* parent) +{ + wxPanel* panel = new wxPanel(parent, wxID_ANY); + + // top sizer + wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL); + + // add some space + //topSizer->AddSpacer(5); + + // sub top sizer + wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL); + + // add JPWL enabling check box + subtopSizer->Add( + m_enablejpwlCheck = new wxCheckBox(panel, OPJDECO_ENABLEJPWL, wxT("Enable JPWL"), wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 5); + m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwl); + + // component settings, column + wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components")); + wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL); + + // expected components sizer, row + wxBoxSizer* expcompsSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + expcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Expected comps.:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 5); + + // add some horizontal space + expcompsSizer->Add(5, 5, 1, wxALL, 0); + + // add the value control + expcompsSizer->Add( + m_expcompsCtrl = new wxSpinCtrl(panel, OPJDECO_EXPCOMPS, + wxString::Format(wxT("%d"), wxGetApp().m_expcomps), + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxSP_ARROW_KEYS, + 1, 100000, wxGetApp().m_expcomps), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); + m_expcompsCtrl->Enable(wxGetApp().m_enablejpwl); + + compoSizer->Add(expcompsSizer, 0, wxGROW | wxALL, 5); + + subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5); + + // tiles settings, column + wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles")); + wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL); + + // maximum tiles sizer, row + wxBoxSizer* maxtileSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + maxtileSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Max. no. of tiles:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 5); + + // add some horizontal space + maxtileSizer->Add(5, 5, 1, wxALL, 0); + + // add the value control + maxtileSizer->Add( + m_maxtilesCtrl = new wxSpinCtrl(panel, OPJDECO_MAXTILES, + wxString::Format(wxT("%d"), wxGetApp().m_maxtiles), + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxSP_ARROW_KEYS, + 1, 100000, wxGetApp().m_maxtiles), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); + m_maxtilesCtrl->Enable(wxGetApp().m_enablejpwl); + + tileSizer->Add(maxtileSizer, 0, wxGROW | wxALL, 5); + + subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 5); + + topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5); + + // assign top and fit it + panel->SetSizer(topSizer); + topSizer->Fit(panel); + + return panel; +} + +void OPJDecoderDialog::OnEnableDeco(wxCommandEvent& event) +{ + size_t pp; + + if (event.IsChecked()) { + wxLogMessage(wxT("Decoding enabled")); + m_resizeBox->Enable(true); + // enable all tabs except ourselves + for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) { + if (m_settingsNotebook->GetPageText(pp) != wxT("Display")) + m_settingsNotebook->GetPage(pp)->Enable(true); + } + } else { + wxLogMessage(wxT("Decoding disabled")); + m_resizeBox->Enable(false); + // disable all tabs except ourselves + for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) { + if (m_settingsNotebook->GetPageText(pp) != wxT("Display")) + m_settingsNotebook->GetPage(pp)->Enable(false); + } + } + +} + +void OPJDecoderDialog::OnEnableJPWL(wxCommandEvent& event) +{ + if (event.IsChecked()) { + wxLogMessage(wxT("JPWL enabled")); + m_expcompsCtrl->Enable(true); + m_maxtilesCtrl->Enable(true); + } else { + wxLogMessage(wxT("JPWL disabled")); + m_expcompsCtrl->Enable(false); + m_maxtilesCtrl->Enable(false); + } + +} + +#endif // USE_JPWL + + + + +// ---------------------------------------------------------------------------- +// OPJEncoderDialog +// ---------------------------------------------------------------------------- + +IMPLEMENT_CLASS(OPJEncoderDialog, wxPropertySheetDialog) + +BEGIN_EVENT_TABLE(OPJEncoderDialog, wxPropertySheetDialog) + EVT_CHECKBOX(OPJENCO_ENABLECOMM, OPJEncoderDialog::OnEnableComm) + EVT_CHECKBOX(OPJENCO_ENABLEINDEX, OPJEncoderDialog::OnEnableIdx) + EVT_CHECKBOX(OPJENCO_ENABLEPOC, OPJEncoderDialog::OnEnablePoc) + EVT_RADIOBUTTON(OPJENCO_RATERADIO, OPJEncoderDialog::OnRadioQualityRate) + EVT_RADIOBUTTON(OPJENCO_QUALITYRADIO, OPJEncoderDialog::OnRadioQualityRate) +#ifdef USE_JPWL + EVT_CHECKBOX(OPJENCO_ENABLEJPWL, OPJEncoderDialog::OnEnableJPWL) + EVT_CHOICE(OPJENCO_HPROT, OPJEncoderDialog::OnHprotSelect) + EVT_CHOICE(OPJENCO_PPROT, OPJEncoderDialog::OnPprotSelect) + EVT_CHOICE(OPJENCO_SENSI, OPJEncoderDialog::OnSensiSelect) +#endif // USE_JPWL +END_EVENT_TABLE() + +OPJEncoderDialog::OPJEncoderDialog(wxWindow* win, int dialogType) +{ + SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY); + + Create(win, wxID_ANY, wxT("Encoder settings"), + wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER) + ); + + CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP)); + + m_settingsNotebook = GetBookCtrl(); + + wxPanel* jpeg2000_1Settings = CreatePart1_1SettingsPage(m_settingsNotebook); + wxPanel* jpeg2000_2Settings = CreatePart1_2SettingsPage(m_settingsNotebook); + wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook); +#ifdef USE_JPWL + wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook); +#endif // USE_JPWL + +#ifdef USE_JPWL + m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false); +#endif // USE_JPWL + m_settingsNotebook->AddPage(jpeg2000_1Settings, wxT("JPEG 2000 - 1"), false); + m_settingsNotebook->AddPage(jpeg2000_2Settings, wxT("JPEG 2000 - 2"), false); + m_settingsNotebook->AddPage(mainSettings, wxT("General"), false); + + LayoutDialog(); +} + +OPJEncoderDialog::~OPJEncoderDialog() +{ +} + +wxPanel* OPJEncoderDialog::CreateMainSettingsPage(wxWindow* parent) +{ + wxPanel* panel = new wxPanel(parent, wxID_ANY); + + // top sizer + wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL); + + // sub top sizer + wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL); + + topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5); + + // assign top and fit it + panel->SetSizer(topSizer); + topSizer->Fit(panel); + + return panel; +} + +#ifdef USE_JPWL +wxPanel* OPJEncoderDialog::CreatePart11SettingsPage(wxWindow* parent) +{ + wxPanel* panel = new wxPanel(parent, wxID_ANY); + int specno; + + // top sizer + wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL); + + // add JPWL enabling check box + topSizer->Add( + m_enablejpwlCheck = new wxCheckBox(panel, OPJENCO_ENABLEJPWL, wxT("Enable JPWL"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL | wxALIGN_CENTER, 5); + m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwle); + + // sub top sizer + wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3); + + // header settings, column + wxStaticBox* headerBox = new wxStaticBox(panel, wxID_ANY, wxT("Header protection")); + wxBoxSizer* headerSizer = new wxStaticBoxSizer(headerBox, wxVERTICAL); + + // info sizer, row + wxBoxSizer* info1Sizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + info1Sizer->Add(new wxStaticText(panel, wxID_ANY, + wxT("Type")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 1); + + // add some horizontal space + info1Sizer->Add(3, 3, 1, wxALL, 0); + + // add some text + info1Sizer->Add(new wxStaticText(panel, wxID_ANY, + wxT("Tile part")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 1); + + headerSizer->Add(info1Sizer, 0, wxGROW | wxALL, 0); + + // specify specs + wxString hprotvalues[] = {wxT("None"), wxT("Pred."), wxT("CRC16"), wxT("CRC32"), + wxT("RS37"), wxT("RS38"), wxT("RS40"), wxT("RS43"), wxT("RS45"), wxT("RS48"), + wxT("RS51"), wxT("RS53"), wxT("RS56"), wxT("RS64"), wxT("RS75"), wxT("RS80"), + wxT("RS85"), wxT("RS96"), wxT("RS112"), wxT("RS128")}; + for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) { + + // tile+hprot sizer, row + wxBoxSizer* tilehprotSizer = new wxBoxSizer(wxHORIZONTAL); + + // add the value selection + tilehprotSizer->Add( + m_hprotChoice[specno] = new wxChoice(panel, OPJENCO_HPROT, + wxDefaultPosition, wxSize(60, wxDefaultCoord), + WXSIZEOF(hprotvalues), hprotvalues), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1); + m_hprotChoice[specno]->SetSelection(wxGetApp().m_hprotsel[specno]); + + // add some horizontal space + tilehprotSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + tilehprotSizer->Add( + m_htileCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_HTILE, + wxString::Format(wxT("%d"), wxGetApp().m_htileval[specno]), + wxDefaultPosition, wxSize(45, wxDefaultCoord), + wxSP_ARROW_KEYS, + 0, JPWL_MAXIMUM_TILES - 1, 0), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1); + + headerSizer->Add(tilehprotSizer, 0, wxGROW | wxALL, 0); + } + + wxCommandEvent event1; + OnHprotSelect(event1); + + subtopSizer->Add(headerSizer, 0, wxGROW | wxALL, 3); + + // packet settings, column + wxStaticBox* packetBox = new wxStaticBox(panel, wxID_ANY, wxT("Packet protection")); + wxBoxSizer* packetSizer = new wxStaticBoxSizer(packetBox, wxVERTICAL); + + // info sizer, row + wxBoxSizer* info2Sizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + info2Sizer->Add(new wxStaticText(panel, wxID_ANY, + wxT("Type")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 1); + + // add some horizontal space + info2Sizer->Add(3, 3, 1, wxALL, 0); + + // add some text + info2Sizer->Add(new wxStaticText(panel, wxID_ANY, + wxT("Tile part")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 1); + + // add some horizontal space + info2Sizer->Add(3, 3, 1, wxALL, 0); + + // add some text + info2Sizer->Add(new wxStaticText(panel, wxID_ANY, + wxT("Packet")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 1); + + packetSizer->Add(info2Sizer, 0, wxGROW | wxALL, 0); + + // specify specs + wxString pprotvalues[] = {wxT("None"), wxT("Pred."), wxT("CRC16"), wxT("CRC32"), + wxT("RS37"), wxT("RS38"), wxT("RS40"), wxT("RS43"), wxT("RS45"), wxT("RS48"), + wxT("RS51"), wxT("RS53"), wxT("RS56"), wxT("RS64"), wxT("RS75"), wxT("RS80"), + wxT("RS85"), wxT("RS96"), wxT("RS112"), wxT("RS128")}; + for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) { + + // tile+pprot sizer, row + wxBoxSizer* tilepprotSizer = new wxBoxSizer(wxHORIZONTAL); + + // add the value selection + tilepprotSizer->Add( + m_pprotChoice[specno] = new wxChoice(panel, OPJENCO_PPROT, + wxDefaultPosition, wxSize(60, wxDefaultCoord), + WXSIZEOF(pprotvalues), pprotvalues), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1); + m_pprotChoice[specno]->SetSelection(wxGetApp().m_pprotsel[specno]); + + // add some horizontal space + tilepprotSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + tilepprotSizer->Add( + m_ptileCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_PTILE, + wxString::Format(wxT("%d"), wxGetApp().m_ptileval[specno]), + wxDefaultPosition, wxSize(45, wxDefaultCoord), + wxSP_ARROW_KEYS, + 0, JPWL_MAXIMUM_TILES - 1, 0), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1); + + // add some horizontal space + tilepprotSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + tilepprotSizer->Add( + m_ppackCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_PPACK, + wxString::Format(wxT("%d"), wxGetApp().m_ppackval[specno]), + wxDefaultPosition, wxSize(50, wxDefaultCoord), + wxSP_ARROW_KEYS, + 0, 2047, 0), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1); + + packetSizer->Add(tilepprotSizer, 0, wxGROW | wxALL, 0); + } + + wxCommandEvent event2; + OnPprotSelect(event2); + + subtopSizer->Add(packetSizer, 0, wxGROW | wxALL, 3); + + // sensitivity settings, column + wxStaticBox* sensiBox = new wxStaticBox(panel, wxID_ANY, wxT("Sensitivity")); + wxBoxSizer* sensiSizer = new wxStaticBoxSizer(sensiBox, wxVERTICAL); + + // info sizer, row + wxBoxSizer* info3Sizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + info3Sizer->Add(new wxStaticText(panel, wxID_ANY, + wxT("Type")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 1); + + // add some horizontal space + info3Sizer->Add(3, 3, 1, wxALL, 0); + + // add some text + info3Sizer->Add(new wxStaticText(panel, wxID_ANY, + wxT("Tile part")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 1); + + sensiSizer->Add(info3Sizer, 0, wxGROW | wxALL, 0); + + // specify specs + wxString sensivalues[] = {wxT("None"), wxT("RELATIVE ERROR"), wxT("MSE"), + wxT("MSE REDUCTION"), wxT("PSNR INCREMENT"), wxT("MAXERR"), wxT("TSE")}; + for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) { + + // tile+sensi sizer, row + wxBoxSizer* tilesensiSizer = new wxBoxSizer(wxHORIZONTAL); + + // add the value selection + tilesensiSizer->Add( + m_sensiChoice[specno] = new wxChoice(panel, OPJENCO_SENSI, + wxDefaultPosition, wxSize(110, wxDefaultCoord), + WXSIZEOF(sensivalues), sensivalues), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1); + m_sensiChoice[specno]->SetSelection(wxGetApp().m_sensisel[specno]); + + // add some horizontal space + tilesensiSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + tilesensiSizer->Add( + m_stileCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_STILE, + wxString::Format(wxT("%d"), wxGetApp().m_stileval[specno]), + wxDefaultPosition, wxSize(45, wxDefaultCoord), + wxSP_ARROW_KEYS, + 0, JPWL_MAXIMUM_TILES - 1, 0), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1); + + sensiSizer->Add(tilesensiSizer, 0, wxGROW | wxALL, 0); + } + + wxCommandEvent event3; + OnSensiSelect(event3); + + subtopSizer->Add(sensiSizer, 0, wxGROW | wxALL, 3); + + topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5); + + // assign top and fit it + panel->SetSizer(topSizer); + topSizer->Fit(panel); + + return panel; +} +#endif // USE_JPWL + +wxPanel* OPJEncoderDialog::CreatePart1_1SettingsPage(wxWindow* parent) +{ + wxPanel* panel = new wxPanel(parent, wxID_ANY); + + // top sizer + wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL); + + // add some space + //topSizer->AddSpacer(5); + + // sub top sizer + wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3); + + // image settings, column + wxStaticBox* imageBox = new wxStaticBox(panel, wxID_ANY, wxT("Image")); + wxBoxSizer* imageSizer = new wxStaticBoxSizer(imageBox, wxVERTICAL); + + // subsampling factor sizer, row + wxBoxSizer* subsSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + subsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Subsampling:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3); + + // add some horizontal space + subsSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + subsSizer->Add( + m_subsamplingCtrl = new wxTextCtrl(panel, OPJENCO_SUBSAMPLING, + wxGetApp().m_subsampling, + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxTE_LEFT), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + + imageSizer->Add(subsSizer, 0, wxGROW | wxALL, 3); + + // origin sizer, row + wxBoxSizer* imorigSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + imorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3); + + // add some horizontal space + imorigSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + imorigSizer->Add( + m_originCtrl = new wxTextCtrl(panel, OPJENCO_IMORIG, + wxGetApp().m_origin, + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxTE_LEFT), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + + imageSizer->Add(imorigSizer, 0, wxGROW | wxALL, 3); + + subtopSizer->Add(imageSizer, 0, wxGROW | wxALL, 3); + + // layer settings, column + wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers/compression")); + wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL); + + // rate factor sizer, row + wxBoxSizer* rateSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + /*rateSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Rate values:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);*/ + + // add the radio button + rateSizer->Add( + m_rateRadio = new wxRadioButton(panel, OPJENCO_RATERADIO, wxT("&Rate values"), + wxDefaultPosition, wxDefaultSize, + wxRB_GROUP), + 0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL + ); + m_rateRadio->SetValue(!(wxGetApp().m_enablequality)); + + // add some horizontal space + rateSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + rateSizer->Add( + m_rateCtrl = new wxTextCtrl(panel, OPJENCO_RATEFACTOR, + wxGetApp().m_rates, + wxDefaultPosition, wxSize(100, wxDefaultCoord), + wxTE_LEFT), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + if (wxGetApp().m_enablequality == true) + m_rateCtrl->Enable(false); + + layerSizer->Add(rateSizer, 0, wxGROW | wxALL, 3); + + // quality factor sizer, row + wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + /*qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality values:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);*/ + + // add the radio button + qualitySizer->Add( + m_qualityRadio = new wxRadioButton(panel, OPJENCO_QUALITYRADIO, wxT("&Quality values"), + wxDefaultPosition, wxDefaultSize), + 0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL + ); + m_qualityRadio->SetValue(wxGetApp().m_enablequality); + + // add some horizontal space + qualitySizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + qualitySizer->Add( + m_qualityCtrl = new wxTextCtrl(panel, OPJENCO_QUALITYFACTOR, + wxGetApp().m_quality, + wxDefaultPosition, wxSize(100, wxDefaultCoord), + wxTE_LEFT), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + if (wxGetApp().m_enablequality == false) + m_qualityCtrl->Enable(false); + + layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 3); + + subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 3); + + // wavelet settings, column + wxStaticBox* transformBox = new wxStaticBox(panel, wxID_ANY, wxT("Transforms")); + wxBoxSizer* transformSizer = new wxStaticBoxSizer(transformBox, wxVERTICAL); + + // multiple component check box + transformSizer->Add( + m_mctCheck = new wxCheckBox(panel, OPJENCO_ENABLEMCT, wxT("Multiple component"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_mctCheck->SetValue(wxGetApp().m_multicomp); + + // irreversible wavelet check box + transformSizer->Add( + m_irrevCheck = new wxCheckBox(panel, OPJENCO_ENABLEIRREV, wxT("Irreversible wavelet"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_irrevCheck->SetValue(wxGetApp().m_irreversible); + + // resolution number sizer, row + wxBoxSizer* resnumSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + resnumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Resolutions:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3); + + // add some horizontal space + resnumSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + resnumSizer->Add( + m_resolutionsCtrl = new wxSpinCtrl(panel, OPJENCO_RESNUMBER, + wxString::Format(wxT("%d"), wxGetApp().m_resolutions), + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxSP_ARROW_KEYS, + 1, 256, 6), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + + transformSizer->Add(resnumSizer, 0, wxGROW | wxALL, 3); + + subtopSizer->Add(transformSizer, 0, wxGROW | wxALL, 3); + + // codestream settings, column + wxStaticBox* codestreamBox = new wxStaticBox(panel, wxID_ANY, wxT("Codestream")); + wxBoxSizer* codestreamSizer = new wxStaticBoxSizer(codestreamBox, wxVERTICAL); + + // codeblock sizer, row + wxBoxSizer* codeblockSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + codeblockSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Codeblocks size:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3); + + // add some horizontal space + codeblockSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + codeblockSizer->Add( + m_cbsizeCtrl = new wxTextCtrl(panel, OPJENCO_CODEBLOCKSIZE, + wxGetApp().m_cbsize, + wxDefaultPosition, wxSize(100, wxDefaultCoord), + wxTE_LEFT), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + + codestreamSizer->Add(codeblockSizer, 0, wxGROW | wxALL, 3); + + // precinct sizer, row + wxBoxSizer* precinctSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + precinctSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Precincts size:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3); + + // add some horizontal space + precinctSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + precinctSizer->Add( + m_prsizeCtrl = new wxTextCtrl(panel, OPJENCO_PRECINCTSIZE, + wxGetApp().m_prsize, + wxDefaultPosition, wxSize(100, wxDefaultCoord), + wxTE_LEFT), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + + codestreamSizer->Add(precinctSizer, 0, wxGROW | wxALL, 3); + + subtopSizer->Add(codestreamSizer, 0, wxGROW | wxALL, 3); + + // tile settings, column + wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles")); + wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL); + + // tile size sizer, row + wxBoxSizer* tilesizeSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + tilesizeSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Size:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3); + + // add some horizontal space + tilesizeSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + tilesizeSizer->Add( + m_tsizeCtrl = new wxTextCtrl(panel, OPJENCO_TILESIZE, + wxGetApp().m_tsize, + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxTE_LEFT), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + + tileSizer->Add(tilesizeSizer, 0, wxGROW | wxALL, 3); + + // tile origin sizer, row + wxBoxSizer* tilorigSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + tilorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3); + + // add some horizontal space + tilorigSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + tilorigSizer->Add( + m_toriginCtrl = new wxTextCtrl(panel, OPJENCO_TILORIG, + wxGetApp().m_torigin, + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxTE_LEFT), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + + tileSizer->Add(tilorigSizer, 0, wxGROW | wxALL, 3); + + subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 3); + + // progression and profile settings, column + wxString choices[] = {wxT("LRCP"), wxT("RLCP"), wxT("RPCL"), wxT("PCRL"), wxT("CPRL"), + wxT("DCI2K24"), wxT("DCI2K48"), wxT("DCI4K")}; + progressionBox = new wxRadioBox(panel, OPJENCO_PROGRESSION, + wxT("Progression order/profile"), + wxDefaultPosition, wxDefaultSize, + WXSIZEOF(choices), + choices, + 3, + wxRA_SPECIFY_COLS); + progressionBox->SetSelection(wxGetApp().m_progression); + + subtopSizer->Add(progressionBox, 0, wxGROW | wxALL, 3); + + topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5); + + // assign top and fit it + panel->SetSizer(topSizer); + topSizer->Fit(panel); + + return panel; +} + +wxPanel* OPJEncoderDialog::CreatePart1_2SettingsPage(wxWindow* parent) +{ + wxPanel* panel = new wxPanel(parent, wxID_ANY); + + // top sizer + wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL); + + // add some space + //topSizer->AddSpacer(5); + + // sub top sizer + wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3); + + // resilience settings, column + wxStaticBox* resilBox = new wxStaticBox(panel, wxID_ANY, wxT("Error resilience")); + wxBoxSizer* resilSizer = new wxStaticBoxSizer(resilBox, wxVERTICAL); + + // resil2 sizer, row + wxBoxSizer* resil2Sizer = new wxBoxSizer(wxHORIZONTAL); + + // SOP check box + resil2Sizer->Add( + m_sopCheck = new wxCheckBox(panel, OPJENCO_ENABLESOP, wxT("SOP"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_sopCheck->SetValue(wxGetApp().m_enablesop); + + // EPH check box + resil2Sizer->Add( + m_ephCheck = new wxCheckBox(panel, OPJENCO_ENABLEEPH, wxT("EPH"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_ephCheck->SetValue(wxGetApp().m_enableeph); + + resilSizer->Add(resil2Sizer, 0, wxGROW | wxALL, 3); + + // separation + resilSizer->Add(new wxStaticLine(panel, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 3); + + // resil3 sizer, row + wxFlexGridSizer* resil3Sizer = new wxFlexGridSizer(3, 3, 3); + + // BYPASS check box + resil3Sizer->Add( + m_enablebypassCheck = new wxCheckBox(panel, OPJENCO_ENABLEBYPASS, wxT("BYPASS"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_enablebypassCheck->SetValue(wxGetApp().m_enablebypass); + + // RESET check box + resil3Sizer->Add( + m_enableresetCheck = new wxCheckBox(panel, OPJENCO_ENABLERESET, wxT("RESET"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_enableresetCheck->SetValue(wxGetApp().m_enablereset); + + // RESTART check box + resil3Sizer->Add( + m_enablerestartCheck = new wxCheckBox(panel, OPJENCO_ENABLERESTART, wxT("RESTART"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_enablerestartCheck->SetValue(wxGetApp().m_enablerestart); + + // VSC check box + resil3Sizer->Add( + m_enablevscCheck = new wxCheckBox(panel, OPJENCO_ENABLEVSC, wxT("VSC"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_enablevscCheck->SetValue(wxGetApp().m_enablevsc); + + // ERTERM check box + resil3Sizer->Add( + m_enableertermCheck = new wxCheckBox(panel, OPJENCO_ENABLEERTERM, wxT("ERTERM"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_enableertermCheck->SetValue(wxGetApp().m_enableerterm); + + // SEGMARK check box + resil3Sizer->Add( + m_enablesegmarkCheck = new wxCheckBox(panel, OPJENCO_ENABLESEGMARK, wxT("SEGMARK"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_enablesegmarkCheck->SetValue(wxGetApp().m_enablesegmark); + + resilSizer->Add(resil3Sizer, 0, wxGROW | wxALL, 3); + + subtopSizer->Add(resilSizer, 0, wxGROW | wxALL, 3); + + // ROI settings, column + wxStaticBox* roiBox = new wxStaticBox(panel, wxID_ANY, wxT("Region Of Interest")); + wxBoxSizer* roiSizer = new wxStaticBoxSizer(roiBox, wxVERTICAL); + + // component number sizer, row + wxBoxSizer* roicompSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + roicompSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3); + + // add some horizontal space + roicompSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + roicompSizer->Add( + /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROICOMP, + wxT("0"), + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxSP_ARROW_KEYS, + 0, 256, 0), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + + roiSizer->Add(roicompSizer, 0, wxGROW | wxALL, 3); + + // upshift sizer, row + wxBoxSizer* roishiftSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + roishiftSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Upshift:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3); + + // add some horizontal space + roishiftSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + roishiftSizer->Add( + /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROISHIFT, + wxT("0"), + wxDefaultPosition, wxSize(80, wxDefaultCoord), + wxSP_ARROW_KEYS, + 0, 37, 0), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + + roiSizer->Add(roishiftSizer, 0, wxGROW | wxALL, 3); + + subtopSizer->Add(roiSizer, 0, wxGROW | wxALL, 3); + + // POC settings, column + wxStaticBox* pocBox = new wxStaticBox(panel, wxID_ANY, wxT("POC")); + wxBoxSizer* pocSizer = new wxStaticBoxSizer(pocBox, wxVERTICAL); + + // POC check box + pocSizer->Add( + m_enablepocCheck = new wxCheckBox(panel, OPJENCO_ENABLEPOC, wxT("Enabled (tn=rs,cs,le,re,ce,pr)"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_enablepocCheck->SetValue(wxGetApp().m_enablepoc); + + // POC sizer, row + wxBoxSizer* pocspecSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + pocspecSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Changes:")), + 0, wxALL | wxALIGN_TOP, 3); + + // add some horizontal space + pocspecSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + pocspecSizer->Add( + m_pocCtrl = new wxTextCtrl(panel, OPJENCO_POCSPEC, + wxGetApp().m_poc, + wxDefaultPosition, wxSize(140, 60), + wxTE_LEFT | wxTE_MULTILINE), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + m_pocCtrl->Enable(wxGetApp().m_enablepoc); + + pocSizer->Add(pocspecSizer, 0, wxGROW | wxALL, 3); + + subtopSizer->Add(pocSizer, 0, wxGROW | wxALL, 3); + + // Comment settings, column + wxStaticBox* commentBox = new wxStaticBox(panel, wxID_ANY, wxT("Comment")); + wxBoxSizer* commentSizer = new wxStaticBoxSizer(commentBox, wxVERTICAL); + + // commenting check box + commentSizer->Add( + m_enablecommCheck = new wxCheckBox(panel, OPJENCO_ENABLECOMM, wxT("Enabled (empty to reset)"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_enablecommCheck->SetValue(wxGetApp().m_enablecomm); + + // add some horizontal space + commentSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + commentSizer->Add( + m_commentCtrl = new wxTextCtrl(panel, OPJENCO_COMMENTTEXT, + wxGetApp().m_comment, + wxDefaultPosition, wxSize(wxDefaultCoord, 60), + wxTE_LEFT | wxTE_MULTILINE), + 0, wxGROW | wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + m_commentCtrl->Enable(wxGetApp().m_enablecomm); + + subtopSizer->Add(commentSizer, 0, wxGROW | wxALL, 3); + + // Index file settings, column + wxStaticBox* indexBox = new wxStaticBox(panel, wxID_ANY, wxT("Indexing")); + wxBoxSizer* indexSizer = new wxStaticBoxSizer(indexBox, wxVERTICAL); + + // indexing check box + indexSizer->Add( + m_enableidxCheck = new wxCheckBox(panel, OPJENCO_ENABLEINDEX, wxT("Enabled"), + wxDefaultPosition, wxDefaultSize), + 0, wxGROW | wxALL, 3); + m_enableidxCheck->SetValue(wxGetApp().m_enableidx); + + // index file sizer, row + wxBoxSizer* indexnameSizer = new wxBoxSizer(wxHORIZONTAL); + + // add some text + indexnameSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&File name:")), + 0, wxALL | wxALIGN_CENTER_VERTICAL, 3); + + // add some horizontal space + indexnameSizer->Add(3, 3, 1, wxALL, 0); + + // add the value control + indexnameSizer->Add( + m_indexCtrl = new wxTextCtrl(panel, OPJENCO_INDEXNAME, + wxGetApp().m_index, + wxDefaultPosition, wxSize(120, wxDefaultCoord), + wxTE_LEFT), + 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3); + m_indexCtrl->Enable(wxGetApp().m_enableidx); + + indexSizer->Add(indexnameSizer, 0, wxGROW | wxALL, 3); + + subtopSizer->Add(indexSizer, 0, wxGROW | wxALL, 3); + + topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5); + + // assign top and fit it + panel->SetSizer(topSizer); + topSizer->Fit(panel); + + return panel; +} + +void OPJEncoderDialog::OnEnableComm(wxCommandEvent& event) +{ + if (event.IsChecked()) { + wxLogMessage(wxT("Comment enabled")); + m_commentCtrl->Enable(true); + } else { + wxLogMessage(wxT("Comment disabled")); + m_commentCtrl->Enable(false); + } + +} + +void OPJEncoderDialog::OnEnableIdx(wxCommandEvent& event) +{ + if (event.IsChecked()) { + wxLogMessage(wxT("Index enabled")); + m_indexCtrl->Enable(true); + } else { + wxLogMessage(wxT("Index disabled")); + m_indexCtrl->Enable(false); + } + +} + +void OPJEncoderDialog::OnEnablePoc(wxCommandEvent& event) +{ + if (event.IsChecked()) { + wxLogMessage(wxT("POC enabled")); + m_pocCtrl->Enable(true); + } else { + wxLogMessage(wxT("POC disabled")); + m_pocCtrl->Enable(false); + } + +} + +void OPJEncoderDialog::OnRadioQualityRate(wxCommandEvent& event) +{ + if (event.GetId() == OPJENCO_QUALITYRADIO) { + wxLogMessage(wxT("Quality selected")); + m_rateCtrl->Enable(false); + m_qualityCtrl->Enable(true); + } else { + wxLogMessage(wxT("Rate selected")); + m_rateCtrl->Enable(true); + m_qualityCtrl->Enable(false); + } +} + +#ifdef USE_JPWL +void OPJEncoderDialog::OnEnableJPWL(wxCommandEvent& event) +{ + int specno; + + if (event.IsChecked()) { + wxLogMessage(wxT("JPWL enabled")); + for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) { + m_hprotChoice[specno]->Enable(true); + m_htileCtrl[specno]->Enable(true); + m_pprotChoice[specno]->Enable(true); + m_ptileCtrl[specno]->Enable(true); + m_ppackCtrl[specno]->Enable(true); + m_sensiChoice[specno]->Enable(true); + m_stileCtrl[specno]->Enable(true); + } + OnHprotSelect(event); + OnPprotSelect(event); + OnSensiSelect(event); + } else { + wxLogMessage(wxT("JPWL disabled")); + for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) { + m_hprotChoice[specno]->Enable(false); + m_htileCtrl[specno]->Enable(false); + m_pprotChoice[specno]->Enable(false); + m_ptileCtrl[specno]->Enable(false); + m_ppackCtrl[specno]->Enable(false); + m_sensiChoice[specno]->Enable(false); + m_stileCtrl[specno]->Enable(false); + } + } + +} + +void OPJEncoderDialog::OnHprotSelect(wxCommandEvent& event) +{ + int specno; + + // deactivate properly + for (specno = MYJPWL_MAX_NO_TILESPECS - 1; specno >= 0; specno--) { + if (!m_hprotChoice[specno]->GetSelection()) { + m_hprotChoice[specno]->Enable(false); + m_htileCtrl[specno]->Enable(false); + } else + break; + } + if (specno < (MYJPWL_MAX_NO_TILESPECS - 1)) { + m_hprotChoice[specno + 1]->Enable(true); + m_htileCtrl[specno + 1]->Enable(true); + } + + //wxLogMessage(wxT("hprot changed: %d"), specno); +} + +void OPJEncoderDialog::OnPprotSelect(wxCommandEvent& event) +{ + int specno; + + // deactivate properly + for (specno = MYJPWL_MAX_NO_TILESPECS - 1; specno >= 0; specno--) { + if (!m_pprotChoice[specno]->GetSelection()) { + m_pprotChoice[specno]->Enable(false); + m_ptileCtrl[specno]->Enable(false); + m_ppackCtrl[specno]->Enable(false); + } else + break; + } + if (specno < (MYJPWL_MAX_NO_TILESPECS - 1)) { + m_pprotChoice[specno + 1]->Enable(true); + m_ptileCtrl[specno + 1]->Enable(true); + m_ppackCtrl[specno + 1]->Enable(true); + } + + //wxLogMessage(wxT("pprot changed: %d"), specno); +} + +void OPJEncoderDialog::OnSensiSelect(wxCommandEvent& event) +{ + int specno; + + // deactivate properly + for (specno = MYJPWL_MAX_NO_TILESPECS - 1; specno >= 0; specno--) { + if (!m_sensiChoice[specno]->GetSelection()) { + m_sensiChoice[specno]->Enable(false); + m_stileCtrl[specno]->Enable(false); + } else + break; + } + if (specno < (MYJPWL_MAX_NO_TILESPECS - 1)) { + m_sensiChoice[specno + 1]->Enable(true); + m_stileCtrl[specno + 1]->Enable(true); + } + + //wxLogMessage(wxT("sprot changed: %d"), specno); +} + + +#endif // USE_JPWL + diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJThreads.cpp b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJThreads.cpp new file mode 100644 index 0000000000..3c93ee236e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJThreads.cpp @@ -0,0 +1,1268 @@ +/* + * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita'  degli studi di Perugia (UPG), Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#include "OPJViewer.h" + + +///////////////////////////////////////////////////////////////////// +// Encoding thread class +///////////////////////////////////////////////////////////////////// + +OPJEncoThread::OPJEncoThread(OPJCanvas *canvas) + : wxThread() +{ + m_count = 0; + m_canvas = canvas; +} + +void OPJEncoThread::WriteText(const wxString& text) +{ + wxString msg; + + // before doing any GUI calls we must ensure that this thread is the only + // one doing it! + +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif // __WXGTK__ + + msg << text; + m_canvas->WriteText(msg); + +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif // __WXGTK__ +} + +void OPJEncoThread::OnExit() +{ + wxCriticalSectionLocker locker(wxGetApp().m_enco_critsect); + + wxArrayThread& ethreads = wxGetApp().m_enco_threads; + ethreads.Remove(this); + + if (ethreads.IsEmpty() ) + { + // signal the main thread that there are no more threads left if it is + // waiting for us + if (wxGetApp().m_enco_waitingUntilAllDone) { + wxGetApp().m_enco_waitingUntilAllDone = false; + wxGetApp().m_enco_semAllDone.Post(); + } + } +} + +void *OPJEncoThread::Entry() +{ + wxString text; + + srand(GetId()); + //int m_countnum = rand() % 9; + //text.Printf(wxT("Deco thread 0x%lx started (priority = %u, time = %d)."), + // GetId(), GetPriority(), m_countnum); + text.Printf(wxT("Enco thread %d started"), m_canvas->m_childframe->m_winnumber); + WriteText(text); + + // set handler properties + wxJPEG2000Handler *jpeg2000handler = (wxJPEG2000Handler *) wxImage::FindHandler(wxBITMAP_TYPE_JPEG2000); + jpeg2000handler->m_subsampling = wxGetApp().m_subsampling; + jpeg2000handler->m_origin = wxGetApp().m_origin; + jpeg2000handler->m_rates = wxGetApp().m_rates; + jpeg2000handler->m_quality = wxGetApp().m_quality; + jpeg2000handler->m_enablequality = wxGetApp().m_enablequality; + jpeg2000handler->m_multicomp = wxGetApp().m_multicomp; + jpeg2000handler->m_irreversible = wxGetApp().m_irreversible; + jpeg2000handler->m_resolutions = wxGetApp().m_resolutions; + jpeg2000handler->m_progression = wxGetApp().m_progression; + jpeg2000handler->m_cbsize = wxGetApp().m_cbsize; + jpeg2000handler->m_prsize = wxGetApp().m_prsize; + jpeg2000handler->m_tsize = wxGetApp().m_tsize; + jpeg2000handler->m_torigin = wxGetApp().m_torigin; + jpeg2000handler->m_enablesop = wxGetApp().m_enablesop; + jpeg2000handler->m_enableeph = wxGetApp().m_enableeph; + jpeg2000handler->m_enablebypass = wxGetApp().m_enablebypass; + jpeg2000handler->m_enablerestart = wxGetApp().m_enablerestart; + jpeg2000handler->m_enablereset = wxGetApp().m_enablereset; + jpeg2000handler->m_enablesegmark = wxGetApp().m_enablesegmark; + jpeg2000handler->m_enableerterm = wxGetApp().m_enableerterm; + jpeg2000handler->m_enablevsc = wxGetApp().m_enablevsc; + jpeg2000handler->m_enableidx = wxGetApp().m_enableidx; + jpeg2000handler->m_index = m_canvas->m_savename.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR) + wxGetApp().m_index; + jpeg2000handler->m_enablecomm = wxGetApp().m_enablecomm; + jpeg2000handler->m_comment = wxGetApp().m_comment; + jpeg2000handler->m_enablepoc = wxGetApp().m_enablepoc; + jpeg2000handler->m_poc = wxGetApp().m_poc; + + // save the file + if (!m_canvas->m_image100.SaveFile(m_canvas->m_savename.GetFullPath(), (wxBitmapType) wxBITMAP_TYPE_JPEG2000)) { + WriteText(wxT("Can't save image")); + return NULL; + } + + text.Printf(wxT("Enco thread %d finished"), m_canvas->m_childframe->m_winnumber); + WriteText(text); + return NULL; +} + + +///////////////////////////////////////////////////////////////////// +// Decoding thread class +///////////////////////////////////////////////////////////////////// +OPJDecoThread::OPJDecoThread(OPJCanvas *canvas) + : wxThread() +{ + m_count = 0; + m_canvas = canvas; +} + +void OPJDecoThread::WriteText(const wxString& text) +{ + wxString msg; + + // we use a fake event and post it for inter-thread gui communication + wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, OPJFRAME_THREADLOGMSG); + event.SetInt(-1); + msg << text; + event.SetString(msg); + wxPostEvent(this->m_canvas->m_childframe->m_frame, event); + +/* + // before doing any GUI calls we must ensure that this thread is the only + // one doing it! + +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif // __WXGTK__ + + msg << text; + m_canvas->WriteText(msg); + +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif // __WXGTK__ +*/ +} + +void OPJDecoThread::OnExit() +{ + wxCriticalSectionLocker locker(wxGetApp().m_deco_critsect); + + wxArrayThread& dthreads = wxGetApp().m_deco_threads; + dthreads.Remove(this); + + if (dthreads.IsEmpty() ) + { + // signal the main thread that there are no more threads left if it is + // waiting for us + if (wxGetApp().m_deco_waitingUntilAllDone) { + wxGetApp().m_deco_waitingUntilAllDone = false; + wxGetApp().m_deco_semAllDone.Post(); + } + } +} + +void *OPJDecoThread::Entry() +{ + + wxString text; + + //srand(GetId()); + //int m_countnum = rand() % 9; + //text.Printf(wxT("Deco thread 0x%lx started (priority = %u, time = %d)."), + // GetId(), GetPriority(), m_countnum); + + // we have started + text.Printf(wxT("Deco thread %d started"), m_canvas->m_childframe->m_winnumber); + WriteText(text); + + // prepare dummy wximage + wxBitmap bitmap(100, 100); + wxImage image(100, 100, true); //= bitmap.ConvertToImage(); + image.Destroy(); + + // show image full name + WriteText(m_canvas->m_fname.GetFullPath()); + + // set handler properties + wxJPEG2000Handler *jpeg2000handler = (wxJPEG2000Handler *) wxImage::FindHandler(wxBITMAP_TYPE_JPEG2000); + jpeg2000handler->m_reducefactor = wxGetApp().m_reducefactor; + jpeg2000handler->m_qualitylayers = wxGetApp().m_qualitylayers; + jpeg2000handler->m_components = wxGetApp().m_components; + jpeg2000handler->m_framenum = wxGetApp().m_framenum; +#ifdef USE_JPWL + jpeg2000handler->m_enablejpwl = wxGetApp().m_enablejpwl; + jpeg2000handler->m_expcomps = wxGetApp().m_expcomps; + jpeg2000handler->m_maxtiles = wxGetApp().m_maxtiles; +#endif // USE_JPWL + +#ifdef USE_MXF + wxMXFHandler *mxfffhandler = (wxMXFHandler *) wxImage::FindHandler(wxBITMAP_TYPE_MXF); + mxfffhandler->m_reducefactor = wxGetApp().m_reducefactor; + mxfffhandler->m_qualitylayers = wxGetApp().m_qualitylayers; + mxfffhandler->m_components = wxGetApp().m_components; + mxfffhandler->m_framenum = wxGetApp().m_framenum; + mxfffhandler->m_filename = m_canvas->m_fname; +#ifdef USE_JPWL + mxfffhandler->m_enablejpwl = wxGetApp().m_enablejpwl; + mxfffhandler->m_expcomps = wxGetApp().m_expcomps; + mxfffhandler->m_maxtiles = wxGetApp().m_maxtiles; +#endif // USE_JPWL +#endif // USE_MXF + + // if decoding is enabled... + if (wxGetApp().m_enabledeco) { + + // load the file + if (!image.LoadFile(m_canvas->m_fname.GetFullPath(), wxBITMAP_TYPE_ANY, 0)) { + WriteText(wxT("Can't load image!")); + return NULL; + } + + } else { + + // display a warning + if (!image.Create(300, 5, false)) { + WriteText(wxT("Can't create image!")); + return NULL; + } + + } + + // assign 100% image + m_canvas->m_image100 = wxBitmap(image); + + // signal the frame to refresh the canvas + wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, OPJFRAME_VIEWFIT); + event.SetString(wxT("Fit me")); + event.SetInt(m_canvas->m_childframe->m_winnumber); + wxPostEvent(m_canvas->m_childframe->m_frame, event); + + // find a fit-to-width zoom + /*int zooml, wzooml, hzooml; + wxSize clientsize = m_canvas->GetClientSize(); + wzooml = (int) floor(100.0 * (double) clientsize.GetWidth() / (double) (2 * OPJ_CANVAS_BORDER + image.GetWidth())); + hzooml = (int) floor(100.0 * (double) clientsize.GetHeight() / (double) (2 * OPJ_CANVAS_BORDER + image.GetHeight())); + zooml = wxMin(100, wxMin(wzooml, hzooml));*/ + + // fit to width +#ifndef __WXGTK__ + //m_canvas->m_childframe->m_frame->Rescale(zooml, m_canvas->m_childframe); +#endif // __WXGTK__ + + //m_canvas->m_image = m_canvas->m_image100; + //m_canvas->Refresh(); + //m_canvas->SetScrollbars(20, 20, (int)(0.5 + (double) image.GetWidth() / 20.0), (int)(0.5 + (double) image.GetHeight() / 20.0)); + + //text.Printf(wxT("Deco thread 0x%lx finished."), GetId()); + text.Printf(wxT("Deco thread %d finished"), m_canvas->m_childframe->m_winnumber); + WriteText(text); + return NULL; + +} + +///////////////////////////////////////////////////////////////////// +// Parsing thread class +///////////////////////////////////////////////////////////////////// + +OPJParseThread::OPJParseThread(OPJMarkerTree *tree, wxTreeItemId parentid) + : wxThread() +{ + m_count = 0; + m_tree = tree; + m_parentid = parentid; +} + +void OPJParseThread::WriteText(const wxString& text) +{ + wxString msg; + + // we use a fake event and post it for inter-thread gui communication + wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, OPJFRAME_THREADLOGMSG); + event.SetInt(-1); + msg << text; + event.SetString(msg); + wxPostEvent(this->m_tree->m_childframe->m_frame, event); + +/* // before doing any GUI calls we must ensure that this thread is the only + // one doing it! + +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif // __WXGTK + + msg << text; + m_tree->WriteText(msg); + +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif // __WXGTK*/ +} + +void OPJParseThread::OnExit() +{ + wxCriticalSectionLocker locker(wxGetApp().m_parse_critsect); + + wxArrayThread& threads = wxGetApp().m_parse_threads; + threads.Remove(this); + + if (threads.IsEmpty()) { + // signal the main thread that there are no more threads left if it is + // waiting for us + if (wxGetApp().m_parse_waitingUntilAllDone) { + wxGetApp().m_parse_waitingUntilAllDone = false; + wxGetApp().m_parse_semAllDone.Post(); + } + } +} + +void *OPJParseThread::Entry() +{ + + printf("Entering\n\n"); + + wxString text; + + srand(GetId()); + int m_countnum = rand() % 9; + text.Printf(wxT("Parse thread 0x%lx started (priority = %u, time = %d)."), + GetId(), GetPriority(), m_countnum); + WriteText(text); + LoadFile(m_tree->m_fname); + text.Printf(wxT("Parse thread 0x%lx finished."), GetId()); + WriteText(text); + + + //wxLogMessage(wxT("Entering\n")); //test wxLog thread safeness + + //wxBusyCursor wait; + //wxBusyInfo wait(wxT("Decoding image ...")); + + + /*for ( m_count = 0; m_count < m_countnum; m_count++ ) + { + // check if we were asked to exit + if ( TestDestroy() ) + break; + + text.Printf(wxT("[%u] Parse thread 0x%lx here."), m_count, GetId()); + WriteText(text); + + // wxSleep() can't be called from non-GUI thread! + wxThread::Sleep(10); + }*/ + + // wxLogMessage(text); -- test wxLog thread safeness + + printf("Exiting\n\n"); + + return NULL; +} + + +/////////////////////////////////////////// +// Parsing hread and related +/////////////////////////////////////////// + +#if USE_GENERIC_TREECTRL +BEGIN_EVENT_TABLE(OPJMarkerTree, wxGenericTreeCtrl) +#else +BEGIN_EVENT_TABLE(OPJMarkerTree, wxTreeCtrl) +#endif + /*EVT_TREE_BEGIN_DRAG(TreeTest_Ctrl, OPJMarkerTree::OnBeginDrag) + EVT_TREE_BEGIN_RDRAG(TreeTest_Ctrl, OPJMarkerTree::OnBeginRDrag) + EVT_TREE_END_DRAG(TreeTest_Ctrl, OPJMarkerTree::OnEndDrag)*/ + /*EVT_TREE_BEGIN_LABEL_EDIT(TreeTest_Ctrl, OPJMarkerTree::OnBeginLabelEdit) + EVT_TREE_END_LABEL_EDIT(TreeTest_Ctrl, OPJMarkerTree::OnEndLabelEdit)*/ + /*EVT_TREE_DELETE_ITEM(TreeTest_Ctrl, OPJMarkerTree::OnDeleteItem)*/ +#if 0 // there are so many of those that logging them causes flicker + /*EVT_TREE_GET_INFO(TreeTest_Ctrl, OPJMarkerTree::OnGetInfo)*/ +#endif + /*EVT_TREE_SET_INFO(TreeTest_Ctrl, OPJMarkerTree::OnSetInfo) + EVT_TREE_ITEM_EXPANDED(TreeTest_Ctrl, OPJMarkerTree::OnItemExpanded)*/ + EVT_TREE_ITEM_EXPANDING(TreeTest_Ctrl, OPJMarkerTree::OnItemExpanding) + /*EVT_TREE_ITEM_COLLAPSED(TreeTest_Ctrl, OPJMarkerTree::OnItemCollapsed) + EVT_TREE_ITEM_COLLAPSING(TreeTest_Ctrl, OPJMarkerTree::OnItemCollapsing)*/ + + EVT_TREE_SEL_CHANGED(TreeTest_Ctrl, OPJMarkerTree::OnSelChanged) + /*EVT_TREE_SEL_CHANGING(TreeTest_Ctrl, OPJMarkerTree::OnSelChanging)*/ + /*EVT_TREE_KEY_DOWN(TreeTest_Ctrl, OPJMarkerTree::OnTreeKeyDown)*/ + /*EVT_TREE_ITEM_ACTIVATED(TreeTest_Ctrl, OPJMarkerTree::OnItemActivated)*/ + + // so many differents ways to handle right mouse button clicks... + /*EVT_CONTEXT_MENU(OPJMarkerTree::OnContextMenu)*/ + // EVT_TREE_ITEM_MENU is the preferred event for creating context menus + // on a tree control, because it includes the point of the click or item, + // meaning that no additional placement calculations are required. + EVT_TREE_ITEM_MENU(TreeTest_Ctrl, OPJMarkerTree::OnItemMenu) + /*EVT_TREE_ITEM_RIGHT_CLICK(TreeTest_Ctrl, OPJMarkerTree::OnItemRClick)*/ + + /*EVT_RIGHT_DOWN(OPJMarkerTree::OnRMouseDown) + EVT_RIGHT_UP(OPJMarkerTree::OnRMouseUp) + EVT_RIGHT_DCLICK(OPJMarkerTree::OnRMouseDClick)*/ +END_EVENT_TABLE() + +// OPJMarkerTree implementation +#if USE_GENERIC_TREECTRL +IMPLEMENT_DYNAMIC_CLASS(OPJMarkerTree, wxGenericTreeCtrl) +#else +IMPLEMENT_DYNAMIC_CLASS(OPJMarkerTree, wxTreeCtrl) +#endif + +OPJMarkerTree::OPJMarkerTree(wxWindow *parent, OPJChildFrame *subframe, wxFileName fname, wxString name, const wxWindowID id, + const wxPoint& pos, const wxSize& size, long style) + : wxTreeCtrl(parent, id, pos, size, style) +{ + m_reverseSort = false; + m_fname = fname; + + m_peektextCtrl = ((OPJFrame *) (parent->GetParent()->GetParent()))->m_textCtrlbrowse; + CreateImageList(); + + // Add some items to the tree + //AddTestItemsToTree(5, 5); + int image = wxGetApp().ShowImages() ? OPJMarkerTree::TreeCtrlIcon_Folder : -1; + wxTreeItemId rootId = AddRoot(name, + image, image, + new OPJMarkerData(name)); + + OPJParseThread *pthread = CreateParseThread(0x00, subframe); + if (pthread->Run() != wxTHREAD_NO_ERROR) + wxLogMessage(wxT("Can't start parse thread!")); + else + wxLogMessage(wxT("New parse thread started.")); + + m_childframe = subframe; +} + +void OPJMarkerTree::CreateImageList(int size) +{ + if (size == -1) { + SetImageList(NULL); + return; + } + if (size == 0) + size = m_imageSize; + else + m_imageSize = size; + + // Make an image list containing small icons + wxImageList *images = new wxImageList(size, size, true); + + // should correspond to TreeCtrlIcon_xxx enum + wxBusyCursor wait; + wxIcon icons[5]; + icons[0] = wxIcon(icon1_xpm); + icons[1] = wxIcon(icon2_xpm); + icons[2] = wxIcon(icon3_xpm); + icons[3] = wxIcon(icon4_xpm); + icons[4] = wxIcon(icon5_xpm); + + int sizeOrig = icons[0].GetWidth(); + for (size_t i = 0; i < WXSIZEOF(icons); i++) { + if (size == sizeOrig) { + images->Add(icons[i]); + } else { + images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size))); + } + } + + AssignImageList(images); +} + +#if USE_GENERIC_TREECTRL || !defined(__WXMSW__) +void OPJMarkerTree::CreateButtonsImageList(int size) +{ + if ( size == -1 ) { + SetButtonsImageList(NULL); + return; + } + + // Make an image list containing small icons + wxImageList *images = new wxImageList(size, size, true); + + // should correspond to TreeCtrlIcon_xxx enum + wxBusyCursor wait; + wxIcon icons[4]; + icons[0] = wxIcon(icon3_xpm); // closed + icons[1] = wxIcon(icon3_xpm); // closed, selected + icons[2] = wxIcon(icon5_xpm); // open + icons[3] = wxIcon(icon5_xpm); // open, selected + + for ( size_t i = 0; i < WXSIZEOF(icons); i++ ) { + int sizeOrig = icons[i].GetWidth(); + if ( size == sizeOrig ) { + images->Add(icons[i]); + } else { + images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size))); + } + } + + AssignButtonsImageList(images); +#else +void OPJMarkerTree::CreateButtonsImageList(int WXUNUSED(size)) +{ +#endif +} + +void OPJParseThread::LoadFile(wxFileName fname) +{ + wxTreeItemId rootid; + + // this is the root node + int image = wxGetApp().ShowImages() ? m_tree->TreeCtrlIcon_Folder : -1; + + if (this->m_parentid) { + // leaf of a tree + rootid = m_parentid; + m_tree->SetItemText(rootid, wxT("Parsing...")); + + } else { + + // delete the existing tree hierarchy + m_tree->DeleteAllItems(); + + // new tree + rootid = m_tree->AddRoot(wxT("Parsing..."), + image, + image, + new OPJMarkerData(fname.GetFullPath()) + ); + //m_tree->SetItemFont(rootid, *wxITALIC_FONT); + m_tree->SetItemBold(rootid); + } + + // open the file + wxFile m_file(fname.GetFullPath().c_str(), wxFile::read); + + // parsing enabled? + if (wxGetApp().m_enableparse) { + + // what is the extension? + if ((fname.GetExt() == wxT("j2k")) || (fname.GetExt() == wxT("j2c"))) { + + // parse the file + ParseJ2KFile(&m_file, 0, m_file.Length(), rootid); + + } else if ((fname.GetExt() == wxT("jp2")) || (fname.GetExt() == wxT("mj2"))) { + + // parse the file + if (this->m_parentid) { + //WriteText(wxT("Only a subsection of jp2")); + OPJMarkerData *data = (OPJMarkerData *) m_tree->GetItemData(rootid); + ParseJ2KFile(&m_file, data->m_start, data->m_length, rootid); + m_tree->Expand(rootid); + + } else { + // as usual + ParseJP2File(&m_file, 0, m_file.Length(), rootid); + } + + } else { + + // unknown extension + WriteText(wxT("Unknown file format!")); + + } + + } + + // this is the root node + if (this->m_parentid) + m_tree->SetItemText(rootid, wxT("Codestream")); + else + //m_tree->SetItemText(rootid, wxString::Format(wxT("%s (%d B)"), fname.GetFullName(), m_file.Length())); + m_tree->SetItemText(rootid, fname.GetFullName()); + + // close the file + m_file.Close(); + + WriteText(wxT("Parsing finished!")); +} + +/*int OPJMarkerTree::OnCompareItems(const wxTreeItemId& item1, + const wxTreeItemId& item2) +{ + if ( m_reverseSort ) + { + // just exchange 1st and 2nd items + return wxTreeCtrl::OnCompareItems(item2, item1); + } + else + { + return wxTreeCtrl::OnCompareItems(item1, item2); + } +}*/ + +/*void OPJMarkerTree::AddItemsRecursively(const wxTreeItemId& idParent, + size_t numChildren, + size_t depth, + size_t folder) +{ + if ( depth > 0 ) + { + bool hasChildren = depth > 1; + + wxString str; + for ( size_t n = 0; n < numChildren; n++ ) + { + // at depth 1 elements won't have any more children + if ( hasChildren ) + str.Printf(wxT("%s child %u"), wxT("Folder"), unsigned(n + 1)); + else + str.Printf(wxT("%s child %u.%u"), wxT("File"), unsigned(folder), unsigned(n + 1)); + + // here we pass to AppendItem() normal and selected item images (we + // suppose that selected image follows the normal one in the enum) + int image, imageSel; + if ( wxGetApp().ShowImages() ) + { + image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder; + imageSel = image + 1; + } + else + { + image = imageSel = -1; + } + wxTreeItemId id = AppendItem(idParent, str, image, imageSel, + new OPJMarkerData(str)); + + // and now we also set the expanded one (only for the folders) + if ( hasChildren && wxGetApp().ShowImages() ) + { + SetItemImage(id, TreeCtrlIcon_FolderOpened, + wxTreeItemIcon_Expanded); + } + + // remember the last child for OnEnsureVisible() + if ( !hasChildren && n == numChildren - 1 ) + { + m_lastItem = id; + } + + AddItemsRecursively(id, numChildren, depth - 1, n + 1); + } + } + //else: done! +}*/ + +/*void OPJMarkerTree::AddTestItemsToTree(size_t numChildren, + size_t depth) +{ + int image = wxGetApp().ShowImages() ? OPJMarkerTree::TreeCtrlIcon_Folder : -1; + wxTreeItemId rootId = AddRoot(wxT("Root"), + image, image, + new OPJMarkerData(wxT("Root item"))); + if ( image != -1 ) + { + SetItemImage(rootId, TreeCtrlIcon_FolderOpened, wxTreeItemIcon_Expanded); + } + + AddItemsRecursively(rootId, numChildren, depth, 0); + + // set some colours/fonts for testing + SetItemFont(rootId, *wxITALIC_FONT); + + wxTreeItemIdValue cookie; + wxTreeItemId id = GetFirstChild(rootId, cookie); + SetItemTextColour(id, *wxBLUE); + + id = GetNextChild(rootId, cookie); + id = GetNextChild(rootId, cookie); + SetItemTextColour(id, *wxRED); + SetItemBackgroundColour(id, *wxLIGHT_GREY); +}*/ + +/*void OPJMarkerTree::GetItemsRecursively(const wxTreeItemId& idParent, + wxTreeItemIdValue cookie) +{ + wxTreeItemId id; + + if ( !cookie ) + id = GetFirstChild(idParent, cookie); + else + id = GetNextChild(idParent, cookie); + + if ( !id.IsOk() ) + return; + + wxString text = GetItemText(id); + wxLogMessage(text); + + if (ItemHasChildren(id)) + GetItemsRecursively(id); + + GetItemsRecursively(idParent, cookie); +}*/ + +/*void OPJMarkerTree::DoToggleIcon(const wxTreeItemId& item) +{ + int image = (GetItemImage(item) == TreeCtrlIcon_Folder) + ? TreeCtrlIcon_File + : TreeCtrlIcon_Folder; + SetItemImage(item, image, wxTreeItemIcon_Normal); + + image = (GetItemImage(item) == TreeCtrlIcon_FolderSelected) + ? TreeCtrlIcon_FileSelected + : TreeCtrlIcon_FolderSelected; + SetItemImage(item, image, wxTreeItemIcon_Selected); +}*/ + +void OPJMarkerTree::LogEvent(const wxChar *name, const wxTreeEvent& event) +{ + wxTreeItemId item = event.GetItem(); + wxString text; + if ( item.IsOk() ) + text << wxT('"') << GetItemText(item).c_str() << wxT('"'); + else + text = wxT("invalid item"); + wxLogMessage(wxT("%s(%s)"), name, text.c_str()); +} + +OPJParseThread *OPJMarkerTree::CreateParseThread(wxTreeItemId parentid, OPJChildFrame *subframe) +{ + OPJParseThread *pthread = new OPJParseThread(this, parentid); + + if (pthread->Create() != wxTHREAD_NO_ERROR) + wxLogError(wxT("Can't create parse thread!")); + + wxCriticalSectionLocker enter(wxGetApp().m_parse_critsect); + wxGetApp().m_parse_threads.Add(pthread); + + return pthread; +} + + +/*// avoid repetition +#define TREE_EVENT_HANDLER(name) \ +void OPJMarkerTree::name(wxTreeEvent& event) \ +{ \ + LogEvent(_T(#name), event); \ + SetLastItem(wxTreeItemId()); \ + event.Skip(); \ +}*/ + +/*TREE_EVENT_HANDLER(OnBeginRDrag)*/ +/*TREE_EVENT_HANDLER(OnDeleteItem)*/ +/*TREE_EVENT_HANDLER(OnGetInfo) +TREE_EVENT_HANDLER(OnSetInfo)*/ +/*TREE_EVENT_HANDLER(OnItemExpanded) +TREE_EVENT_HANDLER(OnItemExpanding)*/ +/*TREE_EVENT_HANDLER(OnItemCollapsed)*/ +/*TREE_EVENT_HANDLER(OnSelChanged) +TREE_EVENT_HANDLER(OnSelChanging)*/ + +/*#undef TREE_EVENT_HANDLER*/ + +void OPJMarkerTree::OnItemExpanding(wxTreeEvent& event) +{ + wxTreeItemId item = event.GetItem(); + OPJMarkerData* data = (OPJMarkerData *) GetItemData(item); + wxString text; + + if (item.IsOk()) + text << wxT('"') << GetItemText(item).c_str() << wxT('"'); + else + text = wxT("invalid item"); + + if (wxStrcmp(data->GetDesc1(), wxT("INFO-CSTREAM"))) + return; + + wxLogMessage(wxT("Expanding... (%s -> %s, %s, %d, %d)"), + text.c_str(), data->GetDesc1(), data->GetDesc2(), + data->m_start, data->m_length); + + // the codestream box is being asked for expansion + wxTreeItemIdValue cookie; + if (!GetFirstChild(item, cookie).IsOk()) { + OPJParseThread *pthread = CreateParseThread(item); + if (pthread->Run() != wxTHREAD_NO_ERROR) + wxLogMessage(wxT("Can't start parse thread!")); + else + wxLogMessage(wxT("New parse thread started.")); + } +} + +void OPJMarkerTree::OnSelChanged(wxTreeEvent& event) +{ + int bunch_linesize = 16; + int bunch_numlines = 7; + + wxTreeItemId item = event.GetItem(); + OPJMarkerData* data = (OPJMarkerData *) GetItemData(item); + wxString text; + int l, c, pos = 0, pre_pos; + + m_peektextCtrl->Clear(); + + /*text << wxString::Format(wxT("Selected... (%s -> %s, %s, %d, %d)"), + text.c_str(), data->GetDesc1(), data->GetDesc2(), + data->m_start, data->m_length) << wxT("\n");*/ + + // open the file and browse a little + wxFile *fp = new wxFile(m_fname.GetFullPath().c_str(), wxFile::read); + + // go to position claimed + fp->Seek(data->m_start, wxFromStart); + + // read a bunch + int max_read = wxMin(wxFileOffset(bunch_linesize * bunch_numlines), data->m_length - data->m_start + 1); + if (data->m_desc == wxT("MARK (65380)")) { + /*wxLogMessage(data->m_desc);*/ + max_read = data->m_length - data->m_start + 1; + bunch_numlines = (int) ceil((float) max_read / (float) bunch_linesize); + } + unsigned char *buffer = new unsigned char[bunch_linesize * bunch_numlines]; + fp->Read(buffer, max_read); + + // write the file data between start and stop + pos = 0; + for (l = 0; l < bunch_numlines; l++) { + + text << wxString::Format(wxT("%010d:"), data->m_start + pos); + + pre_pos = pos; + + // add hex browsing text + for (c = 0; c < bunch_linesize; c++) { + + if (!(c % 8)) + text << wxT(" "); + + if (pos < max_read) { + text << wxString::Format(wxT("%02X "), buffer[pos]); + } else + text << wxT(" "); + pos++; + } + + text << wxT(" "); + + // add char browsing text + for (c = 0; c < bunch_linesize; c++) { + + if (pre_pos < max_read) { + if ((buffer[pre_pos] == '\n') || + (buffer[pre_pos] == '\t') || + (buffer[pre_pos] == '\0') || + (buffer[pre_pos] == 0x0D) || + (buffer[pre_pos] == 0x0B)) + buffer[pre_pos] = ' '; + text << wxString::FromAscii((char) buffer[pre_pos]) << wxT("."); + } else + text << wxT(" "); + pre_pos++; + } + + text << wxT("\n"); + + } + + // close the file + fp->Close(); + + m_peektextCtrl->WriteText(text); + + delete buffer; +} + +/*void LogKeyEvent(const wxChar *name, const wxKeyEvent& event) +{ + wxString key; + long keycode = event.GetKeyCode(); + { + switch ( keycode ) + { + case WXK_BACK: key = wxT("BACK"); break; + case WXK_TAB: key = wxT("TAB"); break; + case WXK_RETURN: key = wxT("RETURN"); break; + case WXK_ESCAPE: key = wxT("ESCAPE"); break; + case WXK_SPACE: key = wxT("SPACE"); break; + case WXK_DELETE: key = wxT("DELETE"); break; + case WXK_START: key = wxT("START"); break; + case WXK_LBUTTON: key = wxT("LBUTTON"); break; + case WXK_RBUTTON: key = wxT("RBUTTON"); break; + case WXK_CANCEL: key = wxT("CANCEL"); break; + case WXK_MBUTTON: key = wxT("MBUTTON"); break; + case WXK_CLEAR: key = wxT("CLEAR"); break; + case WXK_SHIFT: key = wxT("SHIFT"); break; + case WXK_ALT: key = wxT("ALT"); break; + case WXK_CONTROL: key = wxT("CONTROL"); break; + case WXK_MENU: key = wxT("MENU"); break; + case WXK_PAUSE: key = wxT("PAUSE"); break; + case WXK_CAPITAL: key = wxT("CAPITAL"); break; + case WXK_END: key = wxT("END"); break; + case WXK_HOME: key = wxT("HOME"); break; + case WXK_LEFT: key = wxT("LEFT"); break; + case WXK_UP: key = wxT("UP"); break; + case WXK_RIGHT: key = wxT("RIGHT"); break; + case WXK_DOWN: key = wxT("DOWN"); break; + case WXK_SELECT: key = wxT("SELECT"); break; + case WXK_PRINT: key = wxT("PRINT"); break; + case WXK_EXECUTE: key = wxT("EXECUTE"); break; + case WXK_SNAPSHOT: key = wxT("SNAPSHOT"); break; + case WXK_INSERT: key = wxT("INSERT"); break; + case WXK_HELP: key = wxT("HELP"); break; + case WXK_NUMPAD0: key = wxT("NUMPAD0"); break; + case WXK_NUMPAD1: key = wxT("NUMPAD1"); break; + case WXK_NUMPAD2: key = wxT("NUMPAD2"); break; + case WXK_NUMPAD3: key = wxT("NUMPAD3"); break; + case WXK_NUMPAD4: key = wxT("NUMPAD4"); break; + case WXK_NUMPAD5: key = wxT("NUMPAD5"); break; + case WXK_NUMPAD6: key = wxT("NUMPAD6"); break; + case WXK_NUMPAD7: key = wxT("NUMPAD7"); break; + case WXK_NUMPAD8: key = wxT("NUMPAD8"); break; + case WXK_NUMPAD9: key = wxT("NUMPAD9"); break; + case WXK_MULTIPLY: key = wxT("MULTIPLY"); break; + case WXK_ADD: key = wxT("ADD"); break; + case WXK_SEPARATOR: key = wxT("SEPARATOR"); break; + case WXK_SUBTRACT: key = wxT("SUBTRACT"); break; + case WXK_DECIMAL: key = wxT("DECIMAL"); break; + case WXK_DIVIDE: key = wxT("DIVIDE"); break; + case WXK_F1: key = wxT("F1"); break; + case WXK_F2: key = wxT("F2"); break; + case WXK_F3: key = wxT("F3"); break; + case WXK_F4: key = wxT("F4"); break; + case WXK_F5: key = wxT("F5"); break; + case WXK_F6: key = wxT("F6"); break; + case WXK_F7: key = wxT("F7"); break; + case WXK_F8: key = wxT("F8"); break; + case WXK_F9: key = wxT("F9"); break; + case WXK_F10: key = wxT("F10"); break; + case WXK_F11: key = wxT("F11"); break; + case WXK_F12: key = wxT("F12"); break; + case WXK_F13: key = wxT("F13"); break; + case WXK_F14: key = wxT("F14"); break; + case WXK_F15: key = wxT("F15"); break; + case WXK_F16: key = wxT("F16"); break; + case WXK_F17: key = wxT("F17"); break; + case WXK_F18: key = wxT("F18"); break; + case WXK_F19: key = wxT("F19"); break; + case WXK_F20: key = wxT("F20"); break; + case WXK_F21: key = wxT("F21"); break; + case WXK_F22: key = wxT("F22"); break; + case WXK_F23: key = wxT("F23"); break; + case WXK_F24: key = wxT("F24"); break; + case WXK_NUMLOCK: key = wxT("NUMLOCK"); break; + case WXK_SCROLL: key = wxT("SCROLL"); break; + case WXK_PAGEUP: key = wxT("PAGEUP"); break; + case WXK_PAGEDOWN: key = wxT("PAGEDOWN"); break; + case WXK_NUMPAD_SPACE: key = wxT("NUMPAD_SPACE"); break; + case WXK_NUMPAD_TAB: key = wxT("NUMPAD_TAB"); break; + case WXK_NUMPAD_ENTER: key = wxT("NUMPAD_ENTER"); break; + case WXK_NUMPAD_F1: key = wxT("NUMPAD_F1"); break; + case WXK_NUMPAD_F2: key = wxT("NUMPAD_F2"); break; + case WXK_NUMPAD_F3: key = wxT("NUMPAD_F3"); break; + case WXK_NUMPAD_F4: key = wxT("NUMPAD_F4"); break; + case WXK_NUMPAD_HOME: key = wxT("NUMPAD_HOME"); break; + case WXK_NUMPAD_LEFT: key = wxT("NUMPAD_LEFT"); break; + case WXK_NUMPAD_UP: key = wxT("NUMPAD_UP"); break; + case WXK_NUMPAD_RIGHT: key = wxT("NUMPAD_RIGHT"); break; + case WXK_NUMPAD_DOWN: key = wxT("NUMPAD_DOWN"); break; + case WXK_NUMPAD_PAGEUP: key = wxT("NUMPAD_PAGEUP"); break; + case WXK_NUMPAD_PAGEDOWN: key = wxT("NUMPAD_PAGEDOWN"); break; + case WXK_NUMPAD_END: key = wxT("NUMPAD_END"); break; + case WXK_NUMPAD_BEGIN: key = wxT("NUMPAD_BEGIN"); break; + case WXK_NUMPAD_INSERT: key = wxT("NUMPAD_INSERT"); break; + case WXK_NUMPAD_DELETE: key = wxT("NUMPAD_DELETE"); break; + case WXK_NUMPAD_EQUAL: key = wxT("NUMPAD_EQUAL"); break; + case WXK_NUMPAD_MULTIPLY: key = wxT("NUMPAD_MULTIPLY"); break; + case WXK_NUMPAD_ADD: key = wxT("NUMPAD_ADD"); break; + case WXK_NUMPAD_SEPARATOR: key = wxT("NUMPAD_SEPARATOR"); break; + case WXK_NUMPAD_SUBTRACT: key = wxT("NUMPAD_SUBTRACT"); break; + case WXK_NUMPAD_DECIMAL: key = wxT("NUMPAD_DECIMAL"); break; + + default: + { + if ( keycode < 128 && wxIsprint((int)keycode) ) + key.Printf(wxT("'%c'"), (char)keycode); + else if ( keycode > 0 && keycode < 27 ) + key.Printf(_("Ctrl-%c"), wxT('A') + keycode - 1); + else + key.Printf(wxT("unknown (%ld)"), keycode); + } + } + } + + wxLogMessage(wxT("%s event: %s (flags = %c%c%c%c)"), + name, + key.c_str(), + event.ControlDown() ? wxT('C') : wxT('-'), + event.AltDown() ? wxT('A') : wxT('-'), + event.ShiftDown() ? wxT('S') : wxT('-'), + event.MetaDown() ? wxT('M') : wxT('-')); +} + +void OPJMarkerTree::OnTreeKeyDown(wxTreeEvent& event) +{ + LogKeyEvent(wxT("Tree key down "), event.GetKeyEvent()); + + event.Skip(); +}*/ + +/*void OPJMarkerTree::OnBeginDrag(wxTreeEvent& event) +{ + // need to explicitly allow drag + if ( event.GetItem() != GetRootItem() ) + { + m_draggedItem = event.GetItem(); + + wxLogMessage(wxT("OnBeginDrag: started dragging %s"), + GetItemText(m_draggedItem).c_str()); + + event.Allow(); + } + else + { + wxLogMessage(wxT("OnBeginDrag: this item can't be dragged.")); + } +} + +void OPJMarkerTree::OnEndDrag(wxTreeEvent& event) +{ + wxTreeItemId itemSrc = m_draggedItem, + itemDst = event.GetItem(); + m_draggedItem = (wxTreeItemId)0l; + + // where to copy the item? + if ( itemDst.IsOk() && !ItemHasChildren(itemDst) ) + { + // copy to the parent then + itemDst = GetItemParent(itemDst); + } + + if ( !itemDst.IsOk() ) + { + wxLogMessage(wxT("OnEndDrag: can't drop here.")); + + return; + } + + wxString text = GetItemText(itemSrc); + wxLogMessage(wxT("OnEndDrag: '%s' copied to '%s'."), + text.c_str(), GetItemText(itemDst).c_str()); + + // just do append here - we could also insert it just before/after the item + // on which it was dropped, but this requires slightly more work... we also + // completely ignore the client data and icon of the old item but could + // copy them as well. + // + // Finally, we only copy one item here but we might copy the entire tree if + // we were dragging a folder. + int image = wxGetApp().ShowImages() ? TreeCtrlIcon_File : -1; + AppendItem(itemDst, text, image); +}*/ + +/*void OPJMarkerTree::OnBeginLabelEdit(wxTreeEvent& event) +{ + wxLogMessage(wxT("OnBeginLabelEdit")); + + // for testing, prevent this item's label editing + wxTreeItemId itemId = event.GetItem(); + if ( IsTestItem(itemId) ) + { + wxMessageBox(wxT("You can't edit this item.")); + + event.Veto(); + } + else if ( itemId == GetRootItem() ) + { + // test that it is possible to change the text of the item being edited + SetItemText(itemId, _T("Editing root item")); + } +} + +void OPJMarkerTree::OnEndLabelEdit(wxTreeEvent& event) +{ + wxLogMessage(wxT("OnEndLabelEdit")); + + // don't allow anything except letters in the labels + if ( !event.GetLabel().IsWord() ) + { + wxMessageBox(wxT("The new label should be a single word.")); + + event.Veto(); + } +}*/ + +/*void OPJMarkerTree::OnItemCollapsing(wxTreeEvent& event) +{ + wxLogMessage(wxT("OnItemCollapsing")); + + // for testing, prevent the user from collapsing the first child folder + wxTreeItemId itemId = event.GetItem(); + if ( IsTestItem(itemId) ) + { + wxMessageBox(wxT("You can't collapse this item.")); + + event.Veto(); + } +}*/ + +/*void OPJMarkerTree::OnItemActivated(wxTreeEvent& event) +{ + // show some info about this item + wxTreeItemId itemId = event.GetItem(); + OPJMarkerData *item = (OPJMarkerData *)GetItemData(itemId); + + if ( item != NULL ) + { + item->ShowInfo(this); + } + + wxLogMessage(wxT("OnItemActivated")); +}*/ + +void OPJMarkerTree::OnItemMenu(wxTreeEvent& event) +{ + /*wxTreeItemId itemId = event.GetItem(); + OPJMarkerData *item = itemId.IsOk() ? (OPJMarkerData *)GetItemData(itemId) + : NULL; + + wxLogMessage(wxT("OnItemMenu for item \"%s\""), item ? item->GetDesc() + : _T(""));*/ + + //wxLogMessage(wxT("EEEEEEEEEE")); + + //event.Skip(); +} + +/*void OPJMarkerTree::OnContextMenu(wxContextMenuEvent& event) +{ + wxPoint pt = event.GetPosition(); + wxTreeItemId item; + wxLogMessage(wxT("OnContextMenu at screen coords (%i, %i)"), pt.x, pt.y); + + // check if event was generated by keyboard (MSW-specific?) + if ( pt.x == -1 && pt.y == -1 ) //(this is how MSW indicates it) + { + if ( !HasFlag(wxTR_MULTIPLE) ) + item = GetSelection(); + + // attempt to guess where to show the menu + if ( item.IsOk() ) + { + // if an item was clicked, show menu to the right of it + wxRect rect; + GetBoundingRect(item, rect, true );// only the label + pt = wxPoint(rect.GetRight(), rect.GetTop()); + } + else + { + pt = wxPoint(0, 0); + } + } + else // event was generated by mouse, use supplied coords + { + pt = ScreenToClient(pt); + item = HitTest(pt); + } + + ShowMenu(item, pt); +}*/ + +/*void OPJMarkerTree::ShowMenu(wxTreeItemId id, const wxPoint& pt) +{ + wxString title; + if ( id.IsOk() ) + { + title << wxT("Menu for ") << GetItemText(id); + } + else + { + title = wxT("Menu for no particular item"); + } + +#if wxUSE_MENUS + wxMenu menu(title); + menu.Append(TreeTest_About, wxT("&About...")); + menu.AppendSeparator(); + menu.Append(TreeTest_Highlight, wxT("&Highlight item")); + menu.Append(TreeTest_Dump, wxT("&Dump")); + + PopupMenu(&menu, pt); +#endif // wxUSE_MENUS +}*/ + +/*void OPJMarkerTree::OnItemRClick(wxTreeEvent& event) +{ + wxTreeItemId itemId = event.GetItem(); + OPJMarkerData *item = itemId.IsOk() ? (OPJMarkerData *)GetItemData(itemId) + : NULL; + + wxLogMessage(wxT("Item \"%s\" right clicked"), item ? item->GetDesc() + : _T("")); + + event.Skip(); +}*/ + +/* +void OPJMarkerTree::OnRMouseDown(wxMouseEvent& event) +{ + wxLogMessage(wxT("Right mouse button down")); + + event.Skip(); +} + +void OPJMarkerTree::OnRMouseUp(wxMouseEvent& event) +{ + wxLogMessage(wxT("Right mouse button up")); + + event.Skip(); +} + +void OPJMarkerTree::OnRMouseDClick(wxMouseEvent& event) +{ + wxTreeItemId id = HitTest(event.GetPosition()); + if ( !id ) + wxLogMessage(wxT("No item under mouse")); + else + { + OPJMarkerData *item = (OPJMarkerData *)GetItemData(id); + if ( item ) + wxLogMessage(wxT("Item '%s' under mouse"), item->GetDesc()); + } + + event.Skip(); +} +*/ + +static inline const wxChar *Bool2String(bool b) +{ + return b ? wxT("") : wxT("not "); +} + +void OPJMarkerData::ShowInfo(wxTreeCtrl *tree) +{ + wxLogMessage(wxT("Item '%s': %sselected, %sexpanded, %sbold,\n") + wxT("%u children (%u immediately under this item)."), + m_desc.c_str(), + Bool2String(tree->IsSelected(GetId())), + Bool2String(tree->IsExpanded(GetId())), + Bool2String(tree->IsBold(GetId())), + unsigned(tree->GetChildrenCount(GetId())), + unsigned(tree->GetChildrenCount(GetId(), false))); +} + + diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.cpp b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.cpp new file mode 100644 index 0000000000..8f2c86e857 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.cpp @@ -0,0 +1,1664 @@ +/* + * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita' degli studi di Perugia (UPG), Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +///////////////////////////////////////////////////////////////////////////// +// Name: sashtest.cpp +// Purpose: Layout/sash sample +// Author: Julian Smart +// Modified by: +// Created: 04/01/98 +// RCS-ID: $Id: sashtest.cpp,v 1.18 2005/08/23 15:54:35 ABX Exp $ +// Copyright: (c) Julian Smart +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Name: treetest.cpp +// Purpose: wxTreeCtrl sample +// Author: Julian Smart +// Modified by: +// Created: 04/01/98 +// RCS-ID: $Id: treetest.cpp,v 1.110 2006/11/04 11:26:51 VZ Exp $ +// Copyright: (c) Julian Smart +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Name: dialogs.cpp +// Purpose: Common dialogs demo +// Author: Julian Smart +// Modified by: ABX (2004) - adjustements for conditional building + new menu +// Created: 04/01/98 +// RCS-ID: $Id: dialogs.cpp,v 1.163 2006/11/04 10:57:24 VZ Exp $ +// Copyright: (c) Julian Smart +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Name: thread.cpp +// Purpose: wxWidgets thread sample +// Author: Guilhem Lavaux, Vadim Zeitlin +// Modified by: +// Created: 06/16/98 +// RCS-ID: $Id: thread.cpp,v 1.26 2006/10/02 05:36:28 PC Exp $ +// Copyright: (c) 1998-2002 wxWidgets team +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +// Name: samples/image/image.cpp +// Purpose: sample showing operations with wxImage +// Author: Robert Roebling +// Modified by: +// Created: 1998 +// RCS-ID: $Id: image.cpp,v 1.120 2006/12/06 17:13:11 VZ Exp $ +// Copyright: (c) 1998-2005 Robert Roebling +// License: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Name: samples/console/console.cpp +// Purpose: A sample console (as opposed to GUI) program using wxWidgets +// Author: Vadim Zeitlin +// Modified by: +// Created: 04.10.99 +// RCS-ID: $Id: console.cpp,v 1.206 2006/11/12 19:55:19 VZ Exp $ +// Copyright: (c) 1999 Vadim Zeitlin +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Name: samples/notebook/notebook.cpp +// Purpose: a sample demonstrating notebook usage +// Author: Julian Smart +// Modified by: Dimitri Schoolwerth +// Created: 26/10/98 +// RCS-ID: $Id: notebook.cpp,v 1.49 2006/11/04 18:24:07 RR Exp $ +// Copyright: (c) 1998-2002 wxWidgets team +// License: wxWindows license +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Name: dialogs.cpp +// Purpose: Common dialogs demo +// Author: Julian Smart +// Modified by: ABX (2004) - adjustements for conditional building + new menu +// Created: 04/01/98 +// RCS-ID: $Id: dialogs.cpp,v 1.163 2006/11/04 10:57:24 VZ Exp $ +// Copyright: (c) Julian Smart +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Name: dnd.cpp +// Purpose: Drag and drop sample +// Author: Vadim Zeitlin +// Modified by: +// Created: 04/01/98 +// RCS-ID: $Id: dnd.cpp,v 1.107 2006/10/30 20:23:41 VZ Exp $ +// Copyright: +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Name: test.cpp +// Purpose: wxHtml testing example +///////////////////////////////////////////////////////////////////////////// + + +#include "OPJViewer.h" + +IMPLEMENT_APP(OPJViewerApp) + +// For drawing lines in a canvas +long xpos = -1; +long ypos = -1; + +int winNumber = 1; + +// Initialise this in OnInit, not statically +bool OPJViewerApp::OnInit(void) +{ + int n; +#if wxUSE_UNICODE + + wxChar **wxArgv = new wxChar *[argc + 1]; + + for (n = 0; n < argc; n++ ) { + wxMB2WXbuf warg = wxConvertMB2WX((char *) argv[n]); + wxArgv[n] = wxStrdup(warg); + } + + wxArgv[n] = NULL; + +#else // !wxUSE_UNICODE + + #define wxArgv argv + +#endif // wxUSE_UNICODE/!wxUSE_UNICODE + +#if wxUSE_CMDLINE_PARSER + + static const wxCmdLineEntryDesc cmdLineDesc[] = + { + { wxCMD_LINE_SWITCH, _T("h"), _T("help"), _T("show this help message"), + wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP }, + + { wxCMD_LINE_PARAM, NULL, NULL, _T("input file"), + wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE }, + + { wxCMD_LINE_NONE } + }; + + wxCmdLineParser parser(cmdLineDesc, argc, wxArgv); + + switch (parser.Parse()) { + case -1: + wxLogMessage(wxT("Help was given, terminating.")); + break; + + case 0: + ShowCmdLine(parser); + break; + + default: + wxLogMessage(wxT("Syntax error detected.")); + break; + } + +#endif // wxUSE_CMDLINE_PARSER + + //wxInitAllImageHandlers(); +#if wxUSE_LIBJPEG + wxImage::AddHandler( new wxJPEGHandler ); +#endif +#if wxUSE_LIBOPENJPEG + wxImage::AddHandler( new wxJPEG2000Handler ); +#endif +#if USE_MXF + wxImage::AddHandler( new wxMXFHandler ); +#endif // USE_MXF +#if OPJ_MANYFORMATS + wxImage::AddHandler( new wxBMPHandler ); + wxImage::AddHandler( new wxPNGHandler ); + wxImage::AddHandler( new wxGIFHandler ); + wxImage::AddHandler( new wxPNMHandler ); + wxImage::AddHandler( new wxTIFFHandler ); +#endif + // we use a XPM image in our HTML page + wxImage::AddHandler(new wxXPMHandler); + + // memory file system + wxFileSystem::AddHandler(new wxMemoryFSHandler); + +#ifdef OPJ_INICONFIG + //load decoding engine parameters + OPJconfig = new wxConfig(OPJ_APPLICATION, OPJ_APPLICATION_VENDOR); + + OPJconfig->Read(wxT("decode/enabledeco"), &m_enabledeco, (bool) true); + OPJconfig->Read(wxT("decode/enableparse"), &m_enableparse, (bool) true); + OPJconfig->Read(wxT("decode/resizemethod"), &m_resizemethod, (long) 0); + OPJconfig->Read(wxT("decode/xxxreducefactor"), &m_reducefactor, (long) 0); + OPJconfig->Read(wxT("decode/xxxqualitylayers"), &m_qualitylayers, (long) 0); + OPJconfig->Read(wxT("decode/xxxcomponents"), &m_components, (long) 0); + OPJconfig->Read(wxT("decode/xxxframenum"), &m_framenum, (long) 0); +#ifdef USE_JPWL + OPJconfig->Read(wxT("decode/enablejpwl"), &m_enablejpwl, (bool) true); + OPJconfig->Read(wxT("decode/expcomps"), &m_expcomps, (long) JPWL_EXPECTED_COMPONENTS); + OPJconfig->Read(wxT("decode/maxtiles"), &m_maxtiles, (long) JPWL_MAXIMUM_TILES); +#endif // USE_JPWL + + OPJconfig->Write(wxT("teststring"), wxT("This is a test value")); + OPJconfig->Write(wxT("testbool"), (bool) true); + OPJconfig->Write(wxT("testlong"), (long) 245); + + OPJconfig->Read(wxT("showtoolbar"), &m_showtoolbar, (bool) true); + OPJconfig->Read(wxT("showbrowser"), &m_showbrowser, (bool) true); + OPJconfig->Read(wxT("showpeeker"), &m_showpeeker, (bool) true); + OPJconfig->Read(wxT("browserwidth"), &m_browserwidth, (long) OPJ_BROWSER_WIDTH); + OPJconfig->Read(wxT("peekerheight"), &m_peekerheight, (long) OPJ_PEEKER_HEIGHT); + OPJconfig->Read(wxT("framewidth"), &m_framewidth, (long) OPJ_FRAME_WIDTH); + OPJconfig->Read(wxT("frameheight"), &m_frameheight, (long) OPJ_FRAME_HEIGHT); + + // load encoding engine parameters + OPJconfig->Read(wxT("encode/subsampling"), &m_subsampling, (wxString) wxT("1,1")); + OPJconfig->Read(wxT("encode/origin"), &m_origin, (wxString) wxT("0,0")); + OPJconfig->Read(wxT("encode/rates"), &m_rates, (wxString) wxT("20,10,5")); + OPJconfig->Read(wxT("encode/quality"), &m_quality, (wxString) wxT("30,35,40")); + OPJconfig->Read(wxT("encode/enablequality"), &m_enablequality, (bool) false); + OPJconfig->Read(wxT("encode/multicomp"), &m_multicomp, (bool) false); + OPJconfig->Read(wxT("encode/irreversible"), &m_irreversible, (bool) false); + OPJconfig->Read(wxT("encode/resolutions"), &m_resolutions, (int) 6); + OPJconfig->Read(wxT("encode/progression"), &m_progression, (int) 0); + OPJconfig->Read(wxT("encode/cbsize"), &m_cbsize, (wxString) wxT("32,32")); + OPJconfig->Read(wxT("encode/prsize"), &m_prsize, (wxString) wxT("[128,128],[128,128]")); + OPJconfig->Read(wxT("encode/tsize"), &m_tsize, (wxString) wxT("")); + OPJconfig->Read(wxT("encode/torigin"), &m_torigin, (wxString) wxT("0,0")); + OPJconfig->Read(wxT("encode/enablesop"), &m_enablesop, (bool) false); + OPJconfig->Read(wxT("encode/enableeph"), &m_enableeph, (bool) false); + OPJconfig->Read(wxT("encode/enablebypass"), &m_enablebypass, (bool) false); + OPJconfig->Read(wxT("encode/enablereset"), &m_enablereset, (bool) false); + OPJconfig->Read(wxT("encode/enablerestart"), &m_enablerestart, (bool) false); + OPJconfig->Read(wxT("encode/enablevsc"), &m_enablevsc, (bool) false); + OPJconfig->Read(wxT("encode/enableerterm"), &m_enableerterm, (bool) false); + OPJconfig->Read(wxT("encode/enablesegmark"), &m_enablesegmark, (bool) false); + OPJconfig->Read(wxT("encode/enablecomm"), &m_enablecomm, (bool) true); + OPJconfig->Read(wxT("encode/enablepoc"), &m_enablepoc, (bool) false); + OPJconfig->Read(wxT("encode/comment"), &m_comment, (wxString) wxT("")); + OPJconfig->Read(wxT("encode/poc"), &m_poc, (wxString) wxT("T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL")); + OPJconfig->Read(wxT("encode/enableidx"), &m_enableidx, (bool) false); + OPJconfig->Read(wxT("encode/index"), &m_index, (wxString) wxT("index.txt")); +#ifdef USE_JPWL + OPJconfig->Read(wxT("encode/enablejpwl"), &m_enablejpwle, (bool) true); + for (n = 0; n < MYJPWL_MAX_NO_TILESPECS; n++) { + OPJconfig->Read(wxT("encode/jpwl/hprotsel") + wxString::Format(wxT("%02d"), n), &m_hprotsel[n], 0); + OPJconfig->Read(wxT("encode/jpwl/htileval") + wxString::Format(wxT("%02d"), n), &m_htileval[n], 0); + OPJconfig->Read(wxT("encode/jpwl/pprotsel") + wxString::Format(wxT("%02d"), n), &m_pprotsel[n], 0); + OPJconfig->Read(wxT("encode/jpwl/ptileval") + wxString::Format(wxT("%02d"), n), &m_ptileval[n], 0); + OPJconfig->Read(wxT("encode/jpwl/ppackval") + wxString::Format(wxT("%02d"), n), &m_ppackval[n], 0); + OPJconfig->Read(wxT("encode/jpwl/sensisel") + wxString::Format(wxT("%02d"), n), &m_sensisel[n], 0); + OPJconfig->Read(wxT("encode/jpwl/stileval") + wxString::Format(wxT("%02d"), n), &m_stileval[n], 0); + } +#endif // USE_JPWL + +#else + // set decoding engine parameters + m_enabledeco = true; + m_enableparse = true; + m_resizemethod = 0; + m_reducefactor = 0; + m_qualitylayers = 0; + m_components = 0; + m_framenum = 0; +#ifdef USE_JPWL + m_enablejpwl = true; + m_expcomps = JPWL_EXPECTED_COMPONENTS; + m_maxtiles = JPWL_MAXIMUM_TILES; +#endif // USE_JPWL + m_showtoolbar = true; + m_showbrowser = true; + m_showpeeker = true; + m_browserwidth = OPJ_BROWSER_WIDTH; + m_peekerheight = OPJ_PEEKER_HEIGHT; + m_framewidth = OPJ_FRAME_WIDTH; + m_frameheight = OPJ_FRAME_HEIGHT; + + // set encoding engine parameters + m_subsampling = wxT("1,1"); + m_origin = wxT("0,0"); + m_rates = wxT("20,10,5"); + m_quality = wxT("30,35,40"); + m_enablequality = false; + m_multicomp = false; + m_irreversible = false; + m_resolutions = 6; + m_progression = 0; + m_cbsize= wxT("32,32"); + m_prsize= wxT("[128,128],[128,128]"); + m_tsize = wxT(""); + m_torigin = wxT("0,0"); + m_enablesop = false; + m_enableeph = false; + m_enablebypass = false; + m_enablereset = false; + m_enablerestart = false; + m_enablevsc = false; + m_enableerterm = false; + m_enablesegmark = false; + m_enableidx = false; + m_index = wxT("index.txt"); + m_enablecomm = true; + m_comment = wxT(""); + m_enablepoc = false; + m_poc = wxT("T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL"); +#ifdef USE_JPWL + m_enablejpwle = true; + for (n = 0; n < MYJPWL_MAX_NO_TILESPECS; n++) { + m_hprotsel[n] = 0; + m_htileval[n] = 0; + m_pprotsel[n] = 0; + m_ptileval[n] = 0; + m_sensisel[n] = 0; + m_stileval[n] = 0; + } +#endif // USE_JPWL + +#endif // OPJ_INICONFIG + + if (m_comment == wxT("")) { +#if defined __WXMSW__ + m_comment = wxT("Created by OPJViewer Win32 - OpenJPEG version "); +#elif defined __WXGTK__ + m_comment = wxT("Created by OPJViewer Lin32 - OpenJPEG version "); +#else + m_comment = wxT("Created by OPJViewer - OpenJPEG version "); +#endif + +#ifdef USE_JPWL + m_comment += wxString::Format(wxT("%s with JPWL"), (char *) opj_version()); +#else + m_comment += wxString::Format(wxT("%s"), (char *) opj_version()); +#endif + } + + // Create the main frame window + OPJFrame *frame = new OPJFrame(NULL, wxID_ANY, OPJ_APPLICATION_TITLEBAR, + wxDefaultPosition, wxSize(wxGetApp().m_framewidth, wxGetApp().m_frameheight), + wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE | + wxHSCROLL | wxVSCROLL); + + // Give it an icon (this is ignored in MDI mode: uses resources) +#ifdef __WXMSW__ + frame->SetIcon(wxIcon(wxT("OPJViewer16"))); +#endif + + frame->Show(true); + + SetTopWindow(frame); + + // if there are files on the command line, open them + if (!(m_filelist.IsEmpty())) { + //wxLogMessage(wxT("Habemus files!!!")); + wxArrayString paths, filenames; + for (unsigned int f = 0; f < wxGetApp().m_filelist.GetCount(); f++) { + paths.Add(wxFileName(wxGetApp().m_filelist[f]).GetFullPath()); + filenames.Add(wxFileName(wxGetApp().m_filelist[f]).GetFullName()); + } + //wxLogMessage(paths[0]); + frame->OpenFiles(paths, filenames); + } + + return true; +} + +int OPJViewerApp::OnExit() +{ + int n; + +#ifdef OPJ_INICONFIG + OPJconfig->Write(wxT("decode/enabledeco"), m_enabledeco); + OPJconfig->Write(wxT("decode/enableparse"), m_enableparse); + OPJconfig->Write(wxT("decode/resizemethod"), m_resizemethod); + OPJconfig->Write(wxT("decode/reducefactor"), m_reducefactor); + OPJconfig->Write(wxT("decode/qualitylayers"), m_qualitylayers); + OPJconfig->Write(wxT("decode/components"), m_components); + OPJconfig->Write(wxT("decode/framenum"), m_framenum); +#ifdef USE_JPWL + OPJconfig->Write(wxT("decode/enablejpwl"), m_enablejpwl); + OPJconfig->Write(wxT("decode/expcomps"), m_expcomps); + OPJconfig->Write(wxT("decode/maxtiles"), m_maxtiles); +#endif // USE_JPWL + OPJconfig->Write(wxT("showtoolbar"), m_showtoolbar); + OPJconfig->Write(wxT("showbrowser"), m_showbrowser); + OPJconfig->Write(wxT("showpeeker"), m_showpeeker); + OPJconfig->Write(wxT("browserwidth"), m_browserwidth); + OPJconfig->Write(wxT("peekerheight"), m_peekerheight); + OPJconfig->Write(wxT("framewidth"), m_framewidth); + OPJconfig->Write(wxT("frameheight"), m_frameheight); + + OPJconfig->Write(wxT("encode/subsampling"), m_subsampling); + OPJconfig->Write(wxT("encode/origin"), m_origin); + OPJconfig->Write(wxT("encode/rates"), m_rates); + OPJconfig->Write(wxT("encode/quality"), m_quality); + OPJconfig->Write(wxT("encode/enablequality"), m_enablequality); + OPJconfig->Write(wxT("encode/multicomp"), m_multicomp); + OPJconfig->Write(wxT("encode/irreversible"), m_irreversible); + OPJconfig->Write(wxT("encode/resolutions"), m_resolutions); + OPJconfig->Write(wxT("encode/progression"), m_progression); + OPJconfig->Write(wxT("encode/cbsize"), m_cbsize); + OPJconfig->Write(wxT("encode/prsize"), m_prsize); + OPJconfig->Write(wxT("encode/tiles"), m_tsize); + OPJconfig->Write(wxT("encode/torigin"), m_torigin); + OPJconfig->Write(wxT("encode/enablesop"), m_enablesop); + OPJconfig->Write(wxT("encode/enableeph"), m_enableeph); + OPJconfig->Write(wxT("encode/enablebypass"), m_enablebypass); + OPJconfig->Write(wxT("encode/enablereset"), m_enablereset); + OPJconfig->Write(wxT("encode/enablerestart"), m_enablerestart); + OPJconfig->Write(wxT("encode/enablevsc"), m_enablevsc); + OPJconfig->Write(wxT("encode/enableerterm"), m_enableerterm); + OPJconfig->Write(wxT("encode/enablesegmark"), m_enablesegmark); + OPJconfig->Write(wxT("encode/enableidx"), m_enableidx); + OPJconfig->Write(wxT("encode/index"), m_index); + OPJconfig->Write(wxT("encode/enablecomm"), m_enablecomm); + OPJconfig->Write(wxT("encode/comment"), m_comment); + OPJconfig->Write(wxT("encode/enablepoc"), m_enablepoc); + OPJconfig->Write(wxT("encode/poc"), m_poc); +#ifdef USE_JPWL + OPJconfig->Write(wxT("encode/enablejpwl"), m_enablejpwle); + for (n = 0; n < MYJPWL_MAX_NO_TILESPECS; n++) { + OPJconfig->Write(wxT("encode/jpwl/hprotsel") + wxString::Format(wxT("%02d"), n), m_hprotsel[n]); + OPJconfig->Write(wxT("encode/jpwl/htileval") + wxString::Format(wxT("%02d"), n), m_htileval[n]); + OPJconfig->Write(wxT("encode/jpwl/pprotsel") + wxString::Format(wxT("%02d"), n), m_pprotsel[n]); + OPJconfig->Write(wxT("encode/jpwl/ptileval") + wxString::Format(wxT("%02d"), n), m_ptileval[n]); + OPJconfig->Write(wxT("encode/jpwl/ppackval") + wxString::Format(wxT("%02d"), n), m_ppackval[n]); + OPJconfig->Write(wxT("encode/jpwl/sensisel") + wxString::Format(wxT("%02d"), n), m_sensisel[n]); + OPJconfig->Write(wxT("encode/jpwl/stileval") + wxString::Format(wxT("%02d"), n), m_stileval[n]); + } +#endif // USE_JPWL + +#endif // OPJ_INICONFIG + + return 1; +} + +void OPJViewerApp::ShowCmdLine(const wxCmdLineParser& parser) +{ + wxString s = wxT("Command line parsed successfully:\nInput files: "); + + size_t count = parser.GetParamCount(); + for (size_t param = 0; param < count; param++) { + s << parser.GetParam(param) << ';'; + m_filelist.Add(parser.GetParam(param)); + } + + //wxLogMessage(s); +} + +// OPJFrame events + +// Event class for sending text messages between worker and GUI threads +BEGIN_EVENT_TABLE(OPJFrame, wxMDIParentFrame) + EVT_MENU(OPJFRAME_HELPABOUT, OPJFrame::OnAbout) + EVT_MENU(OPJFRAME_FILEOPEN, OPJFrame::OnFileOpen) + EVT_MENU(OPJFRAME_FILESAVEAS, OPJFrame::OnFileSaveAs) + EVT_MENU(OPJFRAME_MEMORYOPEN, OPJFrame::OnMemoryOpen) + EVT_SIZE(OPJFrame::OnSize) + EVT_MENU(OPJFRAME_FILEEXIT, OPJFrame::OnQuit) + EVT_MENU(OPJFRAME_FILECLOSE, OPJFrame::OnClose) + EVT_MENU(OPJFRAME_VIEWZOOM, OPJFrame::OnZoom) + EVT_MENU(OPJFRAME_VIEWFIT, OPJFrame::OnFit) + EVT_MENU(OPJFRAME_VIEWRELOAD, OPJFrame::OnReload) + EVT_MENU(OPJFRAME_VIEWPREVFRAME, OPJFrame::OnPrevFrame) + EVT_MENU(OPJFRAME_VIEWHOMEFRAME, OPJFrame::OnHomeFrame) + EVT_MENU(OPJFRAME_VIEWNEXTFRAME, OPJFrame::OnNextFrame) + EVT_MENU(OPJFRAME_VIEWLESSLAYERS, OPJFrame::OnLessLayers) + EVT_MENU(OPJFRAME_VIEWALLLAYERS, OPJFrame::OnAllLayers) + EVT_MENU(OPJFRAME_VIEWMORELAYERS, OPJFrame::OnMoreLayers) + EVT_MENU(OPJFRAME_VIEWLESSRES, OPJFrame::OnLessRes) + EVT_MENU(OPJFRAME_VIEWFULLRES, OPJFrame::OnFullRes) + EVT_MENU(OPJFRAME_VIEWMORERES, OPJFrame::OnMoreRes) + EVT_MENU(OPJFRAME_VIEWPREVCOMP, OPJFrame::OnPrevComp) + EVT_MENU(OPJFRAME_VIEWALLCOMPS, OPJFrame::OnAllComps) + EVT_MENU(OPJFRAME_VIEWNEXTCOMP, OPJFrame::OnNextComp) + EVT_MENU(OPJFRAME_FILETOGGLEB, OPJFrame::OnToggleBrowser) + EVT_MENU(OPJFRAME_FILETOGGLEP, OPJFrame::OnTogglePeeker) + EVT_MENU(OPJFRAME_FILETOGGLET, OPJFrame::OnToggleToolbar) + EVT_MENU(OPJFRAME_SETSENCO, OPJFrame::OnSetsEnco) + EVT_MENU(OPJFRAME_SETSDECO, OPJFrame::OnSetsDeco) + EVT_SASH_DRAGGED_RANGE(OPJFRAME_BROWSEWIN, OPJFRAME_LOGWIN, OPJFrame::OnSashDrag) + EVT_NOTEBOOK_PAGE_CHANGED(LEFT_NOTEBOOK_ID, OPJFrame::OnNotebook) + EVT_MENU(OPJFRAME_THREADLOGMSG, OPJFrame::OnThreadLogmsg) +END_EVENT_TABLE() + +// this is the frame constructor +OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title, + const wxPoint& pos, const wxSize& size, const long style) + : wxMDIParentFrame(parent, id, title, pos, size, style) +{ + // file menu and its items + wxMenu *file_menu = new wxMenu; + + file_menu->Append(OPJFRAME_FILEOPEN, wxT("&Open\tCtrl+O")); + file_menu->SetHelpString(OPJFRAME_FILEOPEN, wxT("Open one or more files")); + + file_menu->Append(OPJFRAME_MEMORYOPEN, wxT("&Memory\tCtrl+M")); + file_menu->SetHelpString(OPJFRAME_MEMORYOPEN, wxT("Open a memory buffer")); + + file_menu->Append(OPJFRAME_FILECLOSE, wxT("&Close\tCtrl+C")); + file_menu->SetHelpString(OPJFRAME_FILECLOSE, wxT("Close current image")); + + file_menu->AppendSeparator(); + + file_menu->Append(OPJFRAME_FILESAVEAS, wxT("&Save as\tCtrl+S")); + file_menu->SetHelpString(OPJFRAME_FILESAVEAS, wxT("Save the current image")); + //file_menu->Enable(OPJFRAME_FILESAVEAS, false); + + file_menu->AppendSeparator(); + + file_menu->Append(OPJFRAME_FILETOGGLEB, wxT("Toggle &browser\tCtrl+B")); + file_menu->SetHelpString(OPJFRAME_FILETOGGLEB, wxT("Toggle the left browsing pane")); + + file_menu->Append(OPJFRAME_FILETOGGLEP, wxT("Toggle &peeker\tCtrl+P")); + file_menu->SetHelpString(OPJFRAME_FILETOGGLEP, wxT("Toggle the bottom peeking pane")); + + file_menu->Append(OPJFRAME_FILETOGGLET, wxT("Toggle &toolbar\tCtrl+T")); + file_menu->SetHelpString(OPJFRAME_FILETOGGLET, wxT("Toggle the toolbar")); + + file_menu->AppendSeparator(); + + file_menu->Append(OPJFRAME_FILEEXIT, wxT("&Exit\tCtrl+Q")); + file_menu->SetHelpString(OPJFRAME_FILEEXIT, wxT("Quit this program")); + + // view menu and its items + wxMenu *view_menu = new wxMenu; + + view_menu->Append(OPJFRAME_VIEWZOOM, wxT("&Zoom\tCtrl+Z")); + view_menu->SetHelpString(OPJFRAME_VIEWZOOM, wxT("Rescale the image")); + + view_menu->Append(OPJFRAME_VIEWFIT, wxT("Zoom to &fit\tCtrl+F")); + view_menu->SetHelpString(OPJFRAME_VIEWFIT, wxT("Fit the image in canvas")); + + view_menu->Append(OPJFRAME_VIEWRELOAD, wxT("&Reload image\tCtrl+R")); + view_menu->SetHelpString(OPJFRAME_VIEWRELOAD, wxT("Reload the current image")); + + view_menu->AppendSeparator(); + + view_menu->Append(OPJFRAME_VIEWPREVFRAME, wxT("&Prev frame\tLeft")); + view_menu->SetHelpString(OPJFRAME_VIEWPREVFRAME, wxT("View previous frame")); + + view_menu->Append(OPJFRAME_VIEWHOMEFRAME, wxT("&Start frame\tHome")); + view_menu->SetHelpString(OPJFRAME_VIEWHOMEFRAME, wxT("View starting frame")); + + view_menu->Append(OPJFRAME_VIEWNEXTFRAME, wxT("&Next frame\tRight")); + view_menu->SetHelpString(OPJFRAME_VIEWNEXTFRAME, wxT("View next frame")); + + view_menu->AppendSeparator(); + + view_menu->Append(OPJFRAME_VIEWLESSLAYERS, wxT("&Less layers\t-")); + view_menu->SetHelpString(OPJFRAME_VIEWLESSLAYERS, wxT("Remove a layer")); + + view_menu->Append(OPJFRAME_VIEWALLLAYERS, wxT("&All layers\t0")); + view_menu->SetHelpString(OPJFRAME_VIEWALLLAYERS, wxT("Show all layers")); + + view_menu->Append(OPJFRAME_VIEWMORELAYERS, wxT("&More layers\t+")); + view_menu->SetHelpString(OPJFRAME_VIEWMORELAYERS, wxT("Add a layer")); + + view_menu->AppendSeparator(); + + view_menu->Append(OPJFRAME_VIEWLESSRES, wxT("&Less resolution\t<")); + view_menu->SetHelpString(OPJFRAME_VIEWLESSRES, wxT("Reduce the resolution")); + + view_menu->Append(OPJFRAME_VIEWFULLRES, wxT("&Full resolution\tf")); + view_menu->SetHelpString(OPJFRAME_VIEWFULLRES, wxT("Full resolution")); + + view_menu->Append(OPJFRAME_VIEWMORERES, wxT("&More resolution\t>")); + view_menu->SetHelpString(OPJFRAME_VIEWMORERES, wxT("Increase the resolution")); + + view_menu->AppendSeparator(); + + view_menu->Append(OPJFRAME_VIEWPREVCOMP, wxT("&Prev component\tDown")); + view_menu->SetHelpString(OPJFRAME_VIEWPREVCOMP, wxT("View previous component")); + + view_menu->Append(OPJFRAME_VIEWALLCOMPS, wxT("&All components\ta")); + view_menu->SetHelpString(OPJFRAME_VIEWALLCOMPS, wxT("View all components")); + + view_menu->Append(OPJFRAME_VIEWNEXTCOMP, wxT("&Next component\tUp")); + view_menu->SetHelpString(OPJFRAME_VIEWNEXTCOMP, wxT("View next component")); + + + // settings menu and its items + wxMenu *sets_menu = new wxMenu; + + sets_menu->Append(OPJFRAME_SETSENCO, wxT("&Encoder\tCtrl+E")); + sets_menu->SetHelpString(OPJFRAME_SETSENCO, wxT("Encoder settings")); + + sets_menu->Append(OPJFRAME_SETSDECO, wxT("&Decoder\tCtrl+D")); + sets_menu->SetHelpString(OPJFRAME_SETSDECO, wxT("Decoder settings")); + + // help menu and its items + wxMenu *help_menu = new wxMenu; + + help_menu->Append(OPJFRAME_HELPABOUT, wxT("&About\tF1")); + help_menu->SetHelpString(OPJFRAME_HELPABOUT, wxT("Basic info on the program")); + + // the whole menubar + wxMenuBar *menu_bar = new wxMenuBar; + menu_bar->Append(file_menu, wxT("&File")); + menu_bar->Append(view_menu, wxT("&View")); + menu_bar->Append(sets_menu, wxT("&Settings")); + menu_bar->Append(help_menu, wxT("&Help")); + + // Associate the menu bar with the frame + SetMenuBar(menu_bar); + + // the status bar + CreateStatusBar(); + + // the toolbar + tool_bar = new wxToolBar(this, OPJFRAME_TOOLBAR, + wxDefaultPosition, wxDefaultSize, + wxTB_HORIZONTAL | wxNO_BORDER); + wxBitmap bmpOpen = wxArtProvider::GetBitmap(wxART_FILE_OPEN, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpSaveAs = wxArtProvider::GetBitmap(wxART_FILE_SAVE_AS, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpZoom = wxArtProvider::GetBitmap(wxART_FIND, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpFit = wxArtProvider::GetBitmap(wxART_FIND_AND_REPLACE, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpReload = wxArtProvider::GetBitmap(wxART_EXECUTABLE_FILE, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpDecosettings = wxArtProvider::GetBitmap(wxART_REPORT_VIEW, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpEncosettings = wxArtProvider::GetBitmap(wxART_LIST_VIEW, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpPrevframe = wxArtProvider::GetBitmap(wxART_GO_BACK, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpHomeframe = wxArtProvider::GetBitmap(wxART_GO_HOME, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpNextframe = wxArtProvider::GetBitmap(wxART_GO_FORWARD, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpLesslayers = bmpPrevframe; + wxBitmap bmpAlllayers = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpMorelayers = bmpNextframe; + wxBitmap bmpLessres = bmpPrevframe; + wxBitmap bmpFullres = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpMoreres = bmpNextframe; + wxBitmap bmpPrevcomp = bmpPrevframe; + wxBitmap bmpAllcomps = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR, + wxDefaultSize); + wxBitmap bmpNextcomp = bmpNextframe; + + tool_bar->AddTool(OPJFRAME_FILEOPEN, bmpOpen, wxT("Open")); + tool_bar->AddTool(OPJFRAME_FILESAVEAS, bmpSaveAs, wxT("Save as ")); + //tool_bar->EnableTool(OPJFRAME_FILESAVEAS, false); + tool_bar->AddSeparator(); + tool_bar->AddTool(OPJFRAME_VIEWZOOM, bmpZoom, wxT("Zoom")); + tool_bar->AddTool(OPJFRAME_VIEWFIT, bmpFit, wxT("Zoom to fit")); + tool_bar->AddTool(OPJFRAME_VIEWRELOAD, bmpReload, wxT("Reload")); + tool_bar->AddSeparator(); + tool_bar->AddTool(OPJFRAME_SETSDECO, bmpDecosettings, wxT("Decoder settings")); + tool_bar->AddTool(OPJFRAME_SETSENCO, bmpEncosettings, wxT("Encoder settings")); + tool_bar->AddSeparator(); + tool_bar->AddTool(OPJFRAME_VIEWPREVFRAME, bmpPrevframe, wxT("Previous frame")); + tool_bar->AddTool(OPJFRAME_VIEWHOMEFRAME, bmpHomeframe, wxT("Starting frame")); + tool_bar->AddTool(OPJFRAME_VIEWNEXTFRAME, bmpNextframe, wxT("Next frame")); + tool_bar->AddSeparator(); + tool_bar->AddTool(OPJFRAME_VIEWLESSLAYERS, bmpLesslayers, wxT("Remove a layer")); + tool_bar->AddTool(OPJFRAME_VIEWALLLAYERS, bmpAlllayers, wxT("Show all layers")); + tool_bar->AddTool(OPJFRAME_VIEWMORELAYERS, bmpMorelayers, wxT("Add a layer")); + tool_bar->AddSeparator(); + tool_bar->AddTool(OPJFRAME_VIEWLESSRES, bmpLessres, wxT("Reduce the resolution")); + tool_bar->AddTool(OPJFRAME_VIEWFULLRES, bmpFullres, wxT("Full resolution")); + tool_bar->AddTool(OPJFRAME_VIEWMORERES, bmpMoreres, wxT("Increase the resolution")); + tool_bar->AddSeparator(); + tool_bar->AddTool(OPJFRAME_VIEWPREVCOMP, bmpPrevcomp, wxT("Previous component")); + tool_bar->AddTool(OPJFRAME_VIEWALLCOMPS, bmpAllcomps, wxT("All components")); + tool_bar->AddTool(OPJFRAME_VIEWNEXTCOMP, bmpNextcomp, wxT("Next component")); + tool_bar->Realize(); + + // associate the toolbar with the frame + SetToolBar(tool_bar); + + // show the toolbar? + if (!wxGetApp().m_showtoolbar) + tool_bar->Show(false); + else + tool_bar->Show(true); + + // the logging window + loggingWindow = new wxSashLayoutWindow(this, OPJFRAME_LOGWIN, + wxDefaultPosition, wxSize(400, wxGetApp().m_peekerheight), + wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN + ); + loggingWindow->SetDefaultSize(wxSize(1000, wxGetApp().m_peekerheight)); + loggingWindow->SetOrientation(wxLAYOUT_HORIZONTAL); + loggingWindow->SetAlignment(wxLAYOUT_BOTTOM); + //loggingWindow->SetBackgroundColour(wxColour(0, 0, 255)); + loggingWindow->SetSashVisible(wxSASH_TOP, true); + + // show the logging? + if (!wxGetApp().m_showpeeker) + loggingWindow->Show(false); + else + loggingWindow->Show(true); + + // create the bottom notebook + m_bookCtrlbottom = new wxNotebook(loggingWindow, BOTTOM_NOTEBOOK_ID, + wxDefaultPosition, wxDefaultSize, + wxBK_LEFT); + + // create the text control of the logger + m_textCtrl = new wxTextCtrl(m_bookCtrlbottom, wxID_ANY, wxT(""), + wxDefaultPosition, wxDefaultSize, + wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_READONLY + ); + m_textCtrl->SetValue(_T("Logging window\n")); + + // add it to the notebook + m_bookCtrlbottom->AddPage(m_textCtrl, wxT("Log")); + + // create the text control of the browser + m_textCtrlbrowse = new wxTextCtrl(m_bookCtrlbottom, wxID_ANY, wxT(""), + wxDefaultPosition, wxDefaultSize, + wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_READONLY | wxTE_RICH + ); + wxFont *browsefont = new wxFont(wxNORMAL_FONT->GetPointSize(), + wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); + m_textCtrlbrowse->SetDefaultStyle(wxTextAttr(wxNullColour, wxNullColour, *browsefont)); + m_textCtrlbrowse->AppendText(wxT("Browsing window\n")); + + // add it the notebook + m_bookCtrlbottom->AddPage(m_textCtrlbrowse, wxT("Peek"), false); + + // the browser window + markerTreeWindow = new wxSashLayoutWindow(this, OPJFRAME_BROWSEWIN, + wxDefaultPosition, wxSize(wxGetApp().m_browserwidth, 30), + wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN + ); + markerTreeWindow->SetDefaultSize(wxSize(wxGetApp().m_browserwidth, 1000)); + markerTreeWindow->SetOrientation(wxLAYOUT_VERTICAL); + markerTreeWindow->SetAlignment(wxLAYOUT_LEFT); + //markerTreeWindow->SetBackgroundColour(wxColour(0, 255, 0)); + markerTreeWindow->SetSashVisible(wxSASH_RIGHT, true); + markerTreeWindow->SetExtraBorderSize(0); + + // create the browser notebook + m_bookCtrl = new wxNotebook(markerTreeWindow, LEFT_NOTEBOOK_ID, + wxDefaultPosition, wxDefaultSize, + wxBK_TOP); + + // show the browser? + if (!wxGetApp().m_showbrowser) + markerTreeWindow->Show(false); + else + markerTreeWindow->Show(true); + +#ifdef __WXMOTIF__ + // For some reason, we get a memcpy crash in wxLogStream::DoLogStream + // on gcc/wxMotif, if we use wxLogTextCtl. Maybe it's just gcc? + delete wxLog::SetActiveTarget(new wxLogStderr); +#else + // set our text control as the log target + wxLogTextCtrl *logWindow = new wxLogTextCtrl(m_textCtrl); + delete wxLog::SetActiveTarget(logWindow); +#endif + + // associate drop targets with the controls + SetDropTarget(new OPJDnDFile(this)); + +} + +// this is the frame destructor +OPJFrame::~OPJFrame(void) +{ + // save size settings + GetSize(&(wxGetApp().m_framewidth), &(wxGetApp().m_frameheight)); + + // delete all possible things + delete m_bookCtrl; + m_bookCtrl = NULL; + + delete markerTreeWindow; + markerTreeWindow = NULL; + + delete m_textCtrl; + m_textCtrl = NULL; + + delete m_bookCtrlbottom; + m_bookCtrlbottom = NULL; + + delete loggingWindow; + loggingWindow = NULL; +} + +void OPJFrame::OnNotebook(wxNotebookEvent& event) +{ + int sel = event.GetSelection(); + long childnum; + + m_bookCtrl->GetPageText(sel).ToLong(&childnum); + + if (m_childhash[childnum]) + m_childhash[childnum]->Activate(); + + //wxLogMessage(wxT("Selection changed (now %d --> %d)"), childnum, m_childhash[childnum]->m_winnumber); + +} + + +void OPJFrame::Resize(int number) +{ + wxSize size = GetClientSize(); +} + +void OPJFrame::OnSetsEnco(wxCommandEvent& event) +{ + int n; + + OPJEncoderDialog dialog(this, event.GetId()); + + if (dialog.ShowModal() == wxID_OK) { + + // load settings + wxGetApp().m_subsampling = dialog.m_subsamplingCtrl->GetValue(); + wxGetApp().m_origin = dialog.m_originCtrl->GetValue(); + wxGetApp().m_rates = dialog.m_rateCtrl->GetValue(); + wxGetApp().m_quality = dialog.m_qualityCtrl->GetValue(); + wxGetApp().m_enablequality = dialog.m_qualityRadio->GetValue(); + wxGetApp().m_multicomp = dialog.m_mctCheck->GetValue(); + wxGetApp().m_irreversible = dialog.m_irrevCheck->GetValue(); + wxGetApp().m_resolutions = dialog.m_resolutionsCtrl->GetValue(); + wxGetApp().m_cbsize = dialog.m_cbsizeCtrl->GetValue(); + wxGetApp().m_prsize = dialog.m_prsizeCtrl->GetValue(); + wxGetApp().m_tsize = dialog.m_tsizeCtrl->GetValue(); + wxGetApp().m_torigin = dialog.m_toriginCtrl->GetValue(); + wxGetApp().m_progression = dialog.progressionBox->GetSelection(); + wxGetApp().m_enablesop = dialog.m_sopCheck->GetValue(); + wxGetApp().m_enableeph = dialog.m_ephCheck->GetValue(); + wxGetApp().m_enablebypass = dialog.m_enablebypassCheck->GetValue(); + wxGetApp().m_enablereset = dialog.m_enableresetCheck->GetValue(); + wxGetApp().m_enablerestart = dialog.m_enablerestartCheck->GetValue(); + wxGetApp().m_enablevsc = dialog.m_enablevscCheck->GetValue(); + wxGetApp().m_enableerterm = dialog.m_enableertermCheck->GetValue(); + wxGetApp().m_enablesegmark = dialog.m_enablesegmarkCheck->GetValue(); + wxGetApp().m_enableidx = dialog.m_enableidxCheck->GetValue(); + wxGetApp().m_index = dialog.m_indexCtrl->GetValue(); + wxGetApp().m_enablecomm = dialog.m_enablecommCheck->GetValue(); + wxGetApp().m_comment = dialog.m_commentCtrl->GetValue(); + wxGetApp().m_enablepoc = dialog.m_enablepocCheck->GetValue(); + wxGetApp().m_poc = dialog.m_pocCtrl->GetValue(); +#ifdef USE_JPWL + wxGetApp().m_enablejpwle = dialog.m_enablejpwlCheck->GetValue(); + for (n = 0; n < MYJPWL_MAX_NO_TILESPECS; n++) { + wxGetApp().m_hprotsel[n] = dialog.m_hprotChoice[n]->GetSelection(); + wxGetApp().m_htileval[n] = dialog.m_htileCtrl[n]->GetValue(); + wxGetApp().m_pprotsel[n] = dialog.m_pprotChoice[n]->GetSelection(); + wxGetApp().m_ptileval[n] = dialog.m_ptileCtrl[n]->GetValue(); + wxGetApp().m_ppackval[n] = dialog.m_ppackCtrl[n]->GetValue(); + wxGetApp().m_sensisel[n] = dialog.m_sensiChoice[n]->GetSelection(); + wxGetApp().m_stileval[n] = dialog.m_stileCtrl[n]->GetValue(); + } +#endif // USE_JPWL + }; +} + +void OPJFrame::OnSetsDeco(wxCommandEvent& event) +{ + OPJDecoderDialog dialog(this, event.GetId()); + + if (dialog.ShowModal() == wxID_OK) { + + // load settings + wxGetApp().m_enabledeco = dialog.m_enabledecoCheck->GetValue(); + wxGetApp().m_enableparse = dialog.m_enableparseCheck->GetValue(); + wxGetApp().m_resizemethod = dialog.m_resizeBox->GetSelection() - 1; + wxGetApp().m_reducefactor = dialog.m_reduceCtrl->GetValue(); + wxGetApp().m_qualitylayers = dialog.m_layerCtrl->GetValue(); + wxGetApp().m_components = dialog.m_numcompsCtrl->GetValue(); + wxGetApp().m_framenum = dialog.m_framenumCtrl->GetValue(); +#ifdef USE_JPWL + wxGetApp().m_enablejpwl = dialog.m_enablejpwlCheck->GetValue(); + wxGetApp().m_expcomps = dialog.m_expcompsCtrl->GetValue(); + wxGetApp().m_maxtiles = dialog.m_maxtilesCtrl->GetValue(); +#endif // USE_JPWL + + }; +} + +void OPJFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) +{ + Close(true); +} + +void OPJFrame::OnClose(wxCommandEvent& WXUNUSED(event)) +{ + // current frame + OPJChildFrame *currframe = (OPJChildFrame *) GetActiveChild(); + + if (!currframe) + return; + + wxCloseEvent e; + currframe->OnClose(e); +} + +void OPJFrame::OnFit(wxCommandEvent& event) +{ + OPJChildFrame *currchild; + wxString eventstring = event.GetString(); + + //wxLogMessage(wxT("OnFit:%d:%s"), event.GetInt(), eventstring); + + // current child + if (event.GetInt() >= 1) { + currchild = m_childhash[event.GetInt()]; + } else { + currchild = (OPJChildFrame *) GetActiveChild(); + } + + // problems + if (!currchild) + return; + + // current canvas + OPJCanvas *currcanvas = currchild->m_canvas; + + // find a fit-to-width zoom + /*int zooml, wzooml, hzooml; + wxSize clientsize = currcanvas->GetClientSize(); + wzooml = (int) ceil(100.0 * (double) (clientsize.GetWidth() - 2 * OPJ_CANVAS_BORDER) / (double) (currcanvas->m_image100.GetWidth())); + hzooml = (int) ceil(100.0 * (double) (clientsize.GetHeight() - 2 * OPJ_CANVAS_BORDER) / (double) (currcanvas->m_image100.GetHeight())); + zooml = wxMin(100, wxMin(wzooml, hzooml));*/ + + // fit to width + Rescale(-1, currchild); +} + +void OPJFrame::OnZoom(wxCommandEvent& WXUNUSED(event)) +{ + // current frame + OPJChildFrame *currframe = (OPJChildFrame *) GetActiveChild(); + + if (!currframe) + return; + + // get the preferred zoom + long zooml = wxGetNumberFromUser(wxT("Choose a scale between 5% and 300%"), + wxT("Zoom (%)"), + wxT("Image scale"), + currframe->m_canvas->m_zooml, 5, 300, NULL, wxDefaultPosition); + + // rescale current frame image if necessary + if (zooml >= 5) { + Rescale(zooml, currframe); + wxLogMessage(wxT("zoom to %d%%"), zooml); + } +} + +void OPJFrame::Rescale(int zooml, OPJChildFrame *currframe) +{ + wxImage new_image = currframe->m_canvas->m_image100.ConvertToImage(); + + // resizing enabled? + if (wxGetApp().m_resizemethod == -1) { + + zooml = 100; + + } else { + + if (zooml < 0) { + // find a fit-to-width zoom + int wzooml, hzooml; + //wxSize clientsize = currframe->m_canvas->GetClientSize(); + wxSize clientsize = currframe->m_frame->GetActiveChild()->GetClientSize(); + wzooml = (int) floor(100.0 * (double) clientsize.GetWidth() / (double) (2 * OPJ_CANVAS_BORDER + currframe->m_canvas->m_image100.GetWidth())); + hzooml = (int) floor(100.0 * (double) clientsize.GetHeight() / (double) (2 * OPJ_CANVAS_BORDER + currframe->m_canvas->m_image100.GetHeight())); + zooml = wxMin(100, wxMin(wzooml, hzooml)); + } + } + + if (zooml != 100) + new_image.Rescale((int) ((double) zooml * (double) new_image.GetWidth() / 100.0), + (int) ((double) zooml * (double) new_image.GetHeight() / 100.0), + wxGetApp().m_resizemethod ? wxIMAGE_QUALITY_HIGH : wxIMAGE_QUALITY_NORMAL); + currframe->m_canvas->m_image = wxBitmap(new_image); + currframe->m_canvas->SetScrollbars(20, + 20, + (int)(0.5 + (double) new_image.GetWidth() / 20.0), + (int)(0.5 + (double) new_image.GetHeight() / 20.0) + ); + + currframe->m_canvas->Refresh(); + + wxLogMessage(wxT("Rescale said %d%%"), zooml); + + // update zoom + currframe->m_canvas->m_zooml = zooml; +} + + +void OPJFrame::OnReload(wxCommandEvent& event) +{ + OPJChildFrame *currframe = (OPJChildFrame *) GetActiveChild(); + + if (currframe) { + OPJDecoThread *dthread = currframe->m_canvas->CreateDecoThread(); + + if (dthread->Run() != wxTHREAD_NO_ERROR) + wxLogMessage(wxT("Can't start deco thread!")); + else + wxLogMessage(wxT("New deco thread started.")); + + currframe->m_canvas->Refresh(); + + // update zoom + //currframe->m_canvas->m_zooml = zooml; + } +} + +void OPJFrame::OnPrevFrame(wxCommandEvent& event) +{ + if (--wxGetApp().m_framenum < 0) + wxGetApp().m_framenum = 0; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnHomeFrame(wxCommandEvent& event) +{ + wxGetApp().m_framenum = 0; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnNextFrame(wxCommandEvent& event) +{ + ++wxGetApp().m_framenum; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnLessLayers(wxCommandEvent& event) +{ + if (--wxGetApp().m_qualitylayers < 1) + wxGetApp().m_qualitylayers = 1; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnAllLayers(wxCommandEvent& event) +{ + wxGetApp().m_qualitylayers = 0; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnMoreLayers(wxCommandEvent& event) +{ + ++wxGetApp().m_qualitylayers; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnLessRes(wxCommandEvent& event) +{ + ++wxGetApp().m_reducefactor; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnFullRes(wxCommandEvent& event) +{ + wxGetApp().m_reducefactor = 0; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnMoreRes(wxCommandEvent& event) +{ + if (--wxGetApp().m_reducefactor < 0) + wxGetApp().m_reducefactor = 0; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnPrevComp(wxCommandEvent& event) +{ + if (--wxGetApp().m_components < 1) + wxGetApp().m_components = 1; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnAllComps(wxCommandEvent& event) +{ + wxGetApp().m_components = 0; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnNextComp(wxCommandEvent& event) +{ + ++wxGetApp().m_components; + + wxCommandEvent e; + OnReload(e); +} + +void OPJFrame::OnToggleBrowser(wxCommandEvent& WXUNUSED(event)) +{ + if (markerTreeWindow->IsShown()) + markerTreeWindow->Show(false); + else + markerTreeWindow->Show(true); + + wxLayoutAlgorithm layout; + layout.LayoutMDIFrame(this); + + wxGetApp().m_showbrowser = markerTreeWindow->IsShown(); + + // Leaves bits of itself behind sometimes + GetClientWindow()->Refresh(); +} + +void OPJFrame::OnTogglePeeker(wxCommandEvent& WXUNUSED(event)) +{ + if (loggingWindow->IsShown()) + loggingWindow->Show(false); + else + loggingWindow->Show(true); + + wxLayoutAlgorithm layout; + layout.LayoutMDIFrame(this); + + wxGetApp().m_showpeeker = loggingWindow->IsShown(); + + // Leaves bits of itself behind sometimes + GetClientWindow()->Refresh(); +} + +void OPJFrame::OnToggleToolbar(wxCommandEvent& WXUNUSED(event)) +{ + if (tool_bar->IsShown()) + tool_bar->Show(false); + else + tool_bar->Show(true); + + wxLayoutAlgorithm layout; + layout.LayoutMDIFrame(this); + + wxGetApp().m_showtoolbar = tool_bar->IsShown(); + + // Leaves bits of itself behind sometimes + GetClientWindow()->Refresh(); +} + +void OPJFrame::OnSashDrag(wxSashEvent& event) +{ + int wid, hei; + + if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE) + return; + + switch (event.GetId()) { + case OPJFRAME_BROWSEWIN: + { + markerTreeWindow->SetDefaultSize(wxSize(event.GetDragRect().width, 1000)); + break; + } + case OPJFRAME_LOGWIN: + { + loggingWindow->SetDefaultSize(wxSize(1000, event.GetDragRect().height)); + break; + } + } + + wxLayoutAlgorithm layout; + layout.LayoutMDIFrame(this); + + // Leaves bits of itself behind sometimes + GetClientWindow()->Refresh(); + + // update dimensions + markerTreeWindow->GetSize(&wid, &hei); + wxGetApp().m_browserwidth = wid; + + loggingWindow->GetSize(&wid, &hei); + wxGetApp().m_peekerheight = hei; + +} + +void OPJFrame::OnThreadLogmsg(wxCommandEvent& event) +{ +#if 1 + wxLogMessage(wxT("Frame got message from worker thread: %d"), event.GetInt()); + wxLogMessage(event.GetString()); +#else + int n = event.GetInt(); + if ( n == -1 ) + { + m_dlgProgress->Destroy(); + m_dlgProgress = (wxProgressDialog *)NULL; + + // the dialog is aborted because the event came from another thread, so + // we may need to wake up the main event loop for the dialog to be + // really closed + wxWakeUpIdle(); + } + else + { + if ( !m_dlgProgress->Update(n) ) + { + wxCriticalSectionLocker lock(m_critsectWork); + + m_cancelled = true; + } + } +#endif +} + + +// physically save the file +void OPJFrame::SaveFile(wxArrayString paths, wxArrayString filenames) +{ + size_t count = paths.GetCount(); + wxString msg, s; + + if (wxFile::Exists(paths[0].c_str())) { + + s.Printf(wxT("File %s already exists. Do you want to overwrite it?\n"), filenames[0].c_str()); + wxMessageDialog dialog3(this, s, _T("File exists"), wxYES_NO); + if (dialog3.ShowModal() == wxID_NO) + return; + } + + /*s.Printf(_T("File %d: %s (%s)\n"), (int)0, paths[0].c_str(), filenames[0].c_str()); + msg += s; + + wxMessageDialog dialog2(this, msg, _T("Selected files")); + dialog2.ShowModal();*/ + + if (!GetActiveChild()) + return; + + ((OPJChildFrame *) GetActiveChild())->m_canvas->m_savename = paths[0]; + + OPJEncoThread *ethread = ((OPJChildFrame *) GetActiveChild())->m_canvas->CreateEncoThread(); + + if (ethread->Run() != wxTHREAD_NO_ERROR) + wxLogMessage(wxT("Can't start enco thread!")); + else + wxLogMessage(wxT("New enco thread started.")); + + +} + +// physically open the files +void OPJFrame::OpenFiles(wxArrayString paths, wxArrayString filenames) +{ + + size_t count = paths.GetCount(); + for (size_t n = 0; n < count; n++) { + + wxString msg, s; + s.Printf(_T("File %d: %s (%s)\n"), (int)n, paths[n].c_str(), filenames[n].c_str()); + + msg += s; + + /*wxMessageDialog dialog2(this, msg, _T("Selected files")); + dialog2.ShowModal();*/ + + // Make another frame, containing a canvas + OPJChildFrame *subframe = new OPJChildFrame(this, + paths[n], + winNumber, + wxT("Canvas Frame"), + wxDefaultPosition, wxSize(300, 300), + wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE + ); + m_childhash[winNumber] = subframe; + + // create own marker tree + m_treehash[winNumber] = new OPJMarkerTree(m_bookCtrl, subframe, paths[n], wxT("Parsing..."), TreeTest_Ctrl, + wxDefaultPosition, wxDefaultSize, + wxTR_DEFAULT_STYLE | wxSUNKEN_BORDER + ); + + m_bookCtrl->AddPage(m_treehash[winNumber], wxString::Format(wxT("%u"), winNumber), false); + + for (unsigned int p = 0; p < m_bookCtrl->GetPageCount(); p++) { + if (m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), winNumber)) { + m_bookCtrl->ChangeSelection(p); + break; + } + } + + winNumber++; + } +} + +void OPJFrame::OnFileOpen(wxCommandEvent& WXUNUSED(event)) +{ + wxString wildcards = +#ifdef __WXMOTIF__ + wxT("JPEG 2000 files (*.jp2,*.j2k,*.j2c,*.mj2)|*.*j*2*"); +#else +#if wxUSE_LIBOPENJPEG + wxT("JPEG 2000 files (*.jp2,*.j2k,*.j2c,*.mj2)|*.jp2;*.j2k;*.j2c;*.mj2") +#endif +#if USE_MXF + wxT("|MXF JPEG 2000 video (*.mxf)|*.mxf") +#endif // USE_MXF +#if wxUSE_LIBJPEG + wxT("|JPEG files (*.jpg)|*.jpg") +#endif +#if OPJ_MANYFORMATS + wxT("|BMP files (*.bmp)|*.bmp") + wxT("|PNG files (*.png)|*.png") + wxT("|GIF files (*.gif)|*.gif") + wxT("|PNM files (*.pnm)|*.pnm") + wxT("|TIFF files (*.tif,*.tiff)|*.tif*") +#endif + wxT("|All files|*"); +#endif + wxFileDialog dialog(this, _T("Open image file(s)"), + wxEmptyString, wxEmptyString, wildcards, + wxFD_OPEN|wxFD_MULTIPLE); + + if (dialog.ShowModal() == wxID_OK) { + wxArrayString paths, filenames; + + dialog.GetPaths(paths); + dialog.GetFilenames(filenames); + + OpenFiles(paths, filenames); + } + +} + +void OPJFrame::OnFileSaveAs(wxCommandEvent& WXUNUSED(event)) +{ + wxString wildcards = +#ifdef wxUSE_LIBOPENJPEG +#ifdef __WXMOTIF__ + wxT("JPEG 2000 codestream (*.j2k)|*.*j*2*"); +#else + wxT("JPEG 2000 codestream (*.j2k)|*.j2k") + wxT("|JPEG 2000 file format (*.jp2)|*.jp2"); +#endif +#endif + + wxFileDialog dialog(this, _T("Save image file"), + wxEmptyString, wxEmptyString, wildcards, + wxFD_SAVE); + + if (dialog.ShowModal() == wxID_OK) { + wxArrayString paths, filenames; + + dialog.GetPaths(paths); + dialog.GetFilenames(filenames); + + SaveFile(paths, filenames); + } + + +} + +void OPJFrame::OnMemoryOpen(wxCommandEvent& WXUNUSED(event)) +{ + // do nothing + return; + + wxTextEntryDialog dialog(this, wxT("Memory HEX address range: start_address-stop_address"), + wxT("Decode a memory buffer"), + wxT("0x-0x"), + wxOK | wxCANCEL | wxCENTRE, + wxDefaultPosition); + + if (dialog.ShowModal() == wxID_OK) { + + } + +} + +BEGIN_EVENT_TABLE(OPJCanvas, wxScrolledWindow) + EVT_MOUSE_EVENTS(OPJCanvas::OnEvent) + EVT_MENU(OPJCANVAS_THREADSIGNAL, OPJCanvas::OnThreadSignal) +END_EVENT_TABLE() + +// Define a constructor for my canvas +OPJCanvas::OPJCanvas(wxFileName fname, wxWindow *parent, const wxPoint& pos, const wxSize& size) + : wxScrolledWindow(parent, wxID_ANY, pos, size, + wxSUNKEN_BORDER | wxNO_FULL_REPAINT_ON_RESIZE) +{ + SetBackgroundColour(OPJ_CANVAS_COLOUR); + + m_fname = fname; + m_childframe = (OPJChildFrame *) parent; + // 100% zoom + m_zooml = 100; + + + OPJDecoThread *dthread = CreateDecoThread(); + + if (dthread->Run() != wxTHREAD_NO_ERROR) + wxLogMessage(wxT("Can't start deco thread!")); + else + wxLogMessage(wxT("New deco thread started.")); + + // 100% zoom + //m_zooml = 100; + +} + +OPJDecoThread *OPJCanvas::CreateDecoThread(void) +{ + OPJDecoThread *dthread = new OPJDecoThread(this); + + if (dthread->Create() != wxTHREAD_NO_ERROR) + wxLogError(wxT("Can't create deco thread!")); + + wxCriticalSectionLocker enter(wxGetApp().m_deco_critsect); + wxGetApp().m_deco_threads.Add(dthread); + + return dthread; +} + +OPJEncoThread *OPJCanvas::CreateEncoThread(void) +{ + OPJEncoThread *ethread = new OPJEncoThread(this); + + if (ethread->Create() != wxTHREAD_NO_ERROR) + wxLogError(wxT("Can't create enco thread!")); + + wxCriticalSectionLocker enter(wxGetApp().m_enco_critsect); + wxGetApp().m_enco_threads.Add(ethread); + + return ethread; +} + +#define activeoverlay 0 +// Define the repainting behaviour +void OPJCanvas::OnDraw(wxDC& dc) +{ + if (m_image.Ok()) { + dc.DrawBitmap(m_image, OPJ_CANVAS_BORDER, OPJ_CANVAS_BORDER); + + if (activeoverlay) { + dc.SetPen(*wxRED_PEN); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + //int tw, th; + dc.DrawRectangle(OPJ_CANVAS_BORDER, OPJ_CANVAS_BORDER, + (unsigned long int) (0.5 + (double) m_zooml * (double) m_childframe->m_twidth / 100.0), + (unsigned long int) (0.5 + (double) m_zooml * (double) m_childframe->m_theight / 100.0)); + } + + } else { + dc.SetFont(*wxSWISS_FONT); + dc.SetPen(*wxBLACK_PEN); +#ifdef __WXGTK__ + dc.DrawText(_T("Decoding image, please wait... (press \"Zoom to Fit\" to show the image)"), 40, 50); +#else + dc.DrawText(_T("Decoding image, please wait..."), 40, 50); +#endif + } +} + +// This implements a tiny doodling program! Drag the mouse using +// the left button. +void OPJCanvas::OnEvent(wxMouseEvent& event) +{ +#if USE_PENCIL_ON_CANVAS + wxClientDC dc(this); + PrepareDC(dc); + + wxPoint pt(event.GetLogicalPosition(dc)); + + if ((xpos > -1) && (ypos > -1) && event.Dragging()) { + dc.SetPen(*wxRED_PEN); + dc.DrawLine(xpos, ypos, pt.x, pt.y); + } + xpos = pt.x; + ypos = pt.y; +#endif +} + +void OPJFrame::OnSize(wxSizeEvent& WXUNUSED(event)) +{ + wxLayoutAlgorithm layout; + layout.LayoutMDIFrame(this); +} + +void OPJCanvas::OnThreadSignal(wxCommandEvent& event) +{ +#if 1 + wxLogMessage(wxT("Canvas got signal from deco thread: %d"), event.GetInt()); + wxLogMessage(event.GetString()); +#else + int n = event.GetInt(); + if ( n == -1 ) + { + m_dlgProgress->Destroy(); + m_dlgProgress = (wxProgressDialog *)NULL; + + // the dialog is aborted because the event came from another thread, so + // we may need to wake up the main event loop for the dialog to be + // really closed + wxWakeUpIdle(); + } + else + { + if ( !m_dlgProgress->Update(n) ) + { + wxCriticalSectionLocker lock(m_critsectWork); + + m_cancelled = true; + } + } +#endif +} + + +// Note that OPJFRAME_FILEOPEN and OPJFRAME_HELPABOUT commands get passed +// to the parent window for processing, so no need to +// duplicate event handlers here. + +BEGIN_EVENT_TABLE(OPJChildFrame, wxMDIChildFrame) + /*EVT_MENU(SASHTEST_CHILD_QUIT, OPJChildFrame::OnQuit)*/ + EVT_CLOSE(OPJChildFrame::OnClose) + EVT_SET_FOCUS(OPJChildFrame::OnGotFocus) + EVT_KILL_FOCUS(OPJChildFrame::OnLostFocus) +END_EVENT_TABLE() + +OPJChildFrame::OPJChildFrame(OPJFrame *parent, wxFileName fname, int winnumber, const wxString& title, const wxPoint& pos, const wxSize& size, +const long style): + wxMDIChildFrame(parent, wxID_ANY, title, pos, size, style) +{ + m_frame = (OPJFrame *) parent; + m_canvas = NULL; + //my_children.Append(this); + m_fname = fname; + m_winnumber = winnumber; + SetTitle(wxString::Format(_T("%d: "), m_winnumber) + m_fname.GetFullName()); + + // Give it an icon (this is ignored in MDI mode: uses resources) +#ifdef __WXMSW__ + SetIcon(wxIcon(wxT("OPJChild16"))); +#endif + + // Give it a status line + /*CreateStatusBar();*/ + + int width, height; + GetClientSize(&width, &height); + + OPJCanvas *canvas = new OPJCanvas(fname, this, wxPoint(0, 0), wxSize(width, height)); +#if USE_PENCIL_ON_CANVAS + canvas->SetCursor(wxCursor(wxCURSOR_PENCIL)); +#endif + m_canvas = canvas; + + // Give it scrollbars + canvas->SetScrollbars(20, 20, 5, 5); + + Show(true); + Maximize(true); + + /*wxLogError(wxString::Format(wxT("Created tree %d (0x%x)"), m_winnumber, m_frame->m_treehash[m_winnumber]));*/ + +} + +OPJChildFrame::~OPJChildFrame(void) +{ + //my_children.DeleteObject(this); +} + + +void OPJChildFrame::OnClose(wxCloseEvent& event) +{ + for (unsigned int p = 0; p < m_frame->m_bookCtrl->GetPageCount(); p++) { + if (m_frame->m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), m_winnumber)) { + m_frame->m_bookCtrl->DeletePage(p); + break; + } + } + Destroy(); + + wxLogMessage(wxT("Closed: %d"), m_winnumber); +} + +void OPJChildFrame::OnActivate(wxActivateEvent& event) +{ + /*if (event.GetActive() && m_canvas) + m_canvas->SetFocus();*/ +} + +void OPJChildFrame::OnGotFocus(wxFocusEvent& event) +{ + // we need to check if the notebook is being destroyed or not + if (!m_frame->m_bookCtrl) + return; + + for (unsigned int p = 0; p < m_frame->m_bookCtrl->GetPageCount(); p++) { + + if (m_frame->m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), m_winnumber)) { + m_frame->m_bookCtrl->ChangeSelection(p); + break; + } + + } + + //wxLogMessage(wxT("Got focus: %d (%x)"), m_winnumber, event.GetWindow()); +} + +void OPJChildFrame::OnLostFocus(wxFocusEvent& event) +{ + //wxLogMessage(wxT("Lost focus: %d (%x)"), m_winnumber, event.GetWindow()); +} + + +//////////////////////////////// +// drag and drop +//////////////////////////////// + +bool OPJDnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames) +{ + /*size_t nFiles = filenames.GetCount(); + wxString str; + str.Printf( _T("%d files dropped\n"), (int)nFiles); + for ( size_t n = 0; n < nFiles; n++ ) { + str << filenames[n] << wxT("\n"); + } + wxLogMessage(str);*/ + m_pOwner->OpenFiles(filenames, filenames); + + return true; +} + diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.h b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.h new file mode 100644 index 0000000000..3574dac1dd --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.h @@ -0,0 +1,811 @@ +/* + * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +///////////////////////////////////////////////////////////////////////////// +// Name: sashtest.h +// Purpose: Layout window/sash sample +// Author: Julian Smart +// Modified by: +// Created: 04/01/98 +// RCS-ID: $Id: sashtest.h,v 1.5 2005/06/02 12:04:24 JS Exp $ +// Copyright: (c) Julian Smart +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Name: treectrl.h +// Purpose: wxTreeCtrl sample +// Author: Julian Smart +// Modified by: +// Created: 04/01/98 +// RCS-ID: $Id: treetest.h,v 1.50 2006/11/04 11:26:51 VZ Exp $ +// Copyright: (c) Julian Smart +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Name: dialogs.h +// Purpose: Common dialogs demo +// Author: Julian Smart +// Modified by: ABX (2004) - adjustementd for conditional building +// Created: 04/01/98 +// RCS-ID: $Id: dialogs.h,v 1.50 2006/10/08 14:12:59 VZ Exp $ +// Copyright: (c) Julian Smart +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#ifndef __OPJ_VIEWER_H__ +#define __OPJ_VIEWER_H__ + +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#ifndef WX_PRECOMP +#include "wx/wx.h" +#include "wx/mdi.h" +#endif + +#include "wx/toolbar.h" +#include "wx/laywin.h" +#include "wx/treectrl.h" + +#include "icon1.xpm" +#include "icon2.xpm" +#include "icon3.xpm" +#include "icon4.xpm" +#include "icon5.xpm" + +#include "wx/filedlg.h" +#include "wx/toolbar.h" +#include +#include +#include +#include +#include "wx/notebook.h" +#include + +#include "wx/propdlg.h" +#include "wx/spinctrl.h" + +#include +#include "wx/wxhtml.h" +#include "wx/statline.h" +#include + +#include + +#include "wx/toolbar.h" +#include "wx/artprov.h" + +#include "libopenjpeg/openjpeg.h" + +//#include "imagj2k.h" +//#include "imagjp2.h" +//#include "imagmj2.h" +#include "imagjpeg2000.h" +#ifdef USE_MXF +#include "imagmxf.h" +#endif // USE_MXF + +#ifdef __WXMSW__ +typedef unsigned __int64 int8byte; +#endif // __WXMSW__ + +#ifdef __WXGTK__ +typedef unsigned long long int8byte; +#endif // __WXGTK__ + +#define USE_GENERIC_TREECTRL 0 +#define USE_PENCIL_ON_CANVAS 0 + +#if USE_GENERIC_TREECTRL +#include "wx/generic/treectlg.h" +#ifndef wxTreeCtrl +#define wxTreeCtrl wxGenericTreeCtrl +#define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl +#endif +#endif + +#define OPJ_APPLICATION wxT("OPJViewer") +#define OPJ_APPLICATION_NAME wxT("OpenJPEG Viewer") +#define OPJ_APPLICATION_VERSION wxT("0.4 beta") +#define OPJ_APPLICATION_TITLEBAR OPJ_APPLICATION_NAME wxT(" ") OPJ_APPLICATION_VERSION +#define OPJ_APPLICATION_COPYRIGHT wxT("(C) 2007-2008, Giuseppe Baruffa") +#define OPJ_APPLICATION_VENDOR wxT("OpenJPEG") + +#ifdef __WXMSW__ +#define OPJ_APPLICATION_PLATFORM wxT("Windows") +#endif + +#ifdef __WXGTK__ +#define OPJ_APPLICATION_PLATFORM wxT("Linux") +#endif + +#define OPJ_FRAME_WIDTH 800 +#define OPJ_FRAME_HEIGHT 600 + +#define OPJ_BROWSER_WIDTH 300 +#define OPJ_PEEKER_HEIGHT 130 + +#define OPJ_CANVAS_BORDER 10 +#define OPJ_CANVAS_COLOUR *wxWHITE + + + +#ifdef USE_JPWL + +//#define MYJPWL_MAX_NO_TILESPECS JPWL_MAX_NO_TILESPECS +#define MYJPWL_MAX_NO_TILESPECS 4 + +#endif // USE_JPWL + + +class OPJDecoThread; +class OPJEncoThread; +class OPJParseThread; +WX_DEFINE_ARRAY_PTR(wxThread *, wxArrayThread); +class OPJChildFrame; + +////////////////////////////////// +// this is our main application // +////////////////////////////////// +class OPJViewerApp: public wxApp +{ + // public methods and variables + public: + + // class constructor + OPJViewerApp() { m_showImages = true; m_showButtons = false; } + + // other methods + bool OnInit(void); + int OnExit(void); + void SetShowImages(bool show) { m_showImages = show; } + bool ShowImages() const { return m_showImages; } + void ShowCmdLine(const wxCmdLineParser& parser); + + // all the threads currently alive - as soon as the thread terminates, it's + // removed from the array + wxArrayThread m_deco_threads, m_parse_threads, m_enco_threads; + + // crit section protects access to all of the arrays below + wxCriticalSection m_deco_critsect, m_parse_critsect, m_enco_critsect; + + // semaphore used to wait for the threads to exit, see OPJFrame::OnQuit() + wxSemaphore m_deco_semAllDone, m_parse_semAllDone, m_enco_semAllDone; + + // the last exiting thread should post to m_semAllDone if this is true + // (protected by the same m_critsect) + bool m_deco_waitingUntilAllDone, m_parse_waitingUntilAllDone, m_enco_waitingUntilAllDone; + + // the list of all filenames written in the command line + wxArrayString m_filelist; + + // displaying engine parameters + int m_resizemethod; + + // decoding engine parameters + bool m_enabledeco, m_enableparse; + int m_reducefactor, m_qualitylayers, m_components, m_framenum; +#ifdef USE_JPWL + bool m_enablejpwl, m_enablejpwle; + int m_expcomps, m_maxtiles; + int m_framewidth, m_frameheight; +#endif // USE_JPWL + + // encoding engine parameters + wxString m_subsampling, m_origin, m_rates, m_comment, m_index, m_quality; + wxString m_cbsize, m_prsize, m_tsize, m_torigin, m_poc; + bool m_enablecomm, m_enableidx, m_multicomp, m_irreversible, m_enablesop, m_enableeph; + bool m_enablebypass, m_enablereset, m_enablerestart, m_enablevsc, m_enableerterm; + bool m_enablesegmark, m_enablepoc; + bool m_enablequality; + int m_resolutions, m_progression; +#ifdef USE_JPWL + int m_hprotsel[MYJPWL_MAX_NO_TILESPECS], m_pprotsel[MYJPWL_MAX_NO_TILESPECS]; + int m_htileval[MYJPWL_MAX_NO_TILESPECS], m_ptileval[MYJPWL_MAX_NO_TILESPECS], + m_ppackval[MYJPWL_MAX_NO_TILESPECS]; + int m_sensisel[MYJPWL_MAX_NO_TILESPECS], m_stileval[MYJPWL_MAX_NO_TILESPECS]; +#endif // USE_JPWL + + // some layout settings + bool m_showtoolbar, m_showbrowser, m_showpeeker; + int m_browserwidth, m_peekerheight; + + // application configuration + wxConfig *OPJconfig; + + // private methods and variables + private: + bool m_showImages, m_showButtons; + +}; + +DECLARE_APP(OPJViewerApp) + +/////////////////////////////////////////// +// this canvas is used to draw the image // +/////////////////////////////////////////// +class OPJCanvas: public wxScrolledWindow +{ + // public methods and variables + public: + + // class constructor + OPJCanvas(wxFileName fname, wxWindow *parent, const wxPoint& pos, const wxSize& size); + + virtual void OnDraw(wxDC& dc); + void OnEvent(wxMouseEvent& event); + void WriteText(const wxString& text) { +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif //__WXGTK__ + wxLogMessage(text); +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif //__WXGTK__ + } + + void OnThreadSignal(wxCommandEvent& event); + + OPJDecoThread *CreateDecoThread(void); + OPJEncoThread *CreateEncoThread(void); + + + OPJChildFrame *m_childframe; + + wxBitmap m_image, m_image100; + wxFileName m_fname, m_savename; + long m_zooml; + + DECLARE_EVENT_TABLE() +}; + +/////////////////////////////////////////////////// +// the data associated to each tree leaf or node // +/////////////////////////////////////////////////// +class OPJMarkerData : public wxTreeItemData +{ + // public methods and variables + public: + + // class constructor + OPJMarkerData(const wxString& desc, const wxString& fname = wxT(""), wxFileOffset start = 0, wxFileOffset length = 0) : m_desc(desc), m_filestring(fname) { m_start = start; m_length = length; } + + void ShowInfo(wxTreeCtrl *tree); + const wxChar *GetDesc1() const { return m_desc.c_str(); } + const wxChar *GetDesc2() const { return m_filestring.c_str(); } + wxFileOffset m_start, m_length; + wxString m_desc; + + // private methods and variables + private: + wxString m_filestring; +}; + + +class OPJMarkerTree : public wxTreeCtrl +{ +public: + enum + { + TreeCtrlIcon_File, + TreeCtrlIcon_FileSelected, + TreeCtrlIcon_Folder, + TreeCtrlIcon_FolderSelected, + TreeCtrlIcon_FolderOpened + }; + + OPJMarkerTree() { }; + OPJMarkerTree(wxWindow *parent, OPJChildFrame *subframe, wxFileName fname, wxString name, const wxWindowID id, + const wxPoint& pos, const wxSize& size, + long style); + virtual ~OPJMarkerTree(){}; + OPJParseThread *CreateParseThread(wxTreeItemId parentid = 0x00, OPJChildFrame *subframe = NULL); + void WriteText(const wxString& text) { wxMutexGuiEnter(); wxLogMessage(text); wxMutexGuiLeave(); } + + wxFileName m_fname; + wxTextCtrl *m_peektextCtrl; + OPJChildFrame *m_childframe; + + /*void OnBeginDrag(wxTreeEvent& event); + void OnBeginRDrag(wxTreeEvent& event); + void OnEndDrag(wxTreeEvent& event);*/ + /*void OnBeginLabelEdit(wxTreeEvent& event); + void OnEndLabelEdit(wxTreeEvent& event);*/ + /*void OnDeleteItem(wxTreeEvent& event);*/ + /*void OnContextMenu(wxContextMenuEvent& event);*/ + void OnItemMenu(wxTreeEvent& event); + /*void OnGetInfo(wxTreeEvent& event); + void OnSetInfo(wxTreeEvent& event);*/ + /*void OnItemExpanded(wxTreeEvent& event);*/ + void OnItemExpanding(wxTreeEvent& event); + /*void OnItemCollapsed(wxTreeEvent& event); + void OnItemCollapsing(wxTreeEvent& event);*/ + void OnSelChanged(wxTreeEvent& event); + /*void OnSelChanging(wxTreeEvent& event);*/ + /*void OnTreeKeyDown(wxTreeEvent& event);*/ + /*void OnItemActivated(wxTreeEvent& event);*/ + /*void OnItemRClick(wxTreeEvent& event);*/ + /*void OnRMouseDown(wxMouseEvent& event); + void OnRMouseUp(wxMouseEvent& event); + void OnRMouseDClick(wxMouseEvent& event);*/ + /*void GetItemsRecursively(const wxTreeItemId& idParent, + wxTreeItemIdValue cookie = 0);*/ + + void CreateImageList(int size = 16); + void CreateButtonsImageList(int size = 11); + + /*void AddTestItemsToTree(size_t numChildren, size_t depth);*/ + /*void DoSortChildren(const wxTreeItemId& item, bool reverse = false) + { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }*/ + /*void DoEnsureVisible() { if (m_lastItem.IsOk()) EnsureVisible(m_lastItem); }*/ + /*void DoToggleIcon(const wxTreeItemId& item);*/ + /*void ShowMenu(wxTreeItemId id, const wxPoint& pt);*/ + + int ImageSize(void) const { return m_imageSize; } + + void SetLastItem(wxTreeItemId id) { m_lastItem = id; } + +protected: + /*virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);*/ + + // is this the test item which we use in several event handlers? + /*bool IsTestItem(const wxTreeItemId& item) + { + // the test item is the first child folder + return GetItemParent(item) == GetRootItem() && !GetPrevSibling(item); + }*/ + +private: + /*void AddItemsRecursively(const wxTreeItemId& idParent, + size_t nChildren, + size_t depth, + size_t folder);*/ + + void LogEvent(const wxChar *name, const wxTreeEvent& event); + + int m_imageSize; // current size of images + bool m_reverseSort; // flag for OnCompareItems + wxTreeItemId m_lastItem, // for OnEnsureVisible() + m_draggedItem; // item being dragged right now + + // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS() + // if you want your overloaded OnCompareItems() to be called. + // OTOH, if you don't want it you may omit the next line - this will + // make default (alphabetical) sorting much faster under wxMSW. + DECLARE_DYNAMIC_CLASS(OPJMarkerTree) + DECLARE_EVENT_TABLE() +}; + +// this hash map stores all the trees of currently opened images, with an integer key +WX_DECLARE_HASH_MAP(int, OPJMarkerTree*, wxIntegerHash, wxIntegerEqual, OPJMarkerTreeHash); + +// this hash map stores all the children of currently opened images, with an integer key +WX_DECLARE_HASH_MAP(int, OPJChildFrame*, wxIntegerHash, wxIntegerEqual, OPJChildFrameHash); + +// Define a new frame +class OPJFrame: public wxMDIParentFrame +{ + public: + + OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); + + ~OPJFrame(void); + void OnSize(wxSizeEvent& WXUNUSED(event)); + void OnAbout(wxCommandEvent& WXUNUSED(event)); + void OnFileOpen(wxCommandEvent& WXUNUSED(event)); + void OnFileSaveAs(wxCommandEvent& WXUNUSED(event)); + void OnMemoryOpen(wxCommandEvent& WXUNUSED(event)); + void OnQuit(wxCommandEvent& WXUNUSED(event)); + void OnClose(wxCommandEvent& WXUNUSED(event)); + void OnZoom(wxCommandEvent& WXUNUSED(event)); + void OnFit(wxCommandEvent& event); + void OnToggleBrowser(wxCommandEvent& WXUNUSED(event)); + void OnTogglePeeker(wxCommandEvent& WXUNUSED(event)); + void OnToggleToolbar(wxCommandEvent& WXUNUSED(event)); + void OnReload(wxCommandEvent& event); + void OnPrevFrame(wxCommandEvent& event); + void OnHomeFrame(wxCommandEvent& event); + void OnNextFrame(wxCommandEvent& event); + void OnLessLayers(wxCommandEvent& event); + void OnAllLayers(wxCommandEvent& event); + void OnMoreLayers(wxCommandEvent& event); + void OnLessRes(wxCommandEvent& event); + void OnFullRes(wxCommandEvent& event); + void OnMoreRes(wxCommandEvent& event); + void OnPrevComp(wxCommandEvent& event); + void OnAllComps(wxCommandEvent& event); + void OnNextComp(wxCommandEvent& event); + void OnSetsEnco(wxCommandEvent& event); + void OnSetsDeco(wxCommandEvent& event); + void OnSashDrag(wxSashEvent& event); + void OpenFiles(wxArrayString paths, wxArrayString filenames); + void SaveFile(wxArrayString paths, wxArrayString filenames); + void OnNotebook(wxNotebookEvent& event); + void Rescale(int scale, OPJChildFrame *child); + void OnThreadLogmsg(wxCommandEvent& event); + + OPJMarkerTreeHash m_treehash; + OPJChildFrameHash m_childhash; + wxSashLayoutWindow* markerTreeWindow; + wxSashLayoutWindow* loggingWindow; + wxToolBar* tool_bar; + void Resize(int number); + wxNotebook *m_bookCtrl; + wxNotebook *m_bookCtrlbottom; + wxTextCtrl *m_textCtrlbrowse; + + private: + void TogStyle(int id, long flag); + + void DoSort(bool reverse = false); + + wxPanel *m_panel; + wxTextCtrl *m_textCtrl; + + void DoSetBold(bool bold = true); + +protected: + wxSashLayoutWindow* m_topWindow; + wxSashLayoutWindow* m_leftWindow2; + +DECLARE_EVENT_TABLE() +}; + +class OPJChildFrame: public wxMDIChildFrame +{ + public: + OPJCanvas *m_canvas; + OPJChildFrame(OPJFrame *parent, wxFileName fname, int winnumber, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); + ~OPJChildFrame(void); + void OnActivate(wxActivateEvent& event); + /*void OnQuit(wxCommandEvent& WXUNUSED(event));*/ + void OnClose(wxCloseEvent& event); + void OnGotFocus(wxFocusEvent& event); + void OnLostFocus(wxFocusEvent& event); + OPJFrame *m_frame; + wxFileName m_fname; + int m_winnumber; + + unsigned long m_twidth, m_theight, m_tx, m_ty; + + DECLARE_EVENT_TABLE() +}; + +// frame and main menu ids +enum { + OPJFRAME_FILEEXIT = wxID_EXIT, + OPJFRAME_HELPABOUT = wxID_ABOUT, + OPJFRAME_FILEOPEN, + OPJFRAME_MEMORYOPEN, + OPJFRAME_FILESAVEAS, + OPJFRAME_FILETOGGLEB, + OPJFRAME_FILETOGGLEP, + OPJFRAME_FILETOGGLET, + OPJFRAME_VIEWZOOM, + OPJFRAME_VIEWFIT, + OPJFRAME_VIEWRELOAD, + OPJFRAME_VIEWPREVFRAME, + OPJFRAME_VIEWHOMEFRAME, + OPJFRAME_VIEWNEXTFRAME, + OPJFRAME_VIEWLESSLAYERS, + OPJFRAME_VIEWALLLAYERS, + OPJFRAME_VIEWMORELAYERS, + OPJFRAME_VIEWLESSRES, + OPJFRAME_VIEWFULLRES, + OPJFRAME_VIEWMORERES, + OPJFRAME_VIEWPREVCOMP, + OPJFRAME_VIEWALLCOMPS, + OPJFRAME_VIEWNEXTCOMP, + OPJFRAME_FILECLOSE, + OPJFRAME_SETSENCO, + OPJFRAME_SETSDECO, + + OPJFRAME_BROWSEWIN = 10000, + OPJFRAME_LOGWIN, + OPJFRAME_TOOLBAR, + + OPJFRAME_THREADLOGMSG, + OPJCANVAS_THREADSIGNAL +}; + + +// menu and control ids +enum +{ + TreeTest_Quit = wxID_EXIT, + TreeTest_About = wxID_ABOUT, + TreeTest_TogButtons = wxID_HIGHEST, + TreeTest_TogTwist, + TreeTest_TogLines, + TreeTest_TogEdit, + TreeTest_TogHideRoot, + TreeTest_TogRootLines, + TreeTest_TogBorder, + TreeTest_TogFullHighlight, + TreeTest_SetFgColour, + TreeTest_SetBgColour, + TreeTest_ResetStyle, + TreeTest_Highlight, + TreeTest_Dump, + TreeTest_DumpSelected, + TreeTest_Count, + TreeTest_CountRec, + TreeTest_Sort, + TreeTest_SortRev, + TreeTest_SetBold, + TreeTest_ClearBold, + TreeTest_Rename, + TreeTest_Delete, + TreeTest_DeleteChildren, + TreeTest_DeleteAll, + TreeTest_Recreate, + TreeTest_ToggleImages, + TreeTest_ToggleButtons, + TreeTest_SetImageSize, + TreeTest_ToggleSel, + TreeTest_CollapseAndReset, + TreeTest_EnsureVisible, + TreeTest_AddItem, + TreeTest_InsertItem, + TreeTest_IncIndent, + TreeTest_DecIndent, + TreeTest_IncSpacing, + TreeTest_DecSpacing, + TreeTest_ToggleIcon, + TreeTest_Select, + TreeTest_Unselect, + TreeTest_SelectRoot, + TreeTest_Ctrl = 1000, + BOTTOM_NOTEBOOK_ID, + LEFT_NOTEBOOK_ID +}; + +class OPJEncoThread : public wxThread +{ +public: + OPJEncoThread(OPJCanvas *canvas); + + // thread execution starts here + virtual void *Entry(); + + // called when the thread exits - whether it terminates normally or is + // stopped with Delete() (but not when it is Kill()ed!) + virtual void OnExit(); + + // write something to the text control + void WriteText(const wxString& text); + +public: + unsigned m_count; + OPJCanvas *m_canvas; +}; + +class OPJDecoThread : public wxThread +{ +public: + OPJDecoThread(OPJCanvas *canvas); + + // thread execution starts here + virtual void *Entry(); + + // called when the thread exits - whether it terminates normally or is + // stopped with Delete() (but not when it is Kill()ed!) + virtual void OnExit(); + + // write something to the text control + void WriteText(const wxString& text); + +public: + unsigned m_count; + OPJCanvas *m_canvas; +}; + +class OPJParseThread : public wxThread +{ +public: + OPJParseThread(OPJMarkerTree *tree, wxTreeItemId parentid = 0x00); + + // thread execution starts here + virtual void *Entry(); + + // called when the thread exits - whether it terminates normally or is + // stopped with Delete() (but not when it is Kill()ed!) + virtual void OnExit(); + + // write something to the text control + void WriteText(const wxString& text); + void LoadFile(wxFileName fname); + void ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOffset length, wxTreeItemId parentid); + void ParseJP2File(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, wxTreeItemId parentid); + + unsigned m_count; + OPJMarkerTree *m_tree; + wxTreeItemId m_parentid; + +private: + int jpeg2000parse(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, + wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint); + int box_handler_function(int boxtype, wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, + wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint); + +}; + + +// Drag and drop files target +class OPJDnDFile: public wxFileDropTarget +{ +public: + OPJDnDFile(OPJFrame *pOwner) { m_pOwner = pOwner; } + virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames); + +private: + OPJFrame *m_pOwner; +}; + + + +// Property sheet dialog: encoder +class OPJEncoderDialog: public wxPropertySheetDialog +{ +DECLARE_CLASS(OPJEncoderDialog) +public: + OPJEncoderDialog(wxWindow* parent, int dialogType); + ~OPJEncoderDialog(); + + wxBookCtrlBase* m_settingsNotebook; + + wxPanel* CreateMainSettingsPage(wxWindow* parent); + wxPanel* CreatePart1_1SettingsPage(wxWindow* parent); + wxPanel* CreatePart1_2SettingsPage(wxWindow* parent); +/* wxPanel* CreatePart3SettingsPage(wxWindow* parent);*/ + void OnEnableComm(wxCommandEvent& event); + void OnEnableIdx(wxCommandEvent& event); + void OnEnablePoc(wxCommandEvent& event); + void OnRadioQualityRate(wxCommandEvent& event); +#ifdef USE_JPWL + void OnEnableJPWL(wxCommandEvent& event); + wxPanel* CreatePart11SettingsPage(wxWindow* parent); + /*wxCheckBox *m_enablejpwlCheck;*/ + wxChoice *m_hprotChoice[MYJPWL_MAX_NO_TILESPECS]; + wxSpinCtrl *m_htileCtrl[MYJPWL_MAX_NO_TILESPECS]; + wxChoice *m_pprotChoice[MYJPWL_MAX_NO_TILESPECS]; + wxSpinCtrl *m_ptileCtrl[MYJPWL_MAX_NO_TILESPECS]; + wxSpinCtrl *m_ppackCtrl[MYJPWL_MAX_NO_TILESPECS]; + wxChoice *m_sensiChoice[MYJPWL_MAX_NO_TILESPECS]; + wxSpinCtrl *m_stileCtrl[MYJPWL_MAX_NO_TILESPECS]; + void OnHprotSelect(wxCommandEvent& event); + void OnPprotSelect(wxCommandEvent& event); + void OnSensiSelect(wxCommandEvent& event); +#endif // USE_JPWL + + wxTextCtrl *m_subsamplingCtrl, *m_originCtrl, *m_rateCtrl, *m_commentCtrl; + wxRadioButton *m_rateRadio, *m_qualityRadio; + wxTextCtrl *m_indexCtrl, *m_qualityCtrl, *m_cbsizeCtrl, *m_prsizeCtrl, *m_pocCtrl; + wxTextCtrl *m_tsizeCtrl, *m_toriginCtrl; + wxRadioBox *progressionBox; + wxCheckBox *m_enablecommCheck, *m_enableidxCheck, *m_mctCheck, *m_irrevCheck; + wxCheckBox *m_sopCheck, *m_ephCheck, *m_enablebypassCheck, *m_enableresetCheck, + *m_enablerestartCheck, *m_enablevscCheck, *m_enableertermCheck, *m_enablesegmarkCheck; + wxCheckBox *m_enablepocCheck, *m_enablejpwlCheck; + wxSpinCtrl *m_resolutionsCtrl; + +protected: + + enum { + OPJENCO_ENABLEJPWL = 100, + OPJENCO_RATEFACTOR, + OPJENCO_RATERADIO, + OPJENCO_QUALITYFACTOR, + OPJENCO_QUALITYRADIO, + OPJENCO_RESNUMBER, + OPJENCO_CODEBLOCKSIZE, + OPJENCO_PRECINCTSIZE, + OPJENCO_TILESIZE, + OPJENCO_PROGRESSION, + OPJENCO_SUBSAMPLING, + OPJENCO_ENABLESOP, + OPJENCO_ENABLEEPH, + OPJENCO_ENABLEBYPASS, + OPJENCO_ENABLERESET, + OPJENCO_ENABLERESTART, + OPJENCO_ENABLEVSC, + OPJENCO_ENABLEERTERM, + OPJENCO_ENABLESEGMARK, + OPJENCO_ENABLEPOC, + OPJENCO_ROICOMP, + OPJENCO_ROISHIFT, + OPJENCO_IMORIG, + OPJENCO_TILORIG, + OPJENCO_ENABLEMCT, + OPJENCO_ENABLEIRREV, + OPJENCO_ENABLEINDEX, + OPJENCO_INDEXNAME, + OPJENCO_POCSPEC, + OPJENCO_ENABLECOMM, + OPJENCO_COMMENTTEXT, + OPJENCO_HPROT, + OPJENCO_HTILE, + OPJENCO_PPROT, + OPJENCO_PTILE, + OPJENCO_PPACK, + OPJENCO_SENSI, + OPJENCO_STILE + }; + +DECLARE_EVENT_TABLE() +}; + +// Property sheet dialog: decoder +class OPJDecoderDialog: public wxPropertySheetDialog +{ +DECLARE_CLASS(OPJDecoderDialog) +public: + OPJDecoderDialog(wxWindow* parent, int dialogType); + ~OPJDecoderDialog(); + + wxBookCtrlBase* m_settingsNotebook; + wxCheckBox *m_enabledecoCheck, *m_enableparseCheck; + wxSpinCtrl *m_reduceCtrl, *m_layerCtrl, *m_numcompsCtrl; + wxRadioBox* m_resizeBox; + + void OnEnableDeco(wxCommandEvent& event); + + wxPanel* CreateMainSettingsPage(wxWindow* parent); + wxPanel* CreatePart1SettingsPage(wxWindow* parent); + wxPanel* CreatePart3SettingsPage(wxWindow* parent); +#ifdef USE_JPWL + void OnEnableJPWL(wxCommandEvent& event); + wxPanel* CreatePart11SettingsPage(wxWindow* parent); + wxSpinCtrl *m_expcompsCtrl, *m_framenumCtrl, *m_maxtilesCtrl; + wxCheckBox *m_enablejpwlCheck; +#endif // USE_JPWL + + +protected: + + enum { + OPJDECO_RESMETHOD = 100, + OPJDECO_REDUCEFACTOR, + OPJDECO_QUALITYLAYERS, + OPJDECO_NUMCOMPS, + OPJDECO_ENABLEDECO, + OPJDECO_ENABLEPARSE, + OPJDECO_ENABLEJPWL, + OPJDECO_EXPCOMPS, + OPJDECO_MAXTILES, + OPJDECO_FRAMENUM + }; + +DECLARE_EVENT_TABLE() +}; + +#endif //__OPJ_VIEWER_H__ + + + diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.ico b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.ico new file mode 100644 index 0000000000000000000000000000000000000000..931d5e021191a3fd17610e14bec8405796abfb57 GIT binary patch literal 1078 zcmcIjy-ou$40Z|<%7QLq7U)F#6orkAmtg1vbVa(`x*)iSDNFk*hlJE3Rn03@q5~t{ zm?+=pP^p#5KqY+V*p5FtKXycnw4~iGg!JALxqvK+Yw>5)hmb8YYy*vK(PkqX%T zRKW>PRb_z@sx(alNyl1$S+A*q@o|d7zmu=U*EU8M#q*5LLB>K%_1=8kaY-~##k#u4j_eDE{ZNy=jKO#9-!Bqkov9D}%;ll|%u$NXd zn^x1+aQXT%Tu!C)GHW{Xn^s@JX*=YrT-=qHlU_M~9F^nos7&MeIrtjfPia0#>0yxG z&Ti9Z?_?*ES=i?|vG)3=&zoP5Q=!M02=(wj=Y5m(ULmysA%o?XP!0gRR+4pB yH0$f&BZBQpNj8{d>4fFdV66}}rTpIT<|bP_g#IM*jAwWc9+kU1gT25!W4{3rvE}0c literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.rc b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.rc new file mode 100644 index 0000000000..fb5a5def07 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer.rc @@ -0,0 +1,3 @@ +OPJChild16 ICON OPJChild.ico +OPJViewer16 ICON OPJViewer.ico +#include "wx/msw/wx.rc" \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer16.xpm b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer16.xpm new file mode 100644 index 0000000000..27e522b1cc --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/OPJViewer16.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char *OPJViewer16[] = { +/* columns rows colors chars-per-pixel */ +"16 16 4 1", +" c black", +". c #800000", +"X c red", +"o c None", +/* pixels */ +"oooooooooooooooo", +"ooo.XXXXoooooooo", +"ooXXoo .Xooooooo", +"o..oooo .ooooooo", +"oX.oooo ooooooo", +"oX.oooo .ooooooo", +"oXXoooo .ooooooo", +"o.XXoo .oooooooo", +"oo.XXXXooooooooo", +"ooooooooo.Xo .oo", +"ooooooooo X. ooo", +"oooooooooo...ooo", +"oooooooooo XXooo", +"oooooooooo .Xooo", +"oooooooooooooooo", +"oooooooooooooooo" +}; diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/about_htm.h b/contrib/menuetlibc/openjpeg/OPJViewer/source/about_htm.h new file mode 100644 index 0000000000..c39fdc598e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/about_htm.h @@ -0,0 +1,54 @@ +wxString htmlaboutpage = wxT( +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"
" +"

" +"
" +"" +OPJ_APPLICATION " " OPJ_APPLICATION_VERSION +"
" +"A JPEG 2000 image viewer
" +"" OPJ_APPLICATION_PLATFORM " version" +"
" +"
OpenJPEG
" +"

The OpenJPEG library is an open-source JPEG 2000 codec written in C language. " +"In addition to the basic codec, various other features are under development.


" +"* Build: ") +#include "build.h" +wxT(", " __DATE__ ", " __TIME__ "
") +wxT("* " wxVERSION_STRING "
") +wxT("* OpenJPEG " OPENJPEG_VERSION " (") +#ifdef USE_JPWL +wxT("JPWL ") +#endif // USE_JPWL +#ifdef USE_JPSEC +wxT("JPSEC ") +#endif // USE_JPSEC +wxT(")
") +#ifdef USE_MXF +wxT("* MXFLib " MXFLIB_VERSION_MAJOR "." MXFLIB_VERSION_MINOR "." MXFLIB_VERSION_TWEAK " (" MXFLIB_VERSION_BUILD ")
") +#endif // USE_MXF +wxT("
" +"OpenJPEG is © 2002-2008 TELE - Universite' Catholique de Louvain
" +"OPJViewer is © 2007-2008 DSPLab - Universita' degli studi di Perugia" +"
" +"" +"" +); diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/build.h b/contrib/menuetlibc/openjpeg/OPJViewer/source/build.h new file mode 100644 index 0000000000..9858dffe57 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/build.h @@ -0,0 +1 @@ +wxT("491") diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/icon1.xpm b/contrib/menuetlibc/openjpeg/OPJViewer/source/icon1.xpm new file mode 100644 index 0000000000..fbc605b5fd --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/icon1.xpm @@ -0,0 +1,79 @@ +/* XPM */ +static char *icon1_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 41 1", +"> c #97C4E7", +"# c #4381AA", +"d c #FFFFFF", +"< c #71B2DE", +"+ c #538BB1", +"& c #D1E5F5", +"q c #63B3DE", +"6 c #F1F4F7", +"* c #CAE1F3", +"y c #7AC4E5", +"= c #C3DDF1", +"X c #74A1BD", +"- c #BCD9EF", +"5 c #619BC4", +"3 c #E6EAF1", +"2 c #4B8EBF", +"o c #6B97B6", +". c #4B82A8", +" c None", +"w c #54A6D8", +"1 c #71A8D1", +", c #85BBE2", +"t c #EFF6FC", +"7 c #DEEDF8", +"@ c #4388B4", +"a c #F7FBFD", +"$ c #D7E0E9", +"r c #FAFCFE", +"4 c #DAEAF7", +"e c #E9F3FA", +"0 c #76BAE2", +"% c #7FA6C0", +"s c #FDFDFE", +"O c #5896BE", +"p c #B6D5EE", +"8 c #87ABC3", +": c #A5CCEA", +"9 c #E5F0F9", +"; c #AFD1EC", +"i c #F4F9FD", +"u c #8FB0C3", +/* pixels */ +" ", +" ", +" ", +" ", +" ", +" .XXXooOO++@#$ ", +" %&*=-;:>>,<123 ", +" %4&*=-;:>>,1>56 ", +" %74&*=-;:>>1*>56 ", +" 89700qqqqwq1e*>X ", +" 8e974&*=-;:1re*>8 ", +" 8te974&*=-;11111# ", +" 8tty000qqqqqww>,+ ", +" uitte974&*=-p:>>+ ", +" uaitte974&*=-p:>O ", +" uaayyyy000qqqqp:O ", +" uraaitte974&*=-po ", +" urraaitte974&*=-o ", +" usryyyyyyy000q*=X ", +" ussrraaitte974&*X ", +" udssrraaitte974&X ", +" uddyyyyyyyyyy074% ", +" udddssrraaitte97% ", +" uddddssrraaitte9% ", +" udddddssrraaitte8 ", +" uddddddssrraaitt8 ", +" uuuuuuuuuuuuuu88u ", +" ", +" ", +" ", +" ", +" " +}; diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/icon2.xpm b/contrib/menuetlibc/openjpeg/OPJViewer/source/icon2.xpm new file mode 100644 index 0000000000..7ae8c92cd7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/icon2.xpm @@ -0,0 +1,53 @@ +/* XPM */ +static char *icon2_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 15 1", +". c Black", +"O c #97C4E7", +"$ c #63B3DE", +"@ c #CAE1F3", +"; c #7AC4E5", +"* c #74A1BD", +"+ c #619BC4", +"o c #4B8EBF", +" c None", +"% c #54A6D8", +"= c #FAFCFE", +"& c #E9F3FA", +"# c #76BAE2", +"X c #C00000", +"- c #87ABC3", +/* pixels */ +" ", +" ", +" ", +" ", +" ", +" ............. ", +" .XXXXXXXXXX.o. ", +" .XXXXXXXXXX.O+. ", +" .XXXXXXXXXX.@O+. ", +" .XX##$$$$%$.&@O* ", +" .XXXXXXXXXX.=&@O- ", +" .XXXXXXXXXX...... ", +" .XX;###$$$$$%%XX. ", +" .XXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXX. ", +" .XX;;;;###$$$$XX. ", +" .XXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXX. ", +" .XX;;;;;;;###$XX. ", +" .XXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXX. ", +" .XX;;;;;;;;;;#XX. ", +" .XXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXX. ", +" ................. ", +" ", +" ", +" ", +" ", +" " +}; diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/icon3.xpm b/contrib/menuetlibc/openjpeg/OPJViewer/source/icon3.xpm new file mode 100644 index 0000000000..722de6b1c1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/icon3.xpm @@ -0,0 +1,79 @@ +/* XPM */ +static char *icon3_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 41 1", +"6 c #EDF2FB", +"- c #AAC1E8", +": c #B9CDED", +"X c #295193", +", c #C6D6F0", +"a c #4A7CCE", +"u c #779DDB", +"y c #7FA2DD", +"$ c #3263B4", +"5 c #EAF0FA", +". c #2D59A3", +"o c #6E96D8", +"* c #356AC1", +"r c #F7F9FD", +"> c #BED0EE", +"3 c #E1E9F7", +"7 c #F0F5FC", +"< c #CBD9F1", +"2 c #DAE5F6", +"# c #3161B1", +" c None", +"0 c #FDFEFF", +"= c #9FB9E5", +"e c #AEC5EA", +"t c #89A9DF", +"q c #98B5E4", +"p c #5584D1", +"d c #3A70CA", +"@ c #305FAC", +"i c #5D89D3", +"1 c #D2DFF4", +"% c #3366B9", +"9 c #FAFCFE", +"8 c #F5F8FD", +"s c #4075CC", +"O c #638ED5", +"w c #90AFE2", +"& c #3467BC", +"+ c #2F5DA9", +"; c #B3C8EB", +"4 c #E5EDF9", +/* pixels */ +" ", +" ", +" ", +" ", +" ", +" ", +" ......X ", +" .oooooO+ ", +" .ooooooo. ", +" .+@@@##$%%&&&&&****. ", +" .=-;:>,<12345678900. ", +" .q=-;:>,<1234567890. ", +" .wq=-e:>,<12345678r. ", +" .twq=-e:>,<12345678. ", +" .ytwq=-e:>,<1234567. ", +" .uytwq=-e:>,<123456. ", +" .ouytwq=-e:>,<12345. ", +" .Oouytwq=-e;>,<1234. ", +" .iOouytwq=-e;>,<123. ", +" .piOouytwq=-e;>,<12. ", +" .apiOouytwq=-e;>,<1. ", +" .sapiOouytwq=-e;>,<. ", +" .dsapiOouytwq=-e;>,. ", +" ...................# ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" " +}; diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/icon4.xpm b/contrib/menuetlibc/openjpeg/OPJViewer/source/icon4.xpm new file mode 100644 index 0000000000..a18e1a70ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/icon4.xpm @@ -0,0 +1,43 @@ +/* XPM */ +static char *icon4_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 5 1", +". c Black", +"o c #8399B4", +"X c #8DA0B9", +" c None", +"O c #800000", +/* pixels */ +" ", +" ", +" ", +" ", +" ", +" ", +" ....... ", +" .XXXXXo. ", +" .XXXXXXX. ", +" .................... ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .OOOOOOOOOOOOOOOOOO. ", +" .................... ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" " +}; diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/icon5.xpm b/contrib/menuetlibc/openjpeg/OPJViewer/source/icon5.xpm new file mode 100644 index 0000000000..9f63c31098 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/icon5.xpm @@ -0,0 +1,79 @@ +/* XPM */ +static char *icon5_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 41 1", +"0 c #AAC1E8", +"q c #B9CDED", +"X c #295193", +"e c #C6D6F0", +"a c #4A7CCE", +"& c #779DDB", +"* c #7FA2DD", +"2 c #EAF0FA", +"@ c #2D59A3", +"o c #6E96D8", +"y c #356AC1", +"d c #214279", +"w c #BED0EE", +"= c #85A7DF", +"< c #E1E9F7", +"3 c #F0F5FC", +"s c #CBD9F1", +", c #DAE5F6", +"7 c #3161B1", +" c None", +". c #274D8B", +"6 c #FDFEFF", +"i c #E7EEF9", +"9 c #9FB9E5", +"- c #89A9DF", +"8 c #98B5E4", +"$ c #5584D1", +"+ c #3569BF", +"% c #305FAC", +"O c #5D89D3", +"> c #D2DFF4", +"p c #3366B9", +"5 c #FAFCFE", +"4 c #F5F8FD", +"t c #4075CC", +"u c #638ED5", +"r c #CEDCF2", +"; c #90AFE2", +"# c #2F5DA9", +": c #B3C8EB", +"1 c #E5EDF9", +/* pixels */ +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ......X ", +" XoooooO. ", +" Xoooooo+. ", +" Xooooooo@XXXXXXXXXX# ", +" Xoooooooooooooooooo# ", +" Xoooooooooooooooooo# ", +" Xoo$################### ", +" Xoo%O&*=-;:>,<123445667 ", +" XooX890:qwer>,<123445q# ", +" Xoty;890:qwer>,<12344# ", +" Xo%u-;890:qwer>,,,,<# ", +" XX$Ouo&*-;890:qwer>s# ", +" d%a$Ouo&*-;890:qwer# ", +" d+ta$Ouo&*-;890:qwe# ", +" d..................# ", +" ", +" ", +" ", +" ", +" ", +" ", +" " +}; diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/imagjpeg2000.cpp b/contrib/menuetlibc/openjpeg/OPJViewer/source/imagjpeg2000.cpp new file mode 100644 index 0000000000..66e1146bb8 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/imagjpeg2000.cpp @@ -0,0 +1,1464 @@ +/* + * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +///////////////////////////////////////////////////////////////////////////// +// Name: imagjpeg2000.cpp +// Purpose: wxImage JPEG 2000 family file format handler +// Author: Giuseppe Baruffa - based on imagjpeg.cpp, Vaclav Slavik +// RCS-ID: $Id: imagjpeg2000.cpp,v 0.00 2008/01/31 10:58:00 MW Exp $ +// Copyright: (c) Giuseppe Baruffa +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_IMAGE && wxUSE_LIBOPENJPEG + +#include "imagjpeg2000.h" + +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/app.h" + #include "wx/intl.h" + #include "wx/bitmap.h" + #include "wx/module.h" +#endif + +#include "libopenjpeg/openjpeg.h" + +#include "wx/filefn.h" +#include "wx/wfstream.h" + +// ---------------------------------------------------------------------------- +// types +// ---------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +// wxJPEG2000Handler +//----------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxJPEG2000Handler,wxImageHandler) + +#if wxUSE_STREAMS + +//------------- JPEG 2000 Data Source Manager + +#define J2K_CFMT 0 +#define JP2_CFMT 1 +#define JPT_CFMT 2 +#define MJ2_CFMT 3 +#define PXM_DFMT 0 +#define PGX_DFMT 1 +#define BMP_DFMT 2 +#define YUV_DFMT 3 + +#define MAX_MESSAGE_LEN 200 + +/* check file type */ +int +jpeg2000familytype(unsigned char *hdr, int hdr_len) +{ + // check length + if (hdr_len < 24) + return -1; + + // check format + if (hdr[0] == 0x00 && + hdr[1] == 0x00 && + hdr[2] == 0x00 && + hdr[3] == 0x0C && + hdr[4] == 0x6A && + hdr[5] == 0x50 && + hdr[6] == 0x20 && + hdr[7] == 0x20 && + hdr[20] == 0x6A && + hdr[21] == 0x70 && + hdr[22] == 0x32) + // JP2 file format + return JP2_CFMT; + else if (hdr[0] == 0x00 && + hdr[1] == 0x00 && + hdr[2] == 0x00 && + hdr[3] == 0x0C && + hdr[4] == 0x6A && + hdr[5] == 0x50 && + hdr[6] == 0x20 && + hdr[7] == 0x20 && + hdr[20] == 0x6D && + hdr[21] == 0x6A && + hdr[22] == 0x70 && + hdr[23] == 0x32) + // MJ2 file format + return MJ2_CFMT; + else if (hdr[0] == 0xFF && + hdr[1] == 0x4F) + // J2K file format + return J2K_CFMT; + else + // unknown format + return -1; + +} + +/* we have to use this to avoid GUI-noGUI threads crashing */ +void printevent(const char *msg) +{ +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif /* __WXGTK__ */ + wxLogMessage(wxT("%s"), msg); +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif /* __WXGTK__ */ +} + +/* sample error callback expecting a FILE* client object */ +void jpeg2000_error_callback(const char *msg, void *client_data) { + char mess[MAX_MESSAGE_LEN + 20]; + int message_len = strlen(msg); + + if (message_len > MAX_MESSAGE_LEN) + message_len = MAX_MESSAGE_LEN; + + if (msg[message_len - 1] == '\n') + message_len--; + + sprintf(mess, "[ERROR] %.*s", message_len, msg); + printevent(mess); +} + +/* sample warning callback expecting a FILE* client object */ +void jpeg2000_warning_callback(const char *msg, void *client_data) { + char mess[MAX_MESSAGE_LEN + 20]; + int message_len = strlen(msg); + + if (message_len > MAX_MESSAGE_LEN) + message_len = MAX_MESSAGE_LEN; + + if (msg[message_len - 1] == '\n') + message_len--; + + sprintf(mess, "[WARNING] %.*s", message_len, msg); + printevent(mess); +} + +/* sample debug callback expecting no client object */ +void jpeg2000_info_callback(const char *msg, void *client_data) { + char mess[MAX_MESSAGE_LEN + 20]; + int message_len = strlen(msg); + + if (message_len > MAX_MESSAGE_LEN) + message_len = MAX_MESSAGE_LEN; + + if (msg[message_len - 1] == '\n') + message_len--; + + sprintf(mess, "[INFO] %.*s", message_len, msg); + printevent(mess); +} + +/* macro functions */ +/* From little endian to big endian, 2 and 4 bytes */ +#define BYTE_SWAP2(X) ((X & 0x00FF) << 8) | ((X & 0xFF00) >> 8) +#define BYTE_SWAP4(X) ((X & 0x000000FF) << 24) | ((X & 0x0000FF00) << 8) | ((X & 0x00FF0000) >> 8) | ((X & 0xFF000000) >> 24) + +#ifdef __WXGTK__ +#define BYTE_SWAP8(X) ((X & 0x00000000000000FFULL) << 56) | ((X & 0x000000000000FF00ULL) << 40) | \ + ((X & 0x0000000000FF0000ULL) << 24) | ((X & 0x00000000FF000000ULL) << 8) | \ + ((X & 0x000000FF00000000ULL) >> 8) | ((X & 0x0000FF0000000000ULL) >> 24) | \ + ((X & 0x00FF000000000000ULL) >> 40) | ((X & 0xFF00000000000000ULL) >> 56) +#else +#define BYTE_SWAP8(X) ((X & 0x00000000000000FF) << 56) | ((X & 0x000000000000FF00) << 40) | \ + ((X & 0x0000000000FF0000) << 24) | ((X & 0x00000000FF000000) << 8) | \ + ((X & 0x000000FF00000000) >> 8) | ((X & 0x0000FF0000000000) >> 24) | \ + ((X & 0x00FF000000000000) >> 40) | ((X & 0xFF00000000000000) >> 56) +#endif + +/* From codestream to int values */ +#define STREAM_TO_UINT32(C, P) (((unsigned long int) (C)[(P) + 0] << 24) + \ + ((unsigned long int) (C)[(P) + 1] << 16) + \ + ((unsigned long int) (C)[(P) + 2] << 8) + \ + ((unsigned long int) (C)[(P) + 3] << 0)) + +#define STREAM_TO_UINT16(C, P) (((unsigned long int) (C)[(P) + 0] << 8) + \ + ((unsigned long int) (C)[(P) + 1] << 0)) + +/* defines */ +#define SHORT_DESCR_LEN 32 +#define LONG_DESCR_LEN 256 + +/* enumeration for file formats */ +#define JPEG2000FILENUM 4 +typedef enum { + + JP2_FILE, + J2K_FILE, + MJ2_FILE, + UNK_FILE + +} jpeg2000filetype; + +/* enumeration for the box types */ +#define JPEG2000BOXNUM 23 +typedef enum { + + FILE_BOX, + JP_BOX, + FTYP_BOX, + JP2H_BOX, + IHDR_BOX, + COLR_BOX, + JP2C_BOX, + JP2I_BOX, + XML_BOX, + UUID_BOX, + UINF_BOX, + MOOV_BOX, + MVHD_BOX, + TRAK_BOX, + TKHD_BOX, + MDIA_BOX, + MINF_BOX, + STBL_BOX, + STSD_BOX, + MJP2_BOX, + MDAT_BOX, + ANY_BOX, + UNK_BOX + +} jpeg2000boxtype; + +/* jpeg2000 family box signatures */ +#define FILE_SIGN "" +#define JP_SIGN "jP\040\040" +#define FTYP_SIGN "ftyp" +#define JP2H_SIGN "jp2h" +#define IHDR_SIGN "ihdr" +#define COLR_SIGN "colr" +#define JP2C_SIGN "jp2c" +#define JP2I_SIGN "jp2i" +#define XML_SIGN "xml\040" +#define UUID_SIGN "uuid" +#define UINF_SIGN "uinf" +#define MOOV_SIGN "moov" +#define MVHD_SIGN "mvhd" +#define TRAK_SIGN "trak" +#define TKHD_SIGN "tkhd" +#define MDIA_SIGN "mdia" +#define MINF_SIGN "minf" +#define VMHD_SIGN "vmhd" +#define STBL_SIGN "stbl" +#define STSD_SIGN "stsd" +#define MJP2_SIGN "mjp2" +#define MDAT_SIGN "mdat" +#define ANY_SIGN "" +#define UNK_SIGN "" + +/* the box structure itself */ +struct jpeg2000boxdef { + + char value[5]; /* hexadecimal value/string*/ + char name[SHORT_DESCR_LEN]; /* short description */ + char descr[LONG_DESCR_LEN]; /* long description */ + int sbox; /* is it a superbox? */ + int req[JPEG2000FILENUM]; /* mandatory box */ + jpeg2000boxtype ins; /* contained in box... */ + +}; + +/* the possible boxes */ +struct jpeg2000boxdef jpeg2000box[] = +{ +/* sign */ {FILE_SIGN, +/* short */ "placeholder for nothing", +/* long */ "Nothing to say", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {JP_SIGN, +/* short */ "JPEG 2000 Signature box", +/* long */ "This box uniquely identifies the file as being part of the JPEG 2000 family of files", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {FTYP_SIGN, +/* short */ "File Type box", +/* long */ "This box specifies file type, version and compatibility information, including specifying if this file " + "is a conforming JP2 file or if it can be read by a conforming JP2 reader", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {JP2H_SIGN, +/* short */ "JP2 Header box", +/* long */ "This box contains a series of boxes that contain header-type information about the file", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {IHDR_SIGN, +/* short */ "Image Header box", +/* long */ "This box specifies the size of the image and other related fields", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ JP2H_BOX}, + +/* sign */ {COLR_SIGN, +/* short */ "Colour Specification box", +/* long */ "This box specifies the colourspace of the image", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ JP2H_BOX}, + +/* sign */ {JP2C_SIGN, +/* short */ "Contiguous Codestream box", +/* long */ "This box contains the codestream as defined by Annex A", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {JP2I_SIGN, +/* short */ "Intellectual Property box", +/* long */ "This box contains intellectual property information about the image", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ FILE_BOX}, + +/* sign */ {XML_SIGN, +/* short */ "XML box", +/* long */ "This box provides a tool by which vendors can add XML formatted information to a JP2 file", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ FILE_BOX}, + +/* sign */ {UUID_SIGN, +/* short */ "UUID box", +/* long */ "This box provides a tool by which vendors can add additional information to a file " + "without risking conflict with other vendors", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ FILE_BOX}, + +/* sign */ {UINF_SIGN, +/* short */ "UUID Info box", +/* long */ "This box provides a tool by which a vendor may provide access to additional information associated with a UUID", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ FILE_BOX}, + +/* sign */ {MOOV_SIGN, +/* short */ "Movie box", +/* long */ "This box contains the media data. In video tracks, this box would contain JPEG2000 video frames", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {MVHD_SIGN, +/* short */ "Movie Header box", +/* long */ "This box defines overall information which is media-independent, and relevant to the entire presentation " + "considered as a whole", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ MOOV_BOX}, + +/* sign */ {TRAK_SIGN, +/* short */ "Track box", +/* long */ "This is a container box for a single track of a presentation. A presentation may consist of one or more tracks", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ MOOV_BOX}, + +/* sign */ {TKHD_SIGN, +/* short */ "Track Header box", +/* long */ "This box specifies the characteristics of a single track. Exactly one Track Header Box is contained in a track", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ TRAK_BOX}, + +/* sign */ {MDIA_SIGN, +/* short */ "Media box", +/* long */ "The media declaration container contains all the objects which declare information about the media data " + "within a track", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ TRAK_BOX}, + +/* sign */ {MINF_SIGN, +/* short */ "Media Information box", +/* long */ "This box contains all the objects which declare characteristic information of the media in the track", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ MDIA_BOX}, + +/* sign */ {STBL_SIGN, +/* short */ "Sample Table box", +/* long */ "The sample table contains all the time and data indexing of the media samples in a track", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ MINF_BOX}, + +/* sign */ {STSD_SIGN, +/* short */ "Sample Description box", +/* long */ "The sample description table gives detailed information about the coding type used, and any initialization " + "information needed for that coding", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ MINF_BOX}, + +/* sign */ {MJP2_SIGN, +/* short */ "MJP2 Sample Description box", +/* long */ "The MJP2 sample description table gives detailed information about the coding type used, and any initialization " + "information needed for that coding", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ MINF_BOX}, + +/* sign */ {MDAT_SIGN, +/* short */ "Media Data box", +/* long */ "The meta-data for a presentation is stored in the single Movie Box which occurs at the top-level of a file", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {ANY_SIGN, +/* short */ "Any box", +/* long */ "All the existing boxes", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ FILE_BOX}, + +/* sign */ {UNK_SIGN, +/* short */ "Unknown Type box", +/* long */ "The signature is not recognised to be that of an existing box", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ ANY_BOX} + +}; + +/* declaration */ +int +jpeg2000_box_handler_function(jpeg2000boxtype boxtype, wxInputStream& stream, unsigned long int filepoint, + unsigned long int filelimit, int level, char *scansign, + unsigned long int *scanpoint); + +#ifdef __WXMSW__ +typedef unsigned __int64 int8byte; +#endif // __WXMSW__ + +#ifdef __WXGTK__ +typedef unsigned long long int8byte; +#endif // __WXGTK__ + +/* internal mini-search for a box signature */ +int +jpeg2000_file_parse(wxInputStream& stream, unsigned long int filepoint, unsigned long int filelimit, int level, + char *scansign, unsigned long int *scanpoint) +{ + unsigned long int LBox = 0x00000000; + char TBox[5] = "\0\0\0\0"; + int8byte XLBox = 0x0000000000000000; + unsigned long int box_length = 0; + int last_box = 0, box_num = 0; + int box_type = ANY_BOX; + unsigned char fourbytes[4]; + int box_number = 0; + + /* cycle all over the file */ + box_num = 0; + last_box = 0; + while (!last_box) { + + /* do not exceed file limit */ + if (filepoint >= filelimit) + return (0); + + /* seek on file */ + if (stream.SeekI(filepoint, wxFromStart) == wxInvalidOffset) + return (-1); + + /* read the mandatory LBox, 4 bytes */ + if (!stream.Read(fourbytes, 4)) { + wxLogError(wxT("Problem reading LBox from the file (file ended?)")); + return -1; + }; + LBox = STREAM_TO_UINT32(fourbytes, 0); + + /* read the mandatory TBox, 4 bytes */ + if (!stream.Read(TBox, 4)) { + wxLogError(wxT("Problem reading TBox from the file (file ended?)")); + return -1; + }; + + /* look if scansign is got */ + if ((scansign != NULL) && (memcmp(TBox, scansign, 4) == 0)) { + /* hack/exploit */ + // stop as soon as you find the level-th codebox + if (box_number == level) { + memcpy(scansign, " ", 4); + *scanpoint = filepoint; + return (0); + } else + box_number++; + + }; + + /* determine the box type */ + for (box_type = JP_BOX; box_type < UNK_BOX; box_type++) + if (memcmp(TBox, jpeg2000box[box_type].value, 4) == 0) + break; + + /* read the optional XLBox, 8 bytes */ + if (LBox == 1) { + + if (!stream.Read(&XLBox, 8)) { + wxLogError(wxT("Problem reading XLBox from the file (file ended?)")); + return -1; + }; + box_length = (unsigned long int) BYTE_SWAP8(XLBox); + + } else if (LBox == 0x00000000) { + + /* last box in file */ + last_box = 1; + box_length = filelimit - filepoint; + + } else + + box_length = LBox; + + + /* go deep in the box */ + jpeg2000_box_handler_function((jpeg2000boxtype) box_type, + stream, (LBox == 1) ? (filepoint + 16) : (filepoint + 8), + filepoint + box_length, level, scansign, scanpoint); + + /* if it's a superbox go inside it */ + if (jpeg2000box[box_type].sbox) + jpeg2000_file_parse(stream, (LBox == 1) ? (filepoint + 16) : (filepoint + 8), filepoint + box_length, + level, scansign, scanpoint); + + /* increment box number and filepoint*/ + box_num++; + filepoint += box_length; + + }; + + /* all good */ + return (0); +} + +// search first contiguos codestream box in an mj2 file +unsigned long int +searchjpeg2000c(wxInputStream& stream, unsigned long int fsize, int number) +{ + char scansign[] = "jp2c"; + unsigned long int scanpoint = 0L; + + wxLogMessage(wxT("Searching jp2c box... ")); + + /* do the parsing */ + if (jpeg2000_file_parse(stream, 0, fsize, number, scansign, &scanpoint) < 0) + wxLogMessage(wxT("Unrecoverable error during JPEG 2000 box parsing: stopping")); + + if (strcmp(scansign, " ")) + wxLogMessage(wxT("Box not found")); + else { + + wxLogMessage(wxString::Format(wxT("Box found at byte %d"), scanpoint)); + + }; + + return (scanpoint); +} + +// search the jp2h box in the file +unsigned long int +searchjpeg2000headerbox(wxInputStream& stream, unsigned long int fsize) +{ + char scansign[] = "jp2h"; + unsigned long int scanpoint = 0L; + + wxLogMessage(wxT("Searching jp2h box... ")); + + /* do the parsing */ + if (jpeg2000_file_parse(stream, 0, fsize, 0, scansign, &scanpoint) < 0) + wxLogMessage(wxT("Unrecoverable error during JPEG 2000 box parsing: stopping")); + + if (strcmp(scansign, " ")) + wxLogMessage(wxT("Box not found")); + else + wxLogMessage(wxString::Format(wxT("Box found at byte %d"), scanpoint)); + + return (scanpoint); +} + +/* handling functions */ +#define ITEM_PER_ROW 10 + +/* Box handler function */ +int +jpeg2000_box_handler_function(jpeg2000boxtype boxtype, wxInputStream& stream, unsigned long int filepoint, + unsigned long int filelimit, int level, + char *scansign, unsigned long int *scanpoint) +{ + switch (boxtype) { + + /* Sample Description box */ + case (STSD_BOX): + jpeg2000_file_parse(stream, filepoint + 8, filelimit, level, scansign, scanpoint); + break; + + /* MJP2 Sample Description box */ + case (MJP2_BOX): + jpeg2000_file_parse(stream, filepoint + 78, filelimit, level, scansign, scanpoint); + break; + + /* not yet implemented */ + default: + break; + + }; + + return (0); +} + +// the jP and ftyp parts of the header +#define jpeg2000headSIZE 32 +unsigned char jpeg2000head[jpeg2000headSIZE] = { + 0x00, 0x00, 0x00, 0x0C, 'j', 'P', ' ', ' ', + 0x0D, 0x0A, 0x87, 0x0A, 0x00, 0x00, 0x00, 0x14, + 'f', 't', 'y', 'p', 'j', 'p', '2', ' ', + 0x00, 0x00, 0x00, 0x00, 'j', 'p', '2', ' ' +}; + +///////////////////////////////////////////////// +///////////////////////////////////////////////// + +// load the jpeg2000 file format +bool wxJPEG2000Handler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, int index) +{ + opj_dparameters_t parameters; /* decompression parameters */ + opj_event_mgr_t event_mgr; /* event manager */ + opj_image_t *opjimage = NULL; + unsigned char *src = NULL; + unsigned char *ptr; + int file_length, jp2c_point, jp2h_point; + unsigned long int jp2hboxlen, jp2cboxlen; + opj_codestream_info_t cstr_info; /* Codestream information structure */ + unsigned char hdr[24]; + int jpfamform; + + // destroy the image + image->Destroy(); + + /* read the beginning of the file to check the type */ + if (!stream.Read(hdr, WXSIZEOF(hdr))) + return false; + if ((jpfamform = jpeg2000familytype(hdr, WXSIZEOF(hdr))) < 0) + return false; + stream.SeekI(0, wxFromStart); + + /* handle to a decompressor */ + opj_dinfo_t* dinfo = NULL; + opj_cio_t *cio = NULL; + + /* configure the event callbacks */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = jpeg2000_error_callback; + event_mgr.warning_handler = jpeg2000_warning_callback; + event_mgr.info_handler = jpeg2000_info_callback; + + /* set decoding parameters to default values */ + opj_set_default_decoder_parameters(¶meters); + + /* prepare parameters */ + strncpy(parameters.infile, "", sizeof(parameters.infile) - 1); + strncpy(parameters.outfile, "", sizeof(parameters.outfile) - 1); + parameters.decod_format = jpfamform; + parameters.cod_format = BMP_DFMT; + if (m_reducefactor) + parameters.cp_reduce = m_reducefactor; + if (m_qualitylayers) + parameters.cp_layer = m_qualitylayers; + /*if (n_components) + parameters. = n_components;*/ + + /* JPWL only */ +#ifdef USE_JPWL + parameters.jpwl_exp_comps = m_expcomps; + parameters.jpwl_max_tiles = m_maxtiles; + parameters.jpwl_correct = m_enablejpwl; +#endif /* USE_JPWL */ + + /* get a decoder handle */ + if (jpfamform == JP2_CFMT || jpfamform == MJ2_CFMT) + dinfo = opj_create_decompress(CODEC_JP2); + else if (jpfamform == J2K_CFMT) + dinfo = opj_create_decompress(CODEC_J2K); + else + return false; + + /* find length of the stream */ + stream.SeekI(0, wxFromEnd); + file_length = (int) stream.TellI(); + + /* it's a movie */ + if (jpfamform == MJ2_CFMT) { + /* search for the first codestream box and the movie header box */ + jp2c_point = searchjpeg2000c(stream, file_length, m_framenum); + jp2h_point = searchjpeg2000headerbox(stream, file_length); + + // read the jp2h box and store it + stream.SeekI(jp2h_point, wxFromStart); + stream.Read(&jp2hboxlen, sizeof(unsigned long int)); + jp2hboxlen = BYTE_SWAP4(jp2hboxlen); + + // read the jp2c box and store it + stream.SeekI(jp2c_point, wxFromStart); + stream.Read(&jp2cboxlen, sizeof(unsigned long int)); + jp2cboxlen = BYTE_SWAP4(jp2cboxlen); + + // malloc memory source + src = (unsigned char *) malloc(jpeg2000headSIZE + jp2hboxlen + jp2cboxlen); + + // copy the jP and ftyp + memcpy(src, jpeg2000head, jpeg2000headSIZE); + + // copy the jp2h + stream.SeekI(jp2h_point, wxFromStart); + stream.Read(&src[jpeg2000headSIZE], jp2hboxlen); + + // copy the jp2c + stream.SeekI(jp2c_point, wxFromStart); + stream.Read(&src[jpeg2000headSIZE + jp2hboxlen], jp2cboxlen); + } else if (jpfamform == JP2_CFMT || jpfamform == J2K_CFMT) { + /* It's a plain image */ + /* get data */ + stream.SeekI(0, wxFromStart); + src = (unsigned char *) malloc(file_length); + stream.Read(src, file_length); + } else + return false; + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + if (jpfamform == MJ2_CFMT) + cio = opj_cio_open((opj_common_ptr)dinfo, src, jpeg2000headSIZE + jp2hboxlen + jp2cboxlen); + else if (jpfamform == JP2_CFMT || jpfamform == J2K_CFMT) + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + else { + free(src); + return false; + } + + /* decode the stream and fill the image structure */ + opjimage = opj_decode_with_info(dinfo, cio, &cstr_info); + if (!opjimage) { + wxMutexGuiEnter(); + wxLogError(wxT("JPEG 2000 failed to decode image!")); + wxMutexGuiLeave(); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + free(src); + return false; + } + + /* close the byte stream */ + opj_cio_close(cio); + + /* + + - At this point, we have the structure "opjimage" that is filled with decompressed + data, as processed by the OpenJPEG decompression engine + + - We need to fill the class "image" with the proper pixel sample values + + */ + { + int shiftbpp; + int c, tempcomps; + + // check components number + if (m_components > opjimage->numcomps) + m_components = opjimage->numcomps; + + // check image depth (only on the first one, for now) + if (m_components) + shiftbpp = opjimage->comps[m_components - 1].prec - 8; + else + shiftbpp = opjimage->comps[0].prec - 8; + + // prepare image size + if (m_components) + image->Create(opjimage->comps[m_components - 1].w, opjimage->comps[m_components - 1].h, true); + else + image->Create(opjimage->comps[0].w, opjimage->comps[0].h, true); + + // access image raw data + image->SetMask(false); + ptr = image->GetData(); + + // workaround for components different from 1 or 3 + if ((opjimage->numcomps != 1) && (opjimage->numcomps != 3)) { +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif /* __WXGTK__ */ + wxLogMessage(wxT("JPEG2000: weird number of components")); +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif /* __WXGTK__ */ + tempcomps = 1; + } else + tempcomps = opjimage->numcomps; + + // workaround for subsampled components + for (c = 1; c < tempcomps; c++) { + if ((opjimage->comps[c].w != opjimage->comps[c - 1].w) || (opjimage->comps[c].h != opjimage->comps[c - 1].h)) { + tempcomps = 1; + break; + } + } + + // workaround for different precision components + for (c = 1; c < tempcomps; c++) { + if (opjimage->comps[c].bpp != opjimage->comps[c - 1].bpp) { + tempcomps = 1; + break; + } + } + + // only one component selected + if (m_components) + tempcomps = 1; + + // RGB color picture + if (tempcomps == 3) { + int row, col; + int *r = opjimage->comps[0].data; + int *g = opjimage->comps[1].data; + int *b = opjimage->comps[2].data; + if (shiftbpp > 0) { + for (row = 0; row < opjimage->comps[0].h; row++) { + for (col = 0; col < opjimage->comps[0].w; col++) { + + *(ptr++) = (*(r++)) >> shiftbpp; + *(ptr++) = (*(g++)) >> shiftbpp; + *(ptr++) = (*(b++)) >> shiftbpp; + + } + } + + } else if (shiftbpp < 0) { + for (row = 0; row < opjimage->comps[0].h; row++) { + for (col = 0; col < opjimage->comps[0].w; col++) { + + *(ptr++) = (*(r++)) << -shiftbpp; + *(ptr++) = (*(g++)) << -shiftbpp; + *(ptr++) = (*(b++)) << -shiftbpp; + + } + } + + } else { + for (row = 0; row < opjimage->comps[0].h; row++) { + for (col = 0; col < opjimage->comps[0].w; col++) { + + *(ptr++) = *(r++); + *(ptr++) = *(g++); + *(ptr++) = *(b++); + + } + } + } + } + + // B/W picture + if (tempcomps == 1) { + int row, col; + int selcomp; + + if (m_components) + selcomp = m_components - 1; + else + selcomp = 0; + + int *y = opjimage->comps[selcomp].data; + if (shiftbpp > 0) { + for (row = 0; row < opjimage->comps[selcomp].h; row++) { + for (col = 0; col < opjimage->comps[selcomp].w; col++) { + + *(ptr++) = (*(y)) >> shiftbpp; + *(ptr++) = (*(y)) >> shiftbpp; + *(ptr++) = (*(y++)) >> shiftbpp; + + } + } + } else if (shiftbpp < 0) { + for (row = 0; row < opjimage->comps[selcomp].h; row++) { + for (col = 0; col < opjimage->comps[selcomp].w; col++) { + + *(ptr++) = (*(y)) << -shiftbpp; + *(ptr++) = (*(y)) << -shiftbpp; + *(ptr++) = (*(y++)) << -shiftbpp; + + } + } + } else { + for (row = 0; row < opjimage->comps[selcomp].h; row++) { + for (col = 0; col < opjimage->comps[selcomp].w; col++) { + + *(ptr++) = *(y); + *(ptr++) = *(y); + *(ptr++) = *(y++); + + } + } + } + } + + + } + + wxMutexGuiEnter(); + wxLogMessage(wxT("JPEG 2000 image loaded.")); + wxMutexGuiLeave(); + + /* close openjpeg structs */ + opj_destroy_decompress(dinfo); + opj_image_destroy(opjimage); + free(src); + + if (!image->Ok()) + return false; + else + return true; + +} + +#define CINEMA_24_CS 1302083 /* Codestream length for 24fps */ +#define CINEMA_48_CS 651041 /* Codestream length for 48fps */ +#define COMP_24_CS 1041666 /* Maximum size per color component for 2K & 4K @ 24fps */ +#define COMP_48_CS 520833 /* Maximum size per color component for 2K @ 48fps */ + +// save the j2k codestream +bool wxJPEG2000Handler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbose ) +{ + opj_cparameters_t parameters; /* compression parameters */ + opj_event_mgr_t event_mgr; /* event manager */ + opj_image_t *oimage = NULL; + opj_image_cmptparm_t *cmptparm; + opj_cio_t *cio = NULL; + opj_codestream_info_t cstr_info; + int codestream_length; + bool bSuccess; + int i; + char indexfilename[OPJ_PATH_LEN] = ""; /* index file name */ + + /* + configure the event callbacks (not required) + setting of each callback is optionnal + */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = jpeg2000_error_callback; + event_mgr.warning_handler = jpeg2000_warning_callback; + event_mgr.info_handler = jpeg2000_info_callback; + + /* set encoding parameters to default values */ + opj_set_default_encoder_parameters(¶meters); + + /* load parameters */ + parameters.cp_cinema = OFF; + + /* subsampling */ + if (sscanf(m_subsampling.ToAscii(), "%d,%d", &(parameters.subsampling_dx), &(parameters.subsampling_dy)) != 2) { + wxLogError(wxT("Wrong sub-sampling encoder setting: dx,dy")); + return false; + } + + /* compression rates */ + if ((m_rates != wxT("")) && (!m_enablequality)) { + const char *s1 = m_rates.ToAscii(); + wxLogMessage(wxT("rates %s"), s1); + while (sscanf(s1, "%f", &(parameters.tcp_rates[parameters.tcp_numlayers])) == 1) { + parameters.tcp_numlayers++; + while (*s1 && *s1 != ',') { + s1++; + } + if (!*s1) + break; + s1++; + } + wxLogMessage(wxT("%d layers"), parameters.tcp_numlayers); + parameters.cp_disto_alloc = 1; + } + + /* image quality, dB */ + if ((m_quality != wxT("")) && (m_enablequality)) { + const char *s2 = m_quality.ToAscii(); + wxLogMessage(wxT("qualities %s"), s2); + while (sscanf(s2, "%f", ¶meters.tcp_distoratio[parameters.tcp_numlayers]) == 1) { + parameters.tcp_numlayers++; + while (*s2 && *s2 != ',') { + s2++; + } + if (!*s2) + break; + s2++; + } + wxLogMessage(wxT("%d layers"), parameters.tcp_numlayers); + parameters.cp_fixed_quality = 1; + } + + /* image origin */ + if (sscanf(m_origin.ToAscii(), "%d,%d", ¶meters.image_offset_x0, ¶meters.image_offset_y0) != 2) { + wxLogError(wxT("bad coordinate of the image origin: x0,y0")); + return false; + } + + /* Create comment for codestream */ + if(m_enablecomm) { + parameters.cp_comment = (char *) malloc(strlen(m_comment.ToAscii()) + 1); + if(parameters.cp_comment) { + strcpy(parameters.cp_comment, m_comment.ToAscii()); + } + } else { + parameters.cp_comment = NULL; + } + + /* indexing file */ + if (m_enableidx) { + strncpy(indexfilename, m_index.ToAscii(), OPJ_PATH_LEN); + wxLogMessage(wxT("index file is %s"), indexfilename); + } + + /* if no rate entered, lossless by default */ + if (parameters.tcp_numlayers == 0) { + parameters.tcp_rates[0] = 0; /* MOD antonin : losslessbug */ + parameters.tcp_numlayers++; + parameters.cp_disto_alloc = 1; + } + + /* irreversible transform */ + parameters.irreversible = (m_irreversible == true) ? 1 : 0; + + /* resolutions */ + parameters.numresolution = m_resolutions; + + /* codeblocks size */ + if (m_cbsize != wxT("")) { + int cblockw_init = 0, cblockh_init = 0; + sscanf(m_cbsize.ToAscii(), "%d,%d", &cblockw_init, &cblockh_init); + if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024 || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) { + wxLogError(wxT("!! Size of code_block error !! Restrictions:\n width*height<=4096\n 4<=width,height<= 1024")); + return false; + } + parameters.cblockw_init = cblockw_init; + parameters.cblockh_init = cblockh_init; + } + + /* precincts size */ + if (m_prsize != wxT("")) { + char sep; + int res_spec = 0; + char *s = (char *) m_prsize.c_str(); + do { + sep = 0; + sscanf(s, "[%d,%d]%c", ¶meters.prcw_init[res_spec], ¶meters.prch_init[res_spec], &sep); + parameters.csty |= 0x01; + res_spec++; + s = strpbrk(s, "]") + 2; + } while (sep == ','); + parameters.res_spec = res_spec; + } + + /* tiles */ + if (m_tsize != wxT("")) { + sscanf(m_tsize.ToAscii(), "%d,%d", ¶meters.cp_tdx, ¶meters.cp_tdy); + parameters.tile_size_on = true; + } + + /* tile origin */ + if (sscanf(m_torigin.ToAscii(), "%d,%d", ¶meters.cp_tx0, ¶meters.cp_ty0) != 2) { + wxLogError(wxT("tile offset setting error: X0,Y0")); + return false; + } + + /* use SOP */ + if (m_enablesop) + parameters.csty |= 0x02; + + /* use EPH */ + if (m_enableeph) + parameters.csty |= 0x04; + + /* multiple component transform */ + if (m_multicomp) + parameters.tcp_mct = 1; + else + parameters.tcp_mct = 0; + + /* mode switch */ + parameters.mode = (m_enablebypass ? 1 : 0) + (m_enablereset ? 2 : 0) + + (m_enablerestart ? 4 : 0) + (m_enablevsc ? 8 : 0) + + (m_enableerterm ? 16 : 0) + (m_enablesegmark ? 32 : 0); + + /* progression order */ + switch (m_progression) { + + /* LRCP */ + case 0: + parameters.prog_order = LRCP; + break; + + /* RLCP */ + case 1: + parameters.prog_order = RLCP; + break; + + /* RPCL */ + case 2: + parameters.prog_order = RPCL; + break; + + /* PCRL */ + case 3: + parameters.prog_order = PCRL; + break; + + /* CPRL */ + case 4: + parameters.prog_order = CPRL; + break; + + /* DCI2K24 */ + case 5: + parameters.cp_cinema = CINEMA2K_24; + parameters.cp_rsiz = CINEMA2K; + break; + + /* DCI2K48 */ + case 6: + parameters.cp_cinema = CINEMA2K_48; + parameters.cp_rsiz = CINEMA2K; + break; + + /* DCI4K */ + case 7: + parameters.cp_cinema = CINEMA4K_24; + parameters.cp_rsiz = CINEMA4K; + break; + + default: + break; + } + + /* check cinema */ + if (parameters.cp_cinema) { + + /* set up */ + parameters.tile_size_on = false; + parameters.cp_tdx=1; + parameters.cp_tdy=1; + + /*Tile part*/ + parameters.tp_flag = 'C'; + parameters.tp_on = 1; + + /*Tile and Image shall be at (0,0)*/ + parameters.cp_tx0 = 0; + parameters.cp_ty0 = 0; + parameters.image_offset_x0 = 0; + parameters.image_offset_y0 = 0; + + /*Codeblock size= 32*32*/ + parameters.cblockw_init = 32; + parameters.cblockh_init = 32; + parameters.csty |= 0x01; + + /*The progression order shall be CPRL*/ + parameters.prog_order = CPRL; + + /* No ROI */ + parameters.roi_compno = -1; + + parameters.subsampling_dx = 1; + parameters.subsampling_dy = 1; + + /* 9-7 transform */ + parameters.irreversible = 1; + + } + + /* convert wx image into opj image */ + cmptparm = (opj_image_cmptparm_t*) malloc(3 * sizeof(opj_image_cmptparm_t)); + + /* initialize opj image components */ + memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t)); + for(i = 0; i < 3; i++) { + cmptparm[i].prec = 8; + cmptparm[i].bpp = 8; + cmptparm[i].sgnd = false; + cmptparm[i].dx = parameters.subsampling_dx; + cmptparm[i].dy = parameters.subsampling_dy; + cmptparm[i].w = wimage->GetWidth(); + cmptparm[i].h = wimage->GetHeight(); + } + + /* create the image */ + oimage = opj_image_create(3, &cmptparm[0], CLRSPC_SRGB); + if(!oimage) { + if (cmptparm) + free(cmptparm); + return false; + } + + /* set image offset and reference grid */ + oimage->x0 = parameters.image_offset_x0; + oimage->y0 = parameters.image_offset_y0; + oimage->x1 = parameters.image_offset_x0 + (wimage->GetWidth() - 1) * 1 + 1; + oimage->y1 = parameters.image_offset_y0 + (wimage->GetHeight() - 1) * 1 + 1; + + /* load image data */ + unsigned char *value = wimage->GetData(); + int area = wimage->GetWidth() * wimage->GetHeight(); + for (i = 0; i < area; i++) { + oimage->comps[0].data[i] = *(value++); + oimage->comps[1].data[i] = *(value++); + oimage->comps[2].data[i] = *(value++); + } + + /* check cinema again */ + if (parameters.cp_cinema) { + int i; + float temp_rate; + opj_poc_t *POC = NULL; + + switch (parameters.cp_cinema) { + + case CINEMA2K_24: + case CINEMA2K_48: + if (parameters.numresolution > 6) { + parameters.numresolution = 6; + } + if (!((oimage->comps[0].w == 2048) | (oimage->comps[0].h == 1080))) { + wxLogWarning(wxT("Image coordinates %d x %d is not 2K compliant. JPEG Digital Cinema Profile-3 " + "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080"), + oimage->comps[0].w, oimage->comps[0].h); + parameters.cp_rsiz = STD_RSIZ; + } + break; + + case CINEMA4K_24: + if (parameters.numresolution < 1) { + parameters.numresolution = 1; + } else if (parameters.numresolution > 7) { + parameters.numresolution = 7; + } + if (!((oimage->comps[0].w == 4096) | (oimage->comps[0].h == 2160))) { + wxLogWarning(wxT("Image coordinates %d x %d is not 4K compliant. JPEG Digital Cinema Profile-4" + "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160"), + oimage->comps[0].w, oimage->comps[0].h); + parameters.cp_rsiz = STD_RSIZ; + } + parameters.POC[0].tile = 1; + parameters.POC[0].resno0 = 0; + parameters.POC[0].compno0 = 0; + parameters.POC[0].layno1 = 1; + parameters.POC[0].resno1 = parameters.numresolution - 1; + parameters.POC[0].compno1 = 3; + parameters.POC[0].prg1 = CPRL; + parameters.POC[1].tile = 1; + parameters.POC[1].resno0 = parameters.numresolution - 1; + parameters.POC[1].compno0 = 0; + parameters.POC[1].layno1 = 1; + parameters.POC[1].resno1 = parameters.numresolution; + parameters.POC[1].compno1 = 3; + parameters.POC[1].prg1 = CPRL; + parameters.numpocs = 2; + break; + } + + switch (parameters.cp_cinema) { + case CINEMA2K_24: + case CINEMA4K_24: + for (i = 0 ; i < parameters.tcp_numlayers; i++) { + temp_rate = 0; + if (parameters.tcp_rates[i] == 0) { + parameters.tcp_rates[0] = ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / + (CINEMA_24_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy); + }else{ + temp_rate = ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / + (parameters.tcp_rates[i] * 8 * oimage->comps[0].dx * oimage->comps[0].dy); + if (temp_rate > CINEMA_24_CS ) { + parameters.tcp_rates[i]= ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / + (CINEMA_24_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy); + } else { + /* do nothing */ + } + } + } + parameters.max_comp_size = COMP_24_CS; + break; + + case CINEMA2K_48: + for (i = 0; i < parameters.tcp_numlayers; i++) { + temp_rate = 0 ; + if (parameters.tcp_rates[i] == 0) { + parameters.tcp_rates[0] = ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / + (CINEMA_48_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy); + }else{ + temp_rate =((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / + (parameters.tcp_rates[i] * 8 * oimage->comps[0].dx * oimage->comps[0].dy); + if (temp_rate > CINEMA_48_CS ){ + parameters.tcp_rates[0]= ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / + (CINEMA_48_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy); + }else{ + /* do nothing */ + } + } + } + parameters.max_comp_size = COMP_48_CS; + break; + } + + parameters.cp_disto_alloc = 1; + } + + /* get a J2K compressor handle */ + opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr); + + /* setup the encoder parameters using the current image and user parameters */ + opj_setup_encoder(cinfo, ¶meters, oimage); + + /* open a byte stream for writing */ + /* allocate memory for all tiles */ + cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0); + + /* encode the image */ + bSuccess = opj_encode_with_info(cinfo, cio, oimage, &cstr_info); + if (!bSuccess) { + + opj_cio_close(cio); + opj_destroy_compress(cinfo); + opj_image_destroy(oimage); + if (cmptparm) + free(cmptparm); + if(parameters.cp_comment) + free(parameters.cp_comment); + if(parameters.cp_matrice) + free(parameters.cp_matrice); + +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif /* __WXGTK__ */ + + wxLogError(wxT("failed to encode image")); + +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif /* __WXGTK__ */ + + return false; + } + codestream_length = cio_tell(cio); + wxLogMessage(wxT("Codestream: %d bytes"), codestream_length); + + /* write the buffer to stream */ + stream.Write(cio->buffer, codestream_length); + + /* close and free the byte stream */ + opj_cio_close(cio); + + /* Write the index to disk */ + if (*indexfilename) { + if (write_index_file(&cstr_info, indexfilename)) { + wxLogError(wxT("Failed to output index file")); + } + } + + /* free remaining compression structures */ + opj_destroy_compress(cinfo); + + /* free image data */ + opj_image_destroy(oimage); + + if (cmptparm) + free(cmptparm); + if(parameters.cp_comment) + free(parameters.cp_comment); + if(parameters.cp_matrice) + free(parameters.cp_matrice); + +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif /* __WXGTK__ */ + + wxLogMessage(wxT("J2K: Image encoded!")); + +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif /* __WXGTK__ */ + + return true; +} + +#ifdef __VISUALC__ + #pragma warning(default:4611) +#endif /* VC++ */ + +// recognize the JPEG 2000 family starting box or the 0xFF4F JPEG 2000 SOC marker +bool wxJPEG2000Handler::DoCanRead(wxInputStream& stream) +{ + unsigned char hdr[24]; + int jpfamform; + + if ( !stream.Read(hdr, WXSIZEOF(hdr)) ) + return false; + + jpfamform = jpeg2000familytype(hdr, WXSIZEOF(hdr)); + + return ((jpfamform == JP2_CFMT) || (jpfamform == MJ2_CFMT) || (jpfamform == J2K_CFMT)); +} + +#endif // wxUSE_STREAMS + +#endif // wxUSE_LIBOPENJPEG diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/imagjpeg2000.h b/contrib/menuetlibc/openjpeg/OPJViewer/source/imagjpeg2000.h new file mode 100644 index 0000000000..2fea20a813 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/imagjpeg2000.h @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +///////////////////////////////////////////////////////////////////////////// +// Name: imagalljpeg2000.h +// Purpose: wxImage JPEG 2000 family file format handler +// Author: G. Baruffa - based on imagjpeg.h, Vaclav Slavik +// RCS-ID: $Id: imagalljpeg2000.h,v 0.0 2008/01/31 11:22:00 VZ Exp $ +// Copyright: (c) Giuseppe Baruffa +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_IMAGJPEG2000_H_ +#define _WX_IMAGJPEG2000_H_ + +#include "wx/defs.h" + +//----------------------------------------------------------------------------- +// wxJPEG2000Handler +//----------------------------------------------------------------------------- + +#if wxUSE_LIBOPENJPEG + +#include "wx/image.h" +#include "libopenjpeg/openjpeg.h" +#include "codec/index.h" + +#define wxBITMAP_TYPE_JPEG2000 50 + +class WXDLLEXPORT wxJPEG2000Handler: public wxImageHandler +{ +public: + inline wxJPEG2000Handler() + { + m_name = wxT("JPEG 2000 family file format"); + m_extension = wxT("mj2"); + m_type = wxBITMAP_TYPE_JPEG2000; + m_mime = wxT("image/mj2"); + + /* decoding */ + m_reducefactor = 0; + m_qualitylayers = 0; + m_components = 0; +#ifdef USE_JPWL + m_enablejpwl = true; + m_expcomps = JPWL_EXPECTED_COMPONENTS; + m_maxtiles = JPWL_MAXIMUM_TILES; +#endif // USE_JPWL + + /* encoding */ + m_subsampling = wxT("1,1"); + m_origin = wxT("0,0"); + m_rates = wxT("20,10,5"); + m_quality = wxT("30,35,40"); + m_enablequality = false; + m_multicomp = false; + m_irreversible = false; + m_resolutions = 6; + m_progression = 0; + m_cbsize = wxT("32,32"); + m_prsize = wxT("[128,128],[128,128]"); + m_tsize = wxT(""); + m_torigin = wxT("0,0"); + /*m_progression + m_resilience*/ + m_enablesop = false; + m_enableeph = false; + m_enablereset = false; + m_enablesegmark = false; + m_enablevsc = false; + m_enablerestart = false; + m_enableerterm = false; + m_enablebypass = false; + /*m_roicompo + m_roiup + m_indexfname*/ + m_enableidx = false; + m_index = wxT("index.txt"); + m_enablepoc = false; + m_poc = wxT("T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL"); + m_enablecomm = true; + +#if defined __WXMSW__ + m_comment = wxT("Created by OPJViewer Win32 - OpenJPEG version "); +#elif defined __WXGTK__ + m_comment = wxT("Created by OPJViewer Lin32 - OpenJPEG version "); +#else + m_comment = wxT("Created by OPJViewer - OpenJPEG version "); +#endif + +#ifdef USE_JPWL + m_comment += wxString::Format(wxT("%s with JPWL"), (char *) opj_version()); +#else + m_comment += wxString::Format(wxT("%s"), (char *) opj_version()); +#endif + + } + + // decoding engine parameters + int m_reducefactor, m_qualitylayers, m_components, m_framenum; +#ifdef USE_JPWL + bool m_enablejpwl; + int m_expcomps, m_maxtiles; +#endif // USE_JPWL + + // encoding engine parameters + wxString m_subsampling; + wxString m_origin; + wxString m_rates; + wxString m_quality; + bool m_enablequality; + bool m_multicomp; + bool m_irreversible; + int m_resolutions; + int m_progression; + wxString m_cbsize; + wxString m_prsize; + wxString m_tsize; + wxString m_torigin; + /*m_progression + m_resilience*/ + bool m_enablesop; + bool m_enableeph; + bool m_enablebypass; + bool m_enableerterm; + bool m_enablerestart; + bool m_enablereset; + bool m_enablesegmark; + bool m_enablevsc; + /*m_roicompo + m_roiup + m_indexfname*/ + bool m_enableidx; + wxString m_index; + bool m_enablecomm; + wxString m_comment; + bool m_enablepoc; + wxString m_poc; + +#if wxUSE_STREAMS + virtual bool LoadFile(wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1); + virtual bool SaveFile(wxImage *image, wxOutputStream& stream, bool verbose=true); +protected: + virtual bool DoCanRead(wxInputStream& stream); +#endif + +private: + OPJ_PROG_ORDER give_progression(char progression[4]); + DECLARE_DYNAMIC_CLASS(wxJPEG2000Handler) +}; + +#endif // wxUSE_LIBOPENJPEG + +#endif // _WX_IMAGJPEG2000_H_ + diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/imagmxf.cpp b/contrib/menuetlibc/openjpeg/OPJViewer/source/imagmxf.cpp new file mode 100644 index 0000000000..99d0b9396a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/imagmxf.cpp @@ -0,0 +1,502 @@ +/* + * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +///////////////////////////////////////////////////////////////////////////// +// Name: imagmxf.cpp +// Purpose: wxImage MXF (Material eXchange Format) JPEG 2000 file format handler +// Author: Giuseppe Baruffa - based on imagjpeg.cpp, Vaclav Slavik +// RCS-ID: $Id: imagmxf.cpp,v 0.00 2007/11/19 17:00:00 MW Exp $ +// Copyright: (c) Giuseppe Baruffa +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifdef USE_MXF + +#include "mxflib/mxflib.h" +using namespace mxflib; + +namespace +{ + //! Structure holding information about the essence in each body stream + struct EssenceInfo + { + UMIDPtr PackageID; + PackagePtr Package; + MDObjectPtr Descriptor; + }; + //! Map of EssenceInfo structures indexed by BodySID + typedef std::map EssenceInfoMap; + + //! The map of essence info for this file + EssenceInfoMap EssenceLookup; +}; + +//! Build an EssenceInfoMap for the essence in a given file +/*! \return True if al OK, else false + */ +bool BuildEssenceInfo(MXFFilePtr &File, EssenceInfoMap &EssenceLookup); + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_IMAGE && wxUSE_LIBOPENJPEG + +#include "imagmxf.h" + +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/app.h" + #include "wx/intl.h" + #include "wx/bitmap.h" + #include "wx/module.h" +#endif + + +#include "libopenjpeg/openjpeg.h" + + +#include "wx/filefn.h" +#include "wx/wfstream.h" + +// ---------------------------------------------------------------------------- +// types +// ---------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +// wxMXFHandler +//----------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxMXFHandler,wxImageHandler) + +#if wxUSE_STREAMS + +#include +#define MAX_MESSAGE_LEN 200 + +//------------- MXF Manager + +// Debug and error messages + +//! Display a warning message +void mxflib::warning(const char *Fmt, ...) +{ + char msg[MAX_MESSAGE_LEN]; + va_list args; + + va_start(args, Fmt); + _vsnprintf(msg, MAX_MESSAGE_LEN, Fmt, args); + va_end(args); + + int message_len = strlen(msg) - 1; + if (msg[message_len] != '\n') + message_len = MAX_MESSAGE_LEN; +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif /* __WXGTK__ */ + wxLogMessage(wxT("[WARNING_MXF] %.*s"), message_len, msg); +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif /* __WXGTK__ */ +} + +//! Display an error message +void mxflib::error(const char *Fmt, ...) +{ + char msg[MAX_MESSAGE_LEN]; + va_list args; + + va_start(args, Fmt); + _vsnprintf(msg, MAX_MESSAGE_LEN, Fmt, args); + va_end(args); + + int message_len = strlen(msg) - 1; + if (msg[message_len] != '\n') + message_len = MAX_MESSAGE_LEN; +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif /* __WXGTK__ */ + wxLogMessage(wxT("[ERROR_MXF] %.*s"), message_len, msg); +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif /* __WXGTK__ */ +} + +//! Display an error message +void mxflib::debug(const char *Fmt, ...) +{ + char msg[MAX_MESSAGE_LEN]; + va_list args; + + va_start(args, Fmt); + _vsnprintf(msg, MAX_MESSAGE_LEN, Fmt, args); + va_end(args); + + int message_len = strlen(msg) - 1; + if (msg[message_len] != '\n') + message_len = MAX_MESSAGE_LEN; +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif /* __WXGTK__ */ + wxLogMessage(wxT("[DEBUG_MXF] %.*s"), message_len, msg); +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif /* __WXGTK__ */ +} + + + +//------------- JPEG 2000 Data Source Manager + +#define J2K_CFMT 0 +#define JP2_CFMT 1 +#define JPT_CFMT 2 +#define MJ2_CFMT 3 +#define PXM_DFMT 0 +#define PGX_DFMT 1 +#define BMP_DFMT 2 +#define YUV_DFMT 3 + +/* sample error callback expecting a FILE* client object */ +void mxf_error_callback(const char *msg, void *client_data) { + int message_len = strlen(msg) - 1; + if (msg[message_len] != '\n') + message_len = MAX_MESSAGE_LEN; +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif /* __WXGTK__ */ + wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg); +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif /* __WXGTK__ */ +} + +/* sample warning callback expecting a FILE* client object */ +void mxf_warning_callback(const char *msg, void *client_data) { + int message_len = strlen(msg) - 1; + if (msg[message_len] != '\n') + message_len = MAX_MESSAGE_LEN; +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif /* __WXGTK__ */ + wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg); +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif /* __WXGTK__ */ +} + +/* sample debug callback expecting no client object */ +void mxf_info_callback(const char *msg, void *client_data) { + int message_len = strlen(msg) - 1; + if (msg[message_len] != '\n') + message_len = MAX_MESSAGE_LEN; +#ifndef __WXGTK__ + wxMutexGuiEnter(); +#endif /* __WXGTK__ */ + wxLogMessage(wxT("[INFO] %.*s"), message_len, msg); +#ifndef __WXGTK__ + wxMutexGuiLeave(); +#endif /* __WXGTK__ */ +} + + +///////////////////////////////////////////////// +///////////////////////////////////////////////// + +// load the mxf file format +bool wxMXFHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, int index) +{ + opj_dparameters_t parameters; /* decompression parameters */ + opj_event_mgr_t event_mgr; /* event manager */ + opj_image_t *opjimage = NULL; + unsigned char *src = NULL; + unsigned char *ptr; + int file_length, j2k_point, j2k_len; + opj_codestream_info_t cstr_info; /* Codestream information structure */ + + // simply display the version of the library + wxLogMessage(wxT("Version of MXF: %s "), wxString::FromAscii(LibraryVersion().c_str())); + //wxLogMessage(wxT("MXF file name: %s"), m_filename.GetFullPath()); + + // open MXF file + MXFFilePtr TestFile = new MXFFile; + if (! TestFile->Open(m_filename.GetFullPath().c_str(), true)) + { + wxLogError(wxT("Could not find %s"), m_filename.GetFullPath().c_str()); + return false; + } else + wxLogMessage(wxT("Found %s"), m_filename.GetFullPath().c_str()); + + // Get the size + TestFile->SeekEnd(); + wxLogMessage(wxT("Size is %d bytes"), TestFile->Tell()); + TestFile->Seek(0); + + // essence information + //BuildEssenceInfo(TestFile, EssenceLookup); + + // close MXF file + TestFile->Close(); + + return false; + + // destroy the image + image->Destroy(); + + /* handle to a decompressor */ + opj_dinfo_t* dinfo = NULL; + opj_cio_t *cio = NULL; + + /* configure the event callbacks (not required) */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = mxf_error_callback; + event_mgr.warning_handler = mxf_warning_callback; + event_mgr.info_handler = mxf_info_callback; + + /* set decoding parameters to default values */ + opj_set_default_decoder_parameters(¶meters); + + /* prepare parameters */ + strncpy(parameters.infile, "", sizeof(parameters.infile)-1); + strncpy(parameters.outfile, "", sizeof(parameters.outfile)-1); + parameters.decod_format = J2K_CFMT; + parameters.cod_format = BMP_DFMT; + if (m_reducefactor) + parameters.cp_reduce = m_reducefactor; + if (m_qualitylayers) + parameters.cp_layer = m_qualitylayers; + /*if (n_components) + parameters. = n_components;*/ + + /* JPWL only */ +#ifdef USE_JPWL + parameters.jpwl_exp_comps = m_expcomps; + parameters.jpwl_max_tiles = m_maxtiles; + parameters.jpwl_correct = m_enablejpwl; +#endif /* USE_JPWL */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_J2K); + + /* find length of the stream */ + stream.SeekI(0, wxFromEnd); + file_length = (int) stream.TellI(); + + /* search for the m_framenum codestream position and length */ + //jp2c_point = searchjp2c(stream, file_length, m_framenum); + //jp2c_len = searchjp2c(stream, file_length, m_framenum); + j2k_point = 0; + j2k_len = 10; + + // malloc memory source + src = (unsigned char *) malloc(j2k_len); + + // copy the jp2c + stream.SeekI(j2k_point, wxFromStart); + stream.Read(src, j2k_len); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, j2k_len); + + /* decode the stream and fill the image structure */ + opjimage = opj_decode_with_info(dinfo, cio, &cstr_info); + if (!opjimage) { + wxMutexGuiEnter(); + wxLogError(wxT("MXF: failed to decode image!")); + wxMutexGuiLeave(); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + free(src); + return false; + } + + /* close the byte stream */ + opj_cio_close(cio); + + /* common rendering method */ +#include "imagjpeg2000.cpp" + + wxMutexGuiEnter(); + wxLogMessage(wxT("MXF: image loaded.")); + wxMutexGuiLeave(); + + /* close openjpeg structs */ + opj_destroy_decompress(dinfo); + opj_image_destroy(opjimage); + free(src); + + if (!image->Ok()) + return false; + else + return true; + +} + +// save the mxf file format +bool wxMXFHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbose ) +{ + wxLogError(wxT("MXF: Couldn't save movie -> not implemented.")); + return false; +} + +#ifdef __VISUALC__ + #pragma warning(default:4611) +#endif /* VC++ */ + +// recognize the MXF JPEG 2000 starting box +bool wxMXFHandler::DoCanRead( wxInputStream& stream ) +{ + unsigned char hdr[4]; + + if ( !stream.Read(hdr, WXSIZEOF(hdr)) ) + return false; + + return (hdr[0] == 0x06 && + hdr[1] == 0x0E && + hdr[2] == 0x2B && + hdr[3] == 0x34); +} + +//! Build an EssenceInfoMap for the essence in a given file +/*! \return True if al OK, else false + */ +bool BuildEssenceInfo(MXFFilePtr &File, EssenceInfoMap &EssenceLookup) +{ + // Empty any old data + EssenceLookup.clear(); + + // Get the master metadata set (or the header if we must) + PartitionPtr MasterPartition = File->ReadMasterPartition(); + if(!MasterPartition) + { + File->Seek(0); + MasterPartition = File->ReadPartition(); + warning("File %s does not contain a cloased copy of header metadata - using the open copy in the file header\n", File->Name.c_str()); + } + + if(!MasterPartition) + { + error("Could not read header metadata from file %s\n", File->Name.c_str()); + return false; + } + + // Read and parse the metadata + MasterPartition->ReadMetadata(); + MetadataPtr HMeta = MasterPartition->ParseMetadata(); + + if(!HMeta) + { + error("Could not read header metadata from file %s\n", File->Name.c_str()); + return false; + } + + /* Scan the Essence container data sets to get PackageID to BodySID mapping */ + MDObjectPtr ECDSet = HMeta[ContentStorage_UL]; + if(ECDSet) ECDSet = ECDSet->GetLink(); + if(ECDSet) ECDSet = ECDSet[EssenceContainerDataBatch_UL]; + if(!ECDSet) + { + error("Header metadata in file %s does not contain an EssenceContainerData set\n", File->Name.c_str()); + return false; + } + + MDObject::iterator it = ECDSet->begin(); + while(it != ECDSet->end()) + { + MDObjectPtr ThisECDSet = (*it).second->GetLink(); + MDObjectPtr PackageID; + if(ThisECDSet) PackageID = ThisECDSet->Child(LinkedPackageUID_UL); + if(PackageID) + { + EssenceInfo NewEI; + NewEI.PackageID = new UMID(PackageID->PutData()->Data); + + // Inset the basic essence info - but not if this is external essence (BodySID == 0) + UInt32 BodySID = ThisECDSet->GetUInt(BodySID_UL); + if(BodySID) EssenceLookup[BodySID] = NewEI; + } + it++; + } + + /* Now find the other items for the essence lookup map */ + if(EssenceLookup.size()) + { + PackageList::iterator it = HMeta->Packages.begin(); + while(it != HMeta->Packages.end()) + { + // Only Source Packages are of interest + if((*it)->IsA(SourcePackage_UL)) + { + MDObjectPtr Descriptor = (*it)->Child(Descriptor_UL); + if(Descriptor) Descriptor = Descriptor->GetLink(); + + if(Descriptor) + { + MDObjectPtr PackageID = (*it)->Child(PackageUID_UL); + if(PackageID) + { + UMIDPtr TheID = new UMID(PackageID->PutData()->Data); + + /* Now do a lookup in the essence lookup map (it will need to be done the long way here */ + EssenceInfoMap::iterator EL_it = EssenceLookup.begin(); + while(EL_it != EssenceLookup.end()) + { + if((*((*EL_it).second.PackageID)) == (*TheID)) + { + // If found, set the missing items and stop searching + (*EL_it).second.Package = (*it); + (*EL_it).second.Descriptor = Descriptor; + break; + } + EL_it++; + } + } + } + } + + it++; + } + } + + return true; +} + + +#endif // wxUSE_STREAMS + +#endif // wxUSE_LIBOPENJPEG + +#endif // USE_MXF + diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/imagmxf.h b/contrib/menuetlibc/openjpeg/OPJViewer/source/imagmxf.h new file mode 100644 index 0000000000..c87a4cb473 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/imagmxf.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +///////////////////////////////////////////////////////////////////////////// +// Name: imagmxf.h +// Purpose: wxImage MXF (Material eXchange Format) JPEG 2000 file format handler +// Author: G. Baruffa - based on imagjpeg.h, Vaclav Slavik +// RCS-ID: $Id: imagmj2.h,v 0.0 2007/11/19 17:00:00 VZ Exp $ +// Copyright: (c) Giuseppe Baruffa +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_IMAGMXF_H_ +#define _WX_IMAGMXF_H_ + +#ifdef USE_MXF + +#include "wx/defs.h" +#include "wx/filename.h" + +//----------------------------------------------------------------------------- +// wxMXFHandler +//----------------------------------------------------------------------------- + +#if wxUSE_LIBOPENJPEG + +#include "wx/image.h" +#include "libopenjpeg/openjpeg.h" + +#define wxBITMAP_TYPE_MXF 51 + +class WXDLLEXPORT wxMXFHandler: public wxImageHandler +{ +public: + inline wxMXFHandler() + { + m_name = wxT("MXF JPEG 2000 file format"); + m_extension = wxT("mxf"); + m_type = wxBITMAP_TYPE_MXF; + m_mime = wxT("image/mxf"); + + m_reducefactor = 0; + m_qualitylayers = 0; + m_components = 0; + m_filename = wxT(""); +#ifdef USE_JPWL + m_enablejpwl = true; + m_expcomps = JPWL_EXPECTED_COMPONENTS; + m_maxtiles = JPWL_MAXIMUM_TILES; +#endif // USE_JPWL + } + + // decoding engine parameters + int m_reducefactor, m_qualitylayers, m_components, m_framenum; + wxFileName m_filename; +#ifdef USE_JPWL + bool m_enablejpwl; + int m_expcomps, m_maxtiles; +#endif // USE_JPWL + +#if wxUSE_STREAMS + virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); + virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); +protected: + virtual bool DoCanRead( wxInputStream& stream ); +#endif + +private: + DECLARE_DYNAMIC_CLASS(wxMXFHandler) +}; + +#endif // wxUSE_LIBOPENJPEG + +#endif // USE_MXF + +#endif // _WX_IMAGMXF_H_ + diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/license.txt b/contrib/menuetlibc/openjpeg/OPJViewer/source/license.txt new file mode 100644 index 0000000000..81d6b3493a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/license.txt @@ -0,0 +1,14 @@ +Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium +Copyright (c) 2002-2007, Professor Benoit Macq +Copyright (c) 2001-2003, David Janssens +Copyright (c) 2002-2003, Yannick Verschueren +Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe +Copyright (c) 2005, Herve Drolon, FreeImage Team +Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditionsare met: +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. 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. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/opj_logo.xpm b/contrib/menuetlibc/openjpeg/OPJViewer/source/opj_logo.xpm new file mode 100644 index 0000000000..c64d0a7b4e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/opj_logo.xpm @@ -0,0 +1,285 @@ +/* XPM */ +static char *opj_logo[] = { +/* columns rows colors chars-per-pixel */ +"90 61 218 2", +" c #BE3D12", +". c #BF461D", +"X c #AD5435", +"o c #B64925", +"O c #B54E2B", +"+ c #BC4620", +"@ c #BB4B25", +"# c #BC4E29", +"$ c #B5502F", +"% c #BD512C", +"& c #B45334", +"* c #B35638", +"= c #B45B3D", +"- c #BB5533", +"; c #BE5937", +": c #BC5C3D", +"> c #9C766A", +", c #AD5D42", +"< c #B55F41", +"1 c #BA5E40", +"2 c #A7634D", +"3 c #A76C57", +"4 c #AA6750", +"5 c #AC6B56", +"6 c #AA6E5A", +"7 c #A4705E", +"8 c #B46045", +"9 c #B1644B", +"0 c #BD6244", +"q c #B96448", +"w c #BC694D", +"e c #B36B53", +"r c #B26E58", +"t c #BB6C52", +"y c #B2725D", +"u c #BD7056", +"i c #BB745C", +"p c #A67566", +"a c #A57B6D", +"s c #AE7562", +"d c #AB7867", +"f c #AA7C6C", +"g c #A07E73", +"h c #AA7F71", +"j c #B37661", +"k c #B47863", +"l c #B27D6B", +"z c #BB7863", +"x c #BA7E69", +"c c #C73605", +"v c #C63A0B", +"b c #CB3300", +"n c #CA3807", +"m c #C93A0A", +"M c #C43E11", +"N c #C93E10", +"B c #C44115", +"V c #C3441A", +"C c #C4481E", +"Z c #CA4113", +"A c #C94519", +"S c #CB481C", +"D c #C24A23", +"F c #C24F28", +"G c #CD4D23", +"H c #C4522D", +"J c #CB532B", +"K c #C25632", +"L c #C35936", +"P c #C25C3B", +"I c #C85630", +"U c #CB5933", +"Y c #CB5E3A", +"T c #D05026", +"R c #CC613D", +"E c #C26343", +"W c #C46748", +"Q c #C1694C", +"! c #CD6744", +"~ c #CA6C4D", +"^ c #C37155", +"/ c #C4755B", +"( c #CB7356", +") c #C8765B", +"_ c #D06D4C", +"` c #D07253", +"' c #D47B5E", +"] c #C37B63", +"[ c #C27E68", +"{ c #C97F68", +"} c #A68175", +"| c #A48479", +" . c #AD8172", +".. c #AD8578", +"X. c #AB897D", +"o. c #B1806F", +"O. c #BA816F", +"+. c #B38373", +"@. c #B58778", +"#. c #B3897B", +"$. c #BA8472", +"%. c #BB8C7C", +"&. c #C2816B", +"*. c #CD846C", +"=. c #C38470", +"-. c #C38976", +";. c #C38D7B", +":. c #CC8973", +">. c #CF8F7A", +",. c #CB907D", +"<. c #D1937F", +"1. c #948E8C", +"2. c #9D8C86", +"3. c #9D8F89", +"4. c #96908E", +"5. c #9C918D", +"6. c #949392", +"7. c #9B9492", +"8. c #9D9997", +"9. c #9D9C9C", +"0. c #A38B83", +"q. c #AA8D83", +"w. c #A4918B", +"e. c #AC9087", +"r. c #AB938C", +"t. c #A49590", +"y. c #A29996", +"u. c #A19D9C", +"i. c #AA9790", +"p. c #AC9994", +"a. c #AC9E99", +"s. c #B18D81", +"d. c #B59084", +"f. c #B49389", +"g. c #BA9184", +"h. c #B89589", +"j. c #BA988D", +"k. c #B29B93", +"l. c #BC9C92", +"z. c #ACA19D", +"x. c #B1A19D", +"c. c #BCA39B", +"v. c #A3A3A3", +"b. c #ABA5A3", +"n. c #AEA9A7", +"m. c #ABABAA", +"M. c #B3A5A1", +"N. c #B3A9A6", +"B. c #B3ADAA", +"V. c #B9A6A0", +"C. c #B9AAA5", +"Z. c #BAADA9", +"A. c #B4B0AF", +"S. c #BAB0AD", +"D. c #B4B3B3", +"F. c #BAB5B3", +"G. c #BDB8B6", +"H. c #BBBBBB", +"J. c #C39384", +"K. c #C0978A", +"L. c #C2998B", +"P. c #CA9483", +"I. c #CD9A8A", +"U. c #C19D92", +"Y. c #D69B89", +"T. c #DB9680", +"R. c #C2A095", +"E. c #C4A69C", +"W. c #CCA193", +"Q. c #C8A599", +"!. c #CBA99D", +"~. c #C6AEA6", +"^. c #CCACA2", +"/. c #CBB2AB", +"(. c #C3B8B5", +"). c #C2BDBC", +"_. c #C9B9B3", +"`. c #D3ADA0", +"'. c #D3B4A9", +"]. c #DCB2A4", +"[. c #DEB6A8", +"{. c #D1BFB9", +"}. c #D9BEB5", +"|. c #C5C0BE", +" X c #CDC0BC", +".X c #D2C1BB", +"XX c #DDC3BB", +"oX c #E0C5BC", +"OX c #E0C8BF", +"+X c #C2C2C2", +"@X c #CBC4C2", +"#X c #CDC8C6", +"$X c #CCCBCB", +"%X c #D2C6C2", +"&X c #D1CECD", +"*X c #DDC8C1", +"=X c #DECFCA", +"-X c #D9D1CE", +";X c #D3D3D3", +":X c #D9D5D4", +">X c #DED9D7", +",X c #DBDBDB", +".;X0XwXwXwXwXrXwXwXrXrXrXrXtXrXtXrXrXrXwXrXrXrXrXrXrXrXrXrXrXrXwXrXrXwXrXrXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXtXrXrXrX0X,X'.S b b P l.z.M.k.w n b b g.;X,X,X,X0X0X0X0X0XwXwXwXwXwXwXwXwXwX0X0X0XwX0X0XwXwXwXwX0X0X0X0X0X0XwXwXwXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXrXrXrXwX0X:XT.m b A ] G.D.D.m.$.m b b $.$X&X.X}.XX>XOX}.oXXX c b @ 9.v.9.u., b b - 3.& b b 7 1.1.4.4.4.6.7.9.w.m b + t.v.m.p.D b b K.;X,X0XwXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXwX0X,X$X-.b b b i D.H.G.H.J.N b b = 9.9.5 c b B 7.9.v.y.b b m f 4.O b b 3 6.6.6.g 9 4 h u.h b b - b.m.m.s.b b N ~.;X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXwX0X,X;XE.G b b I z ] ] ] W n b H l 9.8.9 b b m e 6 r e b b # 0.y.< b b O 6 p 6 < # ; q.v.t b b 0 n.A.A.+.b b H _.;X,XwXwXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXwXwX,X;X#Xf.b b b b b b b b b - a.v.v.w.@ b b v b b b b b @ b.m.v.w.M b b b b b b v ..m.n.A b n g.H.H.H.4 b b [ &X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXwXwX0X:X$XZ.Q H v n b m B H E x n.m.m.q.B b v < . v N + E z m.m.m.b.e - M m v M - t k.D.m.; # - V.H.+XH.s # # K.:X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXrXwXwX,X,X$X+XG.Z.Z.B.C.S.F.H.H.H.D.D.j b b q v.b.a.n.B.H.H.+X+X+XH.H.D.Z.C.Z.Z.F.H.H.+X+XH.).H.$X&X&X;X$X#X#X:X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXrXrXwX0X,X;X#X+X+X+XH.H.+X+X+XH.H.H.D.e b n i n.m.D.H.H.+X#X$X$X+X+X+X+XH.H.H.H.+X+X+X$X&X&X&X$X;X;X;X:X;X:X,X,X0XwXwXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXtXrXrXwXwX,X,X;X;X$X$X$X;X;X&X;X$X#X+XF b v s.H.H.+X$X&X;X;X,X,X,X;X:X;X;X;X;X;X;X:X,X,X,X0X,X0X,X0X0X0X0X0X0X0XwXwXrXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXrXtXrXwXwX0X,X:X;X;X;X;X;X:X;X;X;X$X+XC b B k.+X+X$X$X;X,X,X0X0X0X0X0X;X,X,X,X,X,X,X,X,X0X0X0X0X0X0XwX0X0X0XwXwXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXtXtXrXrXrXrXwXwXwX0X0X0X0X0X0X0X,X,X:X^.^.!.$X$X;X,X,X0XwXwXwXwXwXwXwXwX0X0X0X0XwXwXwXwXwXwXrXrXwXrXrXrXrXrXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXtXtXtXrXrXrXrXwXwXwXwX0XwXwXwX0X0X,X:X;X$X&X&X;X,X,X0XwXwXwXrXrXrXrXrXwXwXwXwXwXwXwXrXrXrXwXrXrXrXrXrXrXrXrXrXrXtXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXrXwXwXwXwX0X,X0X0X0XwXwXrXrXrXrXrXrXrXrXrXrXrXrXrXrXwXrXrXrXrXrXtXrXrXrXtXrXrXrXrXrXrXrXrXrXtXtXtXrXrXtXtXtXtXrXrXtXrXrXtXrXtXrXtXtXtXtXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXrXtXtXrXtXrXrXrXrXrXrXwXwXwX0XwX0XwXwXwXrXrXrXtXtXrXrXrXrXrXrXrXrXwXrXwXrXwXwXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXtXrXrXtXtXrXrXrXrXrXrXrXrXrXrXtXtXtXtXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXwXrXrXrXrXrXrXtXrXtXrXrXrXrXrXwXwXwXwXwX0X0XwX0XwXwXwXwXwXwXwXrXwXwXwX0X0X0X0XwX0XwXwXrXrXrXwXrXwXwXwX0XwX0XwXwXwXrXrXrXrXtXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXtXtXrXrXtXrXrXeX7X7X9XwXwXwX5X3X3X3X2X2X2X5X0XwXwXwXwXwX8X3X3X2X2X2X2X2X3X6X6X7XwXwXwXwXwXwX7X1XXXOXOX1X8XwXwXrXrXrXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXtXtXrXrXrXwXT.T T :.,X,X-X` G G G G G G U _ J.-X,X,X,X[ G G G G G G G G G G _ >XwX0X,X&XI.R N b b b m ! `.5XwXrXrXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXtXtXrXtXrXrXrXwX0X' b b ] >X,X%XJ b b b b b b b b Q {.:X;X:Xq b b b b b b b b b b Y >X0X,X-X'.^ n b b b b b m *.1XwXwXrXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrX0X0X%XL b b L.@X+X-.b b M L L L D b b b M V.+X(.N b b D H H H H H U U W.;X&X^.H b b n W -.-.W n b b J &XwXrXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX0X XF b b U.+X+X[ b b D z z j P v b b N U.H.S.m b m E Q t ^ ) / ) ) /.$X$X;.m b n A %.H.H.J.N b b N .XwXwXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX,X:X!.m b L N.D.m.* b b y v.v.v.v.p.n b M f.m.w b b D u.v.m.m.D.G.H.H.+X).g.b b B j.F.D.D.D.D.l.; F I /.0XwXrXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwX,X:XU.n b E B.A.n.$ b b s v.9.v.v.r.n n M r.b.1 b b D u.v.m.m.D.D.H.H.).H.k b b # M.G.D.D.D.D.Z.t w u _.0XwXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwXwX,X;X$XJ b m h b.v.i.m b M a 5.5.2.p M b c < 8.2.+ b b M o o o o # % j G.H.g.m b A M.D.D.D.B.M.M.M.M.Z.(.:X0XwXrXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXwX,X,X&X(.n b M 0.v.v.s b b b b b n b b c b M u.v.g M b b b b b b b b b i G.D.0 b b 8 D.D.H.G.P n b b n b U :X,XwXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXwX0X,X;X$XV.n b M w.v.9.< b b b b b b b b c H r 9.v.a n b * < < w w Q Q g.D.B.: b b r D.D.D.m.C b b b b b ) ;X0XwXrXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrX6XP.=.K.;X#X+Xx n b D v.u.7.. b b M D . D & 2 q.b.b.v.v.< b b X 6.9.9.b.m.D.D.D.D.n.# b b f D.D.D.b.= 1 * N b n !.;X,XwXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXrXwX stopbyte, inner_length + marker/box sign length (total length) +| |_ Additional info, depending on the marker/box type +| |_ ... +| +|_ #001: Marker/Box short name (Hex code) +| | +| |_ ... +| +... + + +The viewing pane will display the decoded image contained in the JPEG 2000 file. +It should display correctly images as large as 4000x2000, provided that a couple of GB of RAM are available. Nothing is known about the display of larger sizes: let us know if you manage to get it working. + + +The log/peek pane is shared among two different subpanels: + +- the log panel will report a lot of debugging info coming out from the wx GUI as well as from the openjpeg library +- the peek pane tries to give a peek on the codestream/file portion which is currently selected in the browsing pane. It shows both hex and ascii values corresponding to the marker/box section. + diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/readmebefore.txt b/contrib/menuetlibc/openjpeg/OPJViewer/source/readmebefore.txt new file mode 100644 index 0000000000..c5e1ed8742 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/readmebefore.txt @@ -0,0 +1,11 @@ +What is OpenJPEG ? +================== +The OpenJPEG library is an open-source JPEG 2000 codec written in C language. It has been developed in order to promote the use of JPEG 2000, the new still-image compression standard from the Joint Photographic Experts Group (JPEG). In addition to the basic codec, various other features are under development, among them the JP2 and MJ2 (Motion JPEG 2000) file formats, an indexing tool useful for the JPIP protocol, JPWL-tools for error-resilience, a Java-viewer for j2k-images, ... + +Who can use the library ? +========================= +Anybody. As the OpenJPEG library is released under the BSD license, anybody can use or modify the library, even for commercial applications. The only restriction is to retain the copyright in the sources or the binaries documentation. + +Who is developing the library ? +=============================== +The library is developed by the Communications and Remote Sensing Lab (TELE), in the Université Catholique de Louvain (UCL). The JPWL module is developped and maintained by the Digital Signal Processing Lab (DSPLab) of the University of Perugia, Italy (UNIPG). As our purpose is to make OpenJPEG really useful for those interested in the image compression field, any feedback/advices are obviously welcome ! We will do our best to handle them quickly. \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/wxj2kparser.cpp b/contrib/menuetlibc/openjpeg/OPJViewer/source/wxj2kparser.cpp new file mode 100644 index 0000000000..600fd65e22 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/wxj2kparser.cpp @@ -0,0 +1,1465 @@ +/* + * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#include "OPJViewer.h" + +/* From little endian to big endian, 2 bytes */ +#define BYTE_SWAP2(X) ((X & 0x00FF) << 8) | ((X & 0xFF00) >> 8) +#define BYTE_SWAP4(X) ((X & 0x000000FF) << 24) | ((X & 0x0000FF00) << 8) | ((X & 0x00FF0000) >> 8) | ((X & 0xFF000000) >> 24) + +/* From codestream to int values */ +#define STREAM_TO_UINT32(C, P) (((unsigned long int) (C)[(P) + 0] << 24) + \ + ((unsigned long int) (C)[(P) + 1] << 16) + \ + ((unsigned long int) (C)[(P) + 2] << 8) + \ + ((unsigned long int) (C)[(P) + 3] << 0)) + +#define STREAM_TO_UINT16(C, P) (((unsigned long int) (C)[(P) + 0] << 8) + \ + ((unsigned long int) (C)[(P) + 1] << 0)) + + +/* Markers values */ +#define J2KMARK_NUM 24 +enum { + SOC_VAL = 0xFF4F, + SOT_VAL = 0xFF90, + SOD_VAL = 0xFF93, + EOC_VAL = 0xFFD9, + SIZ_VAL = 0xFF51, + COD_VAL = 0xFF52, + COC_VAL = 0xFF53, + RGN_VAL = 0xFF5E, + QCD_VAL = 0xFF5C, + QCC_VAL = 0xFF5D, + POD_VAL = 0xFF5F, + TLM_VAL = 0xFF55, + PLM_VAL = 0xFF57, + PLT_VAL = 0xFF58, + PPM_VAL = 0xFF60, + PPT_VAL = 0xFF61, + SOP_VAL = 0xFF91, + EPH_VAL = 0xFF92, + COM_VAL = 0xFF64 +#ifdef USE_JPWL + , EPB_VAL = 0xFF66, + ESD_VAL = 0xFF67, + EPC_VAL = 0xFF68, + RED_VAL = 0xFF69 + /*, EPB_VAL = 0xFF96, + ESD_VAL = 0xFF98, + EPC_VAL = 0xFF97, + RED_VAL = 0xFF99*/ +#endif // USE_JPWL +#ifdef USE_JPSEC + , SEC_VAL = 0xFF65 +#endif // USE_JPSEC +}; + +// All the markers in one vector +unsigned short int marker_val[] = { + SOC_VAL, SOT_VAL, SOD_VAL, EOC_VAL, + SIZ_VAL, + COD_VAL, COC_VAL, RGN_VAL, QCD_VAL, QCC_VAL, POD_VAL, + TLM_VAL, PLM_VAL, PLT_VAL, PPM_VAL, PPT_VAL, + SOP_VAL, EPH_VAL, + COM_VAL +#ifdef USE_JPWL + , EPB_VAL, ESD_VAL, EPC_VAL, RED_VAL +#endif // USE_JPWL +#ifdef USE_JPSEC + , SEC_VAL +#endif // USE_JPSEC +}; + +// Marker names +char *marker_name[] = { + "SOC", "SOT", "SOD", "EOC", + "SIZ", + "COD", "COC", "RGN", "QCD", "QCC", "POD", + "TLM", "PLM", "PLT", "PPM", "PPT", + "SOP", "EPH", + "COM" +#ifdef USE_JPWL + , "EPB", "ESD", "EPC", "RED" +#endif // USE_JPWL +#ifdef USE_JPSEC + , "SEC" +#endif // USE_JPSEC +}; + +// Marker descriptions +char *marker_descr[] = { + "Start of codestream", "Start of tile-part", "Start of data", "End of codestream", + "Image and tile size", + "Coding style default", "Coding style component", "Region-of-interest", "Quantization default", + "Quantization component", "Progression order change, default", + "Tile-part lengths, main header", "Packet length, main header", "Packets length, tile-part header", + "Packed packet headers, main header", "Packed packet headers, tile-part header", + "Start of packet", "End of packet header", + "Comment and extension" +#ifdef USE_JPWL + , "Error Protection Block", "Error Sensitivity Descriptor", "Error Protection Capability", + "Residual Errors Descriptor" +#endif // USE_JPWL +#ifdef USE_JPSEC + , "Main security marker" +#endif // USE_JPSEC +}; + +void OPJParseThread::ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOffset length, wxTreeItemId parentid) +{ + unsigned short int csiz = 0; + + // check if the file is opened + if (m_file->IsOpened()) + WriteText(wxT("File OK")); + else + return; + + // position at the beginning + m_file->Seek(offset, wxFromStart); + + // navigate the file + int m, inside_sod = 0, inside_sop = 0; + int nmarks = 0, maxmarks = 10000; + unsigned char onebyte[1]; + unsigned char twobytes[2], firstbyte, secondbyte; + unsigned char fourbytes[4]; + unsigned short int currmark; + unsigned short int currlen; + int lastPsot = 0, lastsotpos = 0; + + WriteText(wxT("Start search...")); + +// advancing macro +#define OPJ_ADVANCE(A) {offset += A; if (offset < length) m_file->Seek(offset, wxFromStart); else return;} + + // begin search + while ((offset < length) && (!m_file->Eof())) { + + // read one byte + if (m_file->Read(&firstbyte, 1) != 1) + break; + + // look for 0xFF + if (firstbyte == 0xFF) { + + // it is a possible marker + if (m_file->Read(&secondbyte, 1) != 1) + break; + else + currmark = (((unsigned short int) firstbyte) << 8) + (unsigned short int) secondbyte; + + } else { + + // nope, advance by one and search again + OPJ_ADVANCE(1); + continue; + } + + // search the marker + for (m = 0; m < J2KMARK_NUM; m++) { + if (currmark == marker_val[m]) + break; + } + + // marker not found + if (m == J2KMARK_NUM) { + // nope, advance by one and search again + OPJ_ADVANCE(1); + continue; + } + + // if we are inside SOD, only some markers are allowed + if (inside_sod) { + + // we are inside SOP + if (inside_sop) { + + } + + // randomly marker coincident data + if ((currmark != SOT_VAL) && + (currmark != EOC_VAL) && + (currmark != SOP_VAL) && + (currmark != EPH_VAL)) { + OPJ_ADVANCE(1); + continue; + } + + // possible SOT? + if ((currmark == SOT_VAL)) { + // too early SOT + if (offset < (lastsotpos + lastPsot)) { + OPJ_ADVANCE(1); + continue; + } + // we were not in the last tile + /*if (lastPsot != 0) { + OPJ_ADVANCE(1); + break; + }*/ + } + } + + // beyond this point, the marker MUST BE real + + // length of current marker segment + if ((currmark == SOD_VAL) || + (currmark == SOC_VAL) || + (currmark == EOC_VAL) || + (currmark == EPH_VAL)) + + // zero length markers + currlen = 0; + + else { + + // read length field + if (m_file->Read(twobytes, 2) != 2) + break; + + currlen = (((unsigned short int) twobytes[0]) << 8) + (unsigned short int) twobytes[1]; + } + + // here we pass to AppendItem() normal and selected item images (we + // suppose that selected image follows the normal one in the enum) + int image, imageSel; + image = m_tree->TreeCtrlIcon_Folder; + imageSel = image + 1; + + // append the marker + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("%03d: "), nmarks) + + wxString::FromAscii(marker_name[m]) + + wxString::Format(wxT(" (0x%04X)"), marker_val[m]), + image, imageSel, + new OPJMarkerData(wxT("MARK") + wxString::Format(wxT(" (%d)"), marker_val[m]), + m_tree->m_fname.GetFullPath(), offset, offset + currlen + 1) + ); + + // append some info + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + // marker name + wxTreeItemId subcurrid1 = m_tree->AppendItem(currid, + wxT("*** ") + wxString::FromAscii(marker_descr[m]) + wxT(" ***"), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + m_tree->SetItemFont(subcurrid1, *wxITALIC_FONT); + + // position and length + wxTreeItemId subcurrid2 = m_tree->AppendItem(currid, + wxLongLong(offset).ToString() + wxT(" > ") + wxLongLong(offset + currlen + 1).ToString() + + wxT(", ") + wxString::Format(wxT("%d + 2 (%d)"), currlen, currlen + 2), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + // give additional info on markers + switch (currmark) { + + ///////// + // SOP // + ///////// + case SOP_VAL: + { + // read packet number + if (m_file->Read(twobytes, 2) != 2) + break; + int packnum = STREAM_TO_UINT16(twobytes, 0); + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + wxString::Format(wxT("Pack. no. %d"), packnum), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + inside_sop = 1; + }; + break; + +#ifdef USE_JPWL + ///////// + // RED // + ///////// + case RED_VAL: + { + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char pred = onebyte[0]; + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + wxString address[] = { + wxT("Packet addressing"), + wxT("Byte-range addressing"), + wxT("Packet-range addressing"), + wxT("Reserved") + }; + + wxTreeItemId subcurrid = m_tree->AppendItem(currid, + address[(pred & 0xC0) >> 6], + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("%d bytes range"), (((pred & 0x02) >> 1) + 1) * 2), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid = m_tree->AppendItem(currid, + pred & 0x01 ? wxT("Errors/erasures in codestream") : wxT("Error free codestream"), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("Residual corruption level: %d"), (pred & 0x38) >> 3), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + } + break; + + ///////// + // ESD // + ///////// + case ESD_VAL: + { + unsigned short int cesd; + if (csiz < 257) { + if (m_file->Read(onebyte, 1) != 1) + break; + cesd = onebyte[0]; + } else { + if (m_file->Read(twobytes, 2) != 2) + break; + cesd = STREAM_TO_UINT16(twobytes, 0); + } + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char pesd = onebyte[0]; + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + wxTreeItemId subcurrid = m_tree->AppendItem(currid, + pesd & 0x01 ? wxT("Comp. average") : wxString::Format(wxT("Comp. no. %d"), cesd), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + wxString meth[] = { + wxT("Relative error sensitivity"), + wxT("MSE"), + wxT("MSE reduction"), + wxT("PSNR"), + wxT("PSNR increase"), + wxT("MAXERR (absolute peak error)"), + wxT("TSE (total squared error)"), + wxT("Reserved") + }; + + subcurrid = m_tree->AppendItem(currid, + meth[(pesd & 0x38) >> 3], + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + wxString address[] = { + wxT("Packet addressing"), + wxT("Byte-range addressing"), + wxT("Packet-range addressing"), + wxT("Reserved") + }; + + subcurrid = m_tree->AppendItem(currid, + address[(pesd & 0xC0) >> 6], + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("%d bytes/value, %d bytes range"), ((pesd & 0x04) >> 2) + 1, (((pesd & 0x02) >> 1) + 1) * 2), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + } + break; + + ///////// + // EPC // + ///////// + case EPC_VAL: + { + if (m_file->Read(twobytes, 2) != 2) + break; + unsigned short int pcrc = STREAM_TO_UINT16(twobytes, 0); + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int dl = STREAM_TO_UINT32(fourbytes, 0); + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char pepc = onebyte[0]; + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + wxTreeItemId subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("CRC-16 = 0x%x"), pcrc), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("Tot. length = %d"), dl), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("%s%s%s%s"), + pepc & 0x10 ? wxT("ESD, ") : wxT(""), + pepc & 0x20 ? wxT("RED, ") : wxT(""), + pepc & 0x40 ? wxT("EPB, ") : wxT(""), + pepc & 0x80 ? wxT("Info") : wxT("") + ), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + } + break; + + ///////// + // EPB // + ///////// + case EPB_VAL: + { + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char depb = onebyte[0]; + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int ldpepb = STREAM_TO_UINT32(fourbytes, 0); + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int pepb = STREAM_TO_UINT32(fourbytes, 0); + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + wxTreeItemId subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("No. %d, %slatest, %spacked"), + depb & 0x3F, + depb & 0x40 ? wxT("") : wxT("not "), + depb & 0x80 ? wxT("") : wxT("un")), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("%d bytes protected"), ldpepb), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (pepb == 0x00000000) + + subcurrid = m_tree->AppendItem(currid, + wxT("Predefined codes"), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + else if ((pepb >= 0x10000000) && (pepb <= 0x1FFFFFFF)) { + + wxString text = wxT("CRC code"); + if (pepb == 0x10000000) + text << wxT(", CCITT (X25) 16 bits"); + else if (pepb == 0x10000001) + text << wxT(", Ethernet 32 bits"); + else + text << wxT(", JPWL RA"); + subcurrid = m_tree->AppendItem(currid, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + } else if ((pepb >= 0x20000000) && (pepb <= 0x2FFFFFFF)) { + + wxString text; + subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("RS code, RS(%d, %d)"), + (pepb & 0x0000FF00) >> 8, + (pepb & 0x000000FF)), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + } else if ((pepb >= 0x30000000) && (pepb <= 0x3FFFFFFE)) + + subcurrid = m_tree->AppendItem(currid, + wxT("JPWL RA"), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + else if (pepb == 0xFFFFFFFF) + + subcurrid = m_tree->AppendItem(currid, + wxT("No method"), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + } + break; +#endif // USE_JPWL + +#ifdef USE_JPSEC + case SEC_VAL: + { + + } + break; +#endif // USE_JPSEC + + ///////// + // SIZ // + ///////// + case SIZ_VAL: + { + int c; + + if (m_file->Read(twobytes, 2) != 2) + break; + unsigned short int rsiz = STREAM_TO_UINT16(twobytes, 0); + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int xsiz = STREAM_TO_UINT32(fourbytes, 0); + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int ysiz = STREAM_TO_UINT32(fourbytes, 0); + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int xosiz = STREAM_TO_UINT32(fourbytes, 0); + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int yosiz = STREAM_TO_UINT32(fourbytes, 0); + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int xtsiz = STREAM_TO_UINT32(fourbytes, 0); + this->m_tree->m_childframe->m_twidth = xtsiz; + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int ytsiz = STREAM_TO_UINT32(fourbytes, 0); + this->m_tree->m_childframe->m_theight = ytsiz; + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int xtosiz = STREAM_TO_UINT32(fourbytes, 0); + this->m_tree->m_childframe->m_tx = xtosiz; + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int ytosiz = STREAM_TO_UINT32(fourbytes, 0); + this->m_tree->m_childframe->m_ty = ytosiz; + + if (m_file->Read(twobytes, 2) != 2) + break; + csiz = STREAM_TO_UINT16(twobytes, 0); + + bool equaldepth = true, equalsize = true; + unsigned char *ssiz = new unsigned char(csiz); + unsigned char *xrsiz = new unsigned char(csiz); + unsigned char *yrsiz = new unsigned char(csiz); + + for (c = 0; c < csiz; c++) { + + if (m_file->Read(&ssiz[c], 1) != 1) + break; + + if (c > 0) + equaldepth = equaldepth && (ssiz[c] == ssiz[c - 1]); + + if (m_file->Read(&xrsiz[c], 1) != 1) + break; + + if (m_file->Read(&yrsiz[c], 1) != 1) + break; + + if (c > 0) + equalsize = equalsize && (xrsiz[c] == xrsiz[c - 1]) && (yrsiz[c] == yrsiz[c - 1]) ; + + } + + if (equaldepth && equalsize) + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + wxString::Format(wxT("I: %dx%d (%d, %d), %d c., %d%s bpp"), + xsiz, ysiz, + xosiz, yosiz, + csiz, ((ssiz[0] & 0x7F) + 1), + (ssiz[0] & 0x80) ? wxT("s") : wxT("u")), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + else + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + wxString::Format(wxT("I: %dx%d (%d, %d), %d c."), + xsiz, ysiz, + xosiz, yosiz, + csiz), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + wxString::Format(wxT("T: %dx%d (%d, %d)"), + xtsiz, ytsiz, + xtosiz, ytosiz), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + image = m_tree->TreeCtrlIcon_Folder; + imageSel = image + 1; + + wxTreeItemId subcurrid4 = m_tree->AppendItem(currid, + wxT("Components"), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + for (c = 0; c < csiz; c++) { + + wxTreeItemId subcurrid5 = m_tree->AppendItem(subcurrid4, + wxString::Format(wxT("#%d: %dx%d, %d%s bpp"), + c, + xsiz/xrsiz[c], ysiz/yrsiz[c], + ((ssiz[c] & 0x7F) + 1), + (ssiz[c] & 0x80) ? wxT("s") : wxT("u")), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + } + + }; + break; + + ///////// + // SOT // + ///////// + case SOT_VAL: + { + if (m_file->Read(twobytes, 2) != 2) + break; + unsigned short int isot = STREAM_TO_UINT16(twobytes, 0); + + if (m_file->Read(fourbytes, 4) != 4) + break; + unsigned long int psot = STREAM_TO_UINT32(fourbytes, 0); + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char tpsot = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char tnsot = onebyte[0]; + + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + wxString::Format(wxT("tile %d, psot = %d, part %d of %d"), isot, psot, tpsot, tnsot), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + lastPsot = psot; + lastsotpos = offset; + inside_sod = 0; + }; + break; + + ///////// + // COC // + ///////// + case COC_VAL: + { + unsigned short int ccoc; + if (csiz < 257) { + if (m_file->Read(onebyte, 1) != 1) + break; + ccoc = onebyte[0]; + } else { + if (m_file->Read(twobytes, 2) != 2) + break; + ccoc = STREAM_TO_UINT16(twobytes, 0); + } + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char scoc = onebyte[0]; + + wxTreeItemId subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("Comp. no. %d"), ccoc), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + wxString text; + if (scoc & 0x01) + text << wxT("Partitioned entropy coder"); + else + text << wxT("Unpartitioned entropy coder"); + + subcurrid = m_tree->AppendItem(currid, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char decomplevs = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char cbswidth = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char cbsheight = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char cbstyle = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char transform = onebyte[0]; + + subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("%d levels (%d resolutions)"), decomplevs, decomplevs + 1), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (transform & 0x01) + text = wxT("5-3 reversible wavelet"); + else + text = wxT("9-7 irreversible wavelet"); + subcurrid = m_tree->AppendItem(currid, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("Code-blocks: %dx%d"), 1 << ((cbswidth & 0x0F) + 2), 1 << ((cbsheight & 0x0F) + 2)), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + image = m_tree->TreeCtrlIcon_Folder; + imageSel = image + 1; + + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + wxT("Coding styles"), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + if (cbstyle & 0x01) + text = wxT("Selective arithmetic coding bypass"); + else + text = wxT("No selective arithmetic coding bypass"); + wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (cbstyle & 0x02) + text = wxT("Reset context probabilities on coding pass boundaries"); + else + text = wxT("No reset of context probabilities on coding pass boundaries"); + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (cbstyle & 0x04) + text = wxT("Termination on each coding passs"); + else + text = wxT("No termination on each coding pass"); + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (cbstyle & 0x08) + text = wxT("Vertically stripe causal context"); + else + text = wxT("No vertically stripe causal context"); + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (cbstyle & 0x10) + text = wxT("Predictable termination"); + else + text = wxT("No predictable termination"); + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (cbstyle & 0x20) + text = wxT("Segmentation symbols are used"); + else + text = wxT("No segmentation symbols are used"); + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + } + break; + + ///////// + // COD // + ///////// + case COD_VAL: + { + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char scod = onebyte[0]; + + wxString text; + + if (scod & 0x01) + text << wxT("Partitioned entropy coder"); + else + text << wxT("Unpartitioned entropy coder"); + + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + text = wxT(""); + if (scod & 0x02) + text << wxT("Possible SOPs"); + else + text << wxT("No SOPs"); + + if (scod & 0x04) + text << wxT(", possible EPHs"); + else + text << wxT(", no EPHs"); + + subcurrid3 = m_tree->AppendItem(currid, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char progord = onebyte[0]; + + if (m_file->Read(twobytes, 2) != 2) + break; + unsigned short int numlayers = STREAM_TO_UINT16(twobytes, 0); + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char mctransform = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char decomplevs = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char cbswidth = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char cbsheight = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char cbstyle = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char transform = onebyte[0]; + + subcurrid3 = m_tree->AppendItem(currid, + wxString::Format(wxT("%d levels (%d resolutions)"), decomplevs, decomplevs + 1), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + text = wxT(""); + switch (progord) { + case (0): + text << wxT("LRCP"); + break; + case (1): + text << wxT("RLCP"); + break; + case (2): + text << wxT("LRCP"); + break; + case (3): + text << wxT("RPCL"); + break; + case (4): + text << wxT("CPRL"); + break; + default: + text << wxT("unknown progression"); + break; + } + text << wxString::Format(wxT(", %d layers"), numlayers); + if (transform & 0x01) + text << wxT(", 5-3 rev."); + else + text << wxT(", 9-7 irr."); + subcurrid3 = m_tree->AppendItem(currid, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid3 = m_tree->AppendItem(currid, + wxString::Format(wxT("Code-blocks: %dx%d"), 1 << ((cbswidth & 0x0F) + 2), 1 << ((cbsheight & 0x0F) + 2)), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + switch (mctransform) { + case (0): + { + text = wxT("No MCT"); + } + break; + case (1): + { + text = wxT("Reversible MCT on 0, 1, 2"); + } + break; + case (2): + { + text = wxT("Irreversible MCT on 0, 1, 2"); + } + break; + default: + { + text = wxT("Unknown"); + } + break; + }; + subcurrid3 = m_tree->AppendItem(currid, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + + image = m_tree->TreeCtrlIcon_Folder; + imageSel = image + 1; + + subcurrid3 = m_tree->AppendItem(currid, + wxT("Coding styles"), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + if (cbstyle & 0x01) + text = wxT("Selective arithmetic coding bypass"); + else + text = wxT("No selective arithmetic coding bypass"); + wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (cbstyle & 0x02) + text = wxT("Reset context probabilities on coding pass boundaries"); + else + text = wxT("No reset of context probabilities on coding pass boundaries"); + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (cbstyle & 0x04) + text = wxT("Termination on each coding passs"); + else + text = wxT("No termination on each coding pass"); + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (cbstyle & 0x08) + text = wxT("Vertically stripe causal context"); + else + text = wxT("No vertically stripe causal context"); + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (cbstyle & 0x10) + text = wxT("Predictable termination"); + else + text = wxT("No predictable termination"); + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (cbstyle & 0x20) + text = wxT("Segmentation symbols are used"); + else + text = wxT("No segmentation symbols are used"); + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + }; + break; + + ///////// + // QCC // + ///////// + case QCC_VAL: + { + unsigned short int cqcc; + if (csiz < 257) { + if (m_file->Read(onebyte, 1) != 1) + break; + cqcc = onebyte[0]; + } else { + if (m_file->Read(twobytes, 2) != 2) + break; + cqcc = STREAM_TO_UINT16(twobytes, 0); + } + + wxTreeItemId subcurrid = m_tree->AppendItem(currid, + wxString::Format(wxT("Comp. no. %d"), cqcc), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char sqcc = onebyte[0]; + + wxString text; + switch (sqcc & 0x1F) { + case (0): + text = wxT("No quantization"); + break; + case (1): + text = wxT("Scalar implicit"); + break; + case (2): + text = wxT("Scalar explicit"); + break; + default: + text = wxT("Unknown"); + break; + } + text << wxString::Format(wxT(", %d guard bits"), (sqcc & 0xE0) >> 5); + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + } + break; + + ///////// + // QCD // + ///////// + case QCD_VAL: + { + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char sqcd = onebyte[0]; + + wxString text; + switch (sqcd & 0x1F) { + case (0): + text = wxT("No quantization"); + break; + case (1): + text = wxT("Scalar implicit"); + break; + case (2): + text = wxT("Scalar explicit"); + break; + default: + text = wxT("Unknown"); + break; + } + text << wxString::Format(wxT(", %d guard bits"), (sqcd & 0xE0) >> 5); + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + }; + break; + + ///////// + // COM // + ///////// + case COM_VAL: + { + #define showlen 25 + char comment[showlen]; + wxString comments; + + if (m_file->Read(twobytes, 2) != 2) + break; + unsigned short int rcom = STREAM_TO_UINT16(twobytes, 0); + + wxString text; + if (rcom == 0) + text = wxT("Binary values"); + else if (rcom == 1) + text = wxT("ISO 8859-1 (latin-1) values"); + else if (rcom < 65535) + text = wxT("Reserved for registration"); + else + text = wxT("Reserved for extension"); + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (m_file->Read(comment, showlen) != showlen) + break; + comments = wxString::FromAscii(comment).Truncate(wxMin(showlen, currlen - 4)); + if ((currlen - 4) > showlen) + comments << wxT("..."); + subcurrid3 = m_tree->AppendItem(currid, + comments, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + }; + break; + + ///////// + // TLM // + ///////// + case TLM_VAL: + { + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char ztlm = onebyte[0]; + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char stlm = onebyte[0]; + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + wxString::Format(wxT("TLM #%d"), ztlm), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid3 = m_tree->AppendItem(currid, + wxString::Format(wxT("%d bits/index, %d bits/length"), + 8 * ((stlm & 0x30) >> 4), 16 + 16 * ((stlm & 0x40) >> 6)), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + int n, numparts; + + numparts = (currlen - 2) / ( ((stlm & 0x30) >> 4) + 2 + 2 * ((stlm & 0x40) >> 6)); + + image = m_tree->TreeCtrlIcon_Folder; + imageSel = image + 1; + + subcurrid3 = m_tree->AppendItem(currid, + wxT("Tile parts"), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + for (n = 0; n < numparts; n++) { + + unsigned short int ttlm; + unsigned long int ptlm; + + switch (((stlm & 0x30) >> 4)) { + + case 0: + ttlm = 0; + break; + + case 1: + if (m_file->Read(onebyte, 1) != 1) + break; + ttlm = onebyte[0]; + break; + + case 2: + if (m_file->Read(twobytes, 2) != 2) + break; + ttlm = STREAM_TO_UINT16(twobytes, 0); + break; + + } + + switch (((stlm & 0x40) >> 6)) { + + case 0: + if (m_file->Read(twobytes, 2) != 2) + break; + ptlm = STREAM_TO_UINT16(twobytes, 0); + break; + + case 1: + if (m_file->Read(fourbytes, 4) != 4) + break; + ptlm = STREAM_TO_UINT32(fourbytes, 0); + break; + + } + + wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3, + wxString::Format(wxT("Tile %d: %d bytes"), ttlm, ptlm), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + } + + } + break; + + ///////// + // POD // + ///////// + case POD_VAL: + { + int n, numchanges; + + if (csiz < 257) + numchanges = (currlen - 2) / 7; + else + numchanges = (currlen - 2) / 9; + + for (n = 0; n < numchanges; n++) { + + image = m_tree->TreeCtrlIcon_Folder; + imageSel = image + 1; + + wxTreeItemId subcurrid3 = m_tree->AppendItem(currid, + wxString::Format(wxT("Change #%d"), n), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char rspod = onebyte[0]; + + unsigned short int cspod; + if (csiz < 257) { + if (m_file->Read(onebyte, 1) != 1) + break; + cspod = onebyte[0]; + } else { + if (m_file->Read(twobytes, 2) != 2) + break; + cspod = STREAM_TO_UINT16(twobytes, 0); + } + + if (m_file->Read(twobytes, 2) != 2) + break; + unsigned short int lyepod = STREAM_TO_UINT16(twobytes, 0); + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char repod = onebyte[0]; + + unsigned short int cepod; + if (csiz < 257) { + if (m_file->Read(onebyte, 1) != 1) + break; + cepod = onebyte[0]; + } else { + if (m_file->Read(twobytes, 2) != 2) + break; + cepod = STREAM_TO_UINT16(twobytes, 0); + } + + if (m_file->Read(onebyte, 1) != 1) + break; + unsigned char ppod = onebyte[0]; + + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3, + wxString::Format(wxT("%d <= Resolution < %d"), rspod, repod), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid4 = m_tree->AppendItem(subcurrid3, + wxString::Format(wxT("%d <= Component < %d"), cspod, cepod), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + subcurrid4 = m_tree->AppendItem(subcurrid3, + wxString::Format(wxT("0 <= Layer < %d"), lyepod), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + wxString text = wxT(""); + switch (ppod) { + case (0): + text << wxT("LRCP"); + break; + case (1): + text << wxT("RLCP"); + break; + case (2): + text << wxT("LRCP"); + break; + case (3): + text << wxT("RPCL"); + break; + case (4): + text << wxT("CPRL"); + break; + default: + text << wxT("unknown progression"); + break; + } + subcurrid4 = m_tree->AppendItem(subcurrid3, + text, + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + } + + } + break; + + ///////// + // SOD // + ///////// + case SOD_VAL: + { + inside_sod = 1; + }; + break; + + default: + break; + + } + + // increment number of markers + if (nmarks++ >= maxmarks) { + WriteText(wxT("Maximum amount of markers exceeded")); + break; + } + + // advance position + OPJ_ADVANCE(currlen + 2); + } + + WriteText(wxT("Search finished")); +} diff --git a/contrib/menuetlibc/openjpeg/OPJViewer/source/wxjp2parser.cpp b/contrib/menuetlibc/openjpeg/OPJViewer/source/wxjp2parser.cpp new file mode 100644 index 0000000000..6e89390a1b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJViewer/source/wxjp2parser.cpp @@ -0,0 +1,1116 @@ +/* + * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#include "OPJViewer.h" + +/* defines */ +#define SHORT_DESCR_LEN 32 +#define LONG_DESCR_LEN 256 + +/* enumeration for file formats */ +#define J2FILENUM 4 +typedef enum { + + JP2_FILE, + J2K_FILE, + MJ2_FILE, + UNK_FILE + +} j2filetype; + +/* enumeration for the box types */ +#define j22boxNUM 23 +typedef enum { + + FILE_BOX, + JP_BOX, + FTYP_BOX, + JP2H_BOX, + IHDR_BOX, + COLR_BOX, + JP2C_BOX, + JP2I_BOX, + XML_BOX, + UUID_BOX, + UINF_BOX, + MOOV_BOX, + MVHD_BOX, + TRAK_BOX, + TKHD_BOX, + MDIA_BOX, + MDHD_BOX, + HDLR_BOX, + MINF_BOX, + VMHD_BOX, + STBL_BOX, + STSD_BOX, + STSZ_BOX, + MJP2_BOX, + MDAT_BOX, + ANY_BOX, + UNK_BOX + +} j22boxtype; + +/* the box structure itself */ +struct boxdef { + + char value[5]; /* hexadecimal value/string*/ + char name[SHORT_DESCR_LEN]; /* short description */ + char descr[LONG_DESCR_LEN]; /* long description */ + int sbox; /* is it a superbox? */ + int req[J2FILENUM]; /* mandatory box */ + j22boxtype ins; /* contained in box... */ + +}; + + +/* jp2 family box signatures */ +#define FILE_SIGN "" +#define JP_SIGN "jP\040\040" +#define FTYP_SIGN "ftyp" +#define JP2H_SIGN "jp2h" +#define IHDR_SIGN "ihdr" +#define COLR_SIGN "colr" +#define JP2C_SIGN "jp2c" +#define JP2I_SIGN "jp2i" +#define XML_SIGN "xml\040" +#define UUID_SIGN "uuid" +#define UINF_SIGN "uinf" +#define MOOV_SIGN "moov" +#define MVHD_SIGN "mvhd" +#define TRAK_SIGN "trak" +#define TKHD_SIGN "tkhd" +#define MDIA_SIGN "mdia" +#define MDHD_SIGN "mdhd" +#define HDLR_SIGN "hdlr" +#define MINF_SIGN "minf" +#define VMHD_SIGN "vmhd" +#define STBL_SIGN "stbl" +#define STSD_SIGN "stsd" +#define STSZ_SIGN "stsz" +#define MJP2_SIGN "mjp2" +#define MDAT_SIGN "mdat" +#define ANY_SIGN "" +#define UNK_SIGN "" + +/* the possible boxes */ +struct boxdef j22box[] = +{ +/* sign */ {FILE_SIGN, +/* short */ "placeholder for nothing", +/* long */ "Nothing to say", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {JP_SIGN, +/* short */ "JPEG 2000 Signature box", +/* long */ "This box uniquely identifies the file as being part of the JPEG 2000 family of files", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {FTYP_SIGN, +/* short */ "File Type box", +/* long */ "This box specifies file type, version and compatibility information, including specifying if this file " + "is a conforming JP2 file or if it can be read by a conforming JP2 reader", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {JP2H_SIGN, +/* short */ "JP2 Header box", +/* long */ "This box contains a series of boxes that contain header-type information about the file", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {IHDR_SIGN, +/* short */ "Image Header box", +/* long */ "This box specifies the size of the image and other related fields", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ JP2H_BOX}, + +/* sign */ {COLR_SIGN, +/* short */ "Colour Specification box", +/* long */ "This box specifies the colourspace of the image", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ JP2H_BOX}, + +/* sign */ {JP2C_SIGN, +/* short */ "Contiguous Codestream box", +/* long */ "This box contains the codestream as defined by Annex A", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {JP2I_SIGN, +/* short */ "Intellectual Property box", +/* long */ "This box contains intellectual property information about the image", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ FILE_BOX}, + +/* sign */ {XML_SIGN, +/* short */ "XML box", +/* long */ "This box provides a tool by which vendors can add XML formatted information to a JP2 file", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ FILE_BOX}, + +/* sign */ {UUID_SIGN, +/* short */ "UUID box", +/* long */ "This box provides a tool by which vendors can add additional information to a file " + "without risking conflict with other vendors", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ FILE_BOX}, + +/* sign */ {UINF_SIGN, +/* short */ "UUID Info box", +/* long */ "This box provides a tool by which a vendor may provide access to additional information associated with a UUID", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ FILE_BOX}, + +/* sign */ {MOOV_SIGN, +/* short */ "Movie box", +/* long */ "This box contains the media data. In video tracks, this box would contain JPEG2000 video frames", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {MVHD_SIGN, +/* short */ "Movie Header box", +/* long */ "This box defines overall information which is media-independent, and relevant to the entire presentation " + "considered as a whole", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ MOOV_BOX}, + +/* sign */ {TRAK_SIGN, +/* short */ "Track box", +/* long */ "This is a container box for a single track of a presentation. A presentation may consist of one or more tracks", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ MOOV_BOX}, + +/* sign */ {TKHD_SIGN, +/* short */ "Track Header box", +/* long */ "This box specifies the characteristics of a single track. Exactly one Track Header Box is contained in a track", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ TRAK_BOX}, + +/* sign */ {MDIA_SIGN, +/* short */ "Media box", +/* long */ "The media declaration container contains all the objects which declare information about the media data " + "within a track", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ TRAK_BOX}, + +/* sign */ {MDHD_SIGN, +/* short */ "Media Header box", +/* long */ "The media header declares overall information which is media-independent, and relevant to characteristics " + "of the media in a track", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ MDIA_BOX}, + +/* sign */ {HDLR_SIGN, +/* short */ "Handler Reference box", +/* long */ "This box within a Media Box declares the process by which the media-data in the track may be presented, " + "and thus, the nature of the media in a track", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ MDIA_BOX}, + +/* sign */ {MINF_SIGN, +/* short */ "Media Information box", +/* long */ "This box contains all the objects which declare characteristic information of the media in the track", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ MDIA_BOX}, + +/* sign */ {VMHD_SIGN, +/* short */ "Video Media Header box", +/* long */ "The video media header contains general presentation information, independent of the coding, for video media", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ MINF_BOX}, + +/* sign */ {STBL_SIGN, +/* short */ "Sample Table box", +/* long */ "The sample table contains all the time and data indexing of the media samples in a track", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ MINF_BOX}, + +/* sign */ {STSD_SIGN, +/* short */ "STSD Sample Description box", +/* long */ "The sample description table gives detailed information about the coding type used, and any initialization " + "information needed for that coding", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ MINF_BOX}, + +/* sign */ {STSZ_SIGN, +/* short */ "Sample Size box", +/* long */ "This box contains the sample count and a table giving the size of each sample", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ STBL_BOX}, + +/* sign */ {MJP2_SIGN, +/* short */ "MJP2 Sample Description box", +/* long */ "The MJP2 sample description table gives detailed information about the coding type used, and any initialization " + "information needed for that coding", +/* sbox */ 0, +/* req */ {1, 1, 1}, +/* ins */ MINF_BOX}, + +/* sign */ {MDAT_SIGN, +/* short */ "Media Data box", +/* long */ "The meta-data for a presentation is stored in the single Movie Box which occurs at the top-level of a file", +/* sbox */ 1, +/* req */ {1, 1, 1}, +/* ins */ FILE_BOX}, + +/* sign */ {ANY_SIGN, +/* short */ "Any box", +/* long */ "All the existing boxes", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ FILE_BOX}, + +/* sign */ {UNK_SIGN, +/* short */ "Unknown Type box", +/* long */ "The signature is not recognised to be that of an existing box", +/* sbox */ 0, +/* req */ {0, 0, 0}, +/* ins */ ANY_BOX} + +}; + + +/* macro functions */ +/* From little endian to big endian, 2 and 4 bytes */ +#define BYTE_SWAP2(X) ((X & 0x00FF) << 8) | ((X & 0xFF00) >> 8) +#define BYTE_SWAP4(X) ((X & 0x000000FF) << 24) | ((X & 0x0000FF00) << 8) | ((X & 0x00FF0000) >> 8) | ((X & 0xFF000000) >> 24) + +#ifdef __WXGTK__ +#define BYTE_SWAP8(X) ((X & 0x00000000000000FFULL) << 56) | ((X & 0x000000000000FF00ULL) << 40) | \ + ((X & 0x0000000000FF0000ULL) << 24) | ((X & 0x00000000FF000000ULL) << 8) | \ + ((X & 0x000000FF00000000ULL) >> 8) | ((X & 0x0000FF0000000000ULL) >> 24) | \ + ((X & 0x00FF000000000000ULL) >> 40) | ((X & 0xFF00000000000000ULL) >> 56) +#else +#define BYTE_SWAP8(X) ((X & 0x00000000000000FF) << 56) | ((X & 0x000000000000FF00) << 40) | \ + ((X & 0x0000000000FF0000) << 24) | ((X & 0x00000000FF000000) << 8) | \ + ((X & 0x000000FF00000000) >> 8) | ((X & 0x0000FF0000000000) >> 24) | \ + ((X & 0x00FF000000000000) >> 40) | ((X & 0xFF00000000000000) >> 56) +#endif + +/* From codestream to int values */ +#define STREAM_TO_UINT32(C, P) (((unsigned long int) (C)[(P) + 0] << 24) + \ + ((unsigned long int) (C)[(P) + 1] << 16) + \ + ((unsigned long int) (C)[(P) + 2] << 8) + \ + ((unsigned long int) (C)[(P) + 3] << 0)) + +#define STREAM_TO_UINT16(C, P) (((unsigned long int) (C)[(P) + 0] << 8) + \ + ((unsigned long int) (C)[(P) + 1] << 0)) + +#define OPJREAD_LONG(F,L,N) { \ + if (F->Read(fourbytes, 4) < 4) { \ + wxLogMessage(wxT("Problem reading " N " from the file (file ended?)")); \ + return -1; \ + }; \ + L = STREAM_TO_UINT32(fourbytes, 0); \ + } + +/* handling functions */ +#define ITEM_PER_ROW 10 + +//#define indprint if (0) printf("%.*s", 2 * level + 9, indent), printf +char indent[] = " " + " " + " " + " "; + +void indprint(wxString printout, int level) +{ + wxLogMessage(/*wxString::Format(wxT("%.*s"), 2 * level + 9, indent) + */printout); +} + +/* Box handler function */ +int OPJParseThread::box_handler_function(int boxtype, wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, + wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint) +{ + switch ((j22boxtype) boxtype) { + + + /* JPEG 2000 Signature box */ + case (JP_BOX): { + + unsigned long int checkdata = 0; + fileid->Read(&checkdata, sizeof(unsigned long int)); + checkdata = BYTE_SWAP4(checkdata); + + // add info + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Check data: %X -> %s"), checkdata, (checkdata == 0x0D0A870A) ? wxT("OK") : wxT("KO")), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + }; + break; + + + /* JPEG 2000 codestream box */ + case (JP2C_BOX): { + + // add info + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString(wxT("Codestream")), + m_tree->TreeCtrlIcon_Folder, m_tree->TreeCtrlIcon_Folder + 1, + new OPJMarkerData(wxT("INFO-CSTREAM"), m_tree->m_fname.GetFullPath(), filepoint, filelimit) + ); + + m_tree->SetItemHasChildren(currid); + + // parse the file + //ParseJ2KFile(fileid, filepoint, filelimit, currid); + + }; + break; + + + + + + /* File Type box */ + case (FTYP_BOX): { + + char BR[4], CL[4]; + unsigned long int MinV, numCL, i; + fileid->Read(BR, sizeof(char) * 4); + fileid->Read(&MinV, sizeof(unsigned long int)); + MinV = BYTE_SWAP4(MinV); + numCL = (filelimit - fileid->Tell()) / 4; + + // add info + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxT("Brand/Minor version: ") + + wxString::FromAscii(BR).Truncate(4) + + wxString::Format(wxT("/%d"), MinV), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Compatibility list")), + m_tree->TreeCtrlIcon_Folder, m_tree->TreeCtrlIcon_Folder + 1, + new OPJMarkerData(wxT("INFO")) + ); + + for (i = 0; i < numCL; i++) { + fileid->Read(CL, sizeof(char) * 4); + m_tree->AppendItem(currid, + wxString::FromAscii(CL).Truncate(4), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + }; + + }; + break; + + + + /* JP2 Header box */ + case (IHDR_BOX): { + + unsigned long int height, width; + unsigned short int nc; + unsigned char bpc, C, UnkC, IPR; + fileid->Read(&height, sizeof(unsigned long int)); + height = BYTE_SWAP4(height); + fileid->Read(&width, sizeof(unsigned long int)); + width = BYTE_SWAP4(width); + fileid->Read(&nc, sizeof(unsigned short int)); + nc = BYTE_SWAP2(nc); + fileid->Read(&bpc, sizeof(unsigned char)); + fileid->Read(&C, sizeof(unsigned char)); + fileid->Read(&UnkC, sizeof(unsigned char)); + fileid->Read(&IPR, sizeof(unsigned char)); + + // add info + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Dimensions: %d x %d x %d @ %d bpc"), width, height, nc, bpc + 1), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Compression type: %d"), C), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Colourspace unknown: %d"), UnkC), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Intellectual Property Rights: %d"), IPR), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + }; + break; + + + + /* Colour Specification box */ + case (COLR_BOX): { + + unsigned char METH, PREC, APPROX; + char methdescr[80], enumcsdescr[80]; + unsigned long int EnumCS; + fileid->Read(&METH, sizeof(unsigned char)); + switch (METH) { + case 1: + strcpy(methdescr, "Enumerated Colourspace"); + break; + case 2: + strcpy(methdescr, "Restricted ICC profile"); + break; + default: + strcpy(methdescr, "Unknown"); + break; + }; + fileid->Read(&PREC, sizeof(unsigned char)); + fileid->Read(&APPROX, sizeof(unsigned char)); + if (METH != 2) { + fileid->Read(&EnumCS, sizeof(unsigned long int)); + EnumCS = BYTE_SWAP4(EnumCS); + switch (EnumCS) { + case 16: + strcpy(enumcsdescr, "sRGB"); + break; + case 17: + strcpy(enumcsdescr, "greyscale"); + break; + case 18: + strcpy(enumcsdescr, "sYCC"); + break; + default: + strcpy(enumcsdescr, "Unknown"); + break; + }; + }; + + // add info + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Specification method: %d ("), METH) + + wxString::FromAscii(methdescr) + + wxT(")"), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Precedence: %d"), PREC), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Colourspace approximation: %d"), APPROX), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + if (METH != 2) + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Enumerated colourspace: %d ("), EnumCS) + + wxString::FromAscii(enumcsdescr) + + wxT(")"), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + if (METH != 1) + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("ICC profile: there is one")), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + + }; + break; + + + + + + + /* Movie Header Box */ + case (MVHD_BOX): { + + unsigned long int version, rate, matrix[9], next_track_ID; + unsigned short int volume; + fileid->Read(&version, sizeof(unsigned long int)); + version = BYTE_SWAP4(version); + if (version == 0) { + unsigned long int creation_time, modification_time, timescale, duration; + fileid->Read(&creation_time, sizeof(unsigned long int)); + creation_time = BYTE_SWAP4(creation_time); + fileid->Read(&modification_time, sizeof(unsigned long int)); + modification_time = BYTE_SWAP4(modification_time); + fileid->Read(×cale, sizeof(unsigned long int)); + timescale = BYTE_SWAP4(timescale); + fileid->Read(&duration, sizeof(unsigned long int)); + duration = BYTE_SWAP4(duration); + const long unix_time = creation_time - 2082844800L; + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Creation time: %u (%.24s)"), creation_time, ctime(&unix_time)), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + const long unix_time1 = modification_time - 2082844800L; + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Modification time: %u (%.24s)"), modification_time, ctime(&unix_time1)), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Timescale: %u (%.6fs)"), timescale, 1.0 / (float) timescale), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Duration: %u (%.3fs)"), duration, (float) duration / (float) timescale), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + } else { + int8byte creation_time, modification_time, duration; + unsigned long int timescale; + fileid->Read(&creation_time, sizeof(int8byte)); + creation_time = BYTE_SWAP8(creation_time); + fileid->Read(&modification_time, sizeof(int8byte)); + modification_time = BYTE_SWAP8(modification_time); + fileid->Read(×cale, sizeof(unsigned long int)); + timescale = BYTE_SWAP4(timescale); + fileid->Read(&duration, sizeof(int8byte)); + duration = BYTE_SWAP8(duration); + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Creation time: %u"), creation_time), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Modification time: %u"), modification_time), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Timescale: %u"), timescale), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Duration: %u"), duration), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + }; + fileid->Read(&rate, sizeof(unsigned long int)); + rate = BYTE_SWAP4(rate); + fileid->Read(&volume, sizeof(unsigned short int)); + volume = BYTE_SWAP2(volume); + fileid->Seek(6, wxFromCurrent); + fileid->Read(&matrix, sizeof(unsigned char) * 9); + fileid->Seek(4, wxFromCurrent); + fileid->Read(&next_track_ID, sizeof(unsigned long int)); + next_track_ID = BYTE_SWAP4(next_track_ID); + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Rate: %d (%d.%d)"), rate, rate >> 16, rate & 0x0000FFFF), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Volume: %d (%d.%d)"), volume, volume >> 8, volume & 0x00FF), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Next track ID: %d"), next_track_ID), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + }; + break; + + + /* Sample Description box */ + case (STSD_BOX): { + + unsigned long int version, entry_count; + fileid->Read(&version, sizeof(unsigned long int)); + version = BYTE_SWAP4(version); + fileid->Read(&entry_count, sizeof(unsigned long int)); + entry_count = BYTE_SWAP4(entry_count); + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Entry count: %d"), entry_count), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit) + ); + jpeg2000parse(fileid, filepoint + 8, filelimit, parentid, level + 1, scansign, scanpoint); + }; + break; + + + /* Sample Size box */ + case (STSZ_BOX): { + + unsigned long int version, sample_size, sample_count, entry_size; + + fileid->Read(&version, sizeof(unsigned long int)); + version = BYTE_SWAP4(version); + + fileid->Read(&sample_size, sizeof(unsigned long int)); + sample_size = BYTE_SWAP4(sample_size); + + if (sample_size == 0) { + fileid->Read(&sample_count, sizeof(unsigned long int)); + sample_count = BYTE_SWAP4(sample_count); + + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Sample count: %d"), sample_count), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit) + ); + + currid = m_tree->AppendItem(parentid, + wxT("Entries size (bytes)"), + m_tree->TreeCtrlIcon_Folder, m_tree->TreeCtrlIcon_Folder + 1, + new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit) + ); + + wxString text; + for (unsigned int s = 0; s < sample_count; s++) { + fileid->Read(&entry_size, sizeof(unsigned long int)); + entry_size = BYTE_SWAP4(entry_size); + + text << wxString::Format(wxT("%d, "), entry_size); + + if (((s % 10) == (ITEM_PER_ROW - 1)) || (s == (sample_count - 1))) { + m_tree->AppendItem(currid, + text, + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit) + ); + text = wxT(""); + } + + } + + } + + }; + break; + + + /* Video Media Header box */ + case (VMHD_BOX): { + + unsigned long int version; + unsigned short int graphicsmode, opcolor[3]; + char graphicsdescr[100]; + + fileid->Read(&version, sizeof(unsigned long int)); + version = BYTE_SWAP4(version); + + fileid->Read(&graphicsmode, sizeof(unsigned short int)); + graphicsmode = BYTE_SWAP2(graphicsmode); + switch (graphicsmode) { + case (0x00): + strcpy(graphicsdescr, "copy"); + break; + case (0x24): + strcpy(graphicsdescr, "transparent"); + break; + case (0x0100): + strcpy(graphicsdescr, "alpha"); + break; + case (0x0101): + strcpy(graphicsdescr, "whitealpha"); + break; + case (0x0102): + strcpy(graphicsdescr, "blackalpha"); + break; + default: + strcpy(graphicsdescr, "unknown"); + break; + }; + + fileid->Read(opcolor, 3 * sizeof(unsigned short int)); + opcolor[0] = BYTE_SWAP2(opcolor[0]); + opcolor[1] = BYTE_SWAP2(opcolor[1]); + opcolor[2] = BYTE_SWAP2(opcolor[2]); + + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Composition mode: %d (")) + + wxString::FromAscii(graphicsdescr) + + wxT(")"), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit) + ); + + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("OP color: %d %d %d"), opcolor[0], opcolor[1], opcolor[2]), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit) + ); + }; + break; + + + + /* MJP2 Sample Description box */ + case (MJP2_BOX): { + + unsigned short int height, width, depth; + unsigned long int horizresolution, vertresolution; + char compressor_name[32]; + fileid->Seek(24, wxFromCurrent); + fileid->Read(&width, sizeof(unsigned short int)); + width = BYTE_SWAP2(width); + fileid->Read(&height, sizeof(unsigned short int)); + height = BYTE_SWAP2(height); + fileid->Read(&horizresolution, sizeof(unsigned long int)); + horizresolution = BYTE_SWAP4(horizresolution); + fileid->Read(&vertresolution, sizeof(unsigned long int)); + vertresolution = BYTE_SWAP4(vertresolution); + fileid->Seek(6, wxFromCurrent); + fileid->Read(compressor_name, sizeof(char) * 32); + fileid->Read(&depth, sizeof(unsigned short int)); + depth = BYTE_SWAP2(depth); + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Dimensions: %d x %d @ %d bpp"), width, height, depth), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Resolution: %d.%d x %d.%d"), horizresolution >> 16, horizresolution & 0x0000FFFF, + vertresolution >> 16, vertresolution & 0x0000FFFF), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Compressor: %.32s"), compressor_name), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + jpeg2000parse(fileid, filepoint + 78, filelimit, parentid, level + 1, scansign, scanpoint); + + }; + break; + + /* Media Header box */ + case (MDHD_BOX): { + unsigned long int version; + unsigned short int language; + fileid->Read(&version, sizeof(unsigned long int)); + version = BYTE_SWAP4(version); + if (version == 0) { + unsigned long int creation_time, modification_time, timescale, duration; + fileid->Read(&creation_time, sizeof(unsigned long int)); + creation_time = BYTE_SWAP4(creation_time); + fileid->Read(&modification_time, sizeof(unsigned long int)); + modification_time = BYTE_SWAP4(modification_time); + fileid->Read(×cale, sizeof(unsigned long int)); + timescale = BYTE_SWAP4(timescale); + fileid->Read(&duration, sizeof(unsigned long int)); + duration = BYTE_SWAP4(duration); + const long unix_time = creation_time - 2082844800L; + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Creation time: %u (%.24s)"), creation_time, ctime(&unix_time)), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + const long unix_time1 = modification_time - 2082844800L; + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Modification time: %u (%.24s)"), modification_time, ctime(&unix_time1)), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Timescale: %u (%.6fs)"), timescale, 1.0 / (float) timescale), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Duration: %u (%.3fs)"), duration, (float) duration / (float) timescale), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + } else { + int8byte creation_time, modification_time, duration; + unsigned long int timescale; + fileid->Read(&creation_time, sizeof(int8byte)); + creation_time = BYTE_SWAP8(creation_time); + fileid->Read(&modification_time, sizeof(int8byte)); + modification_time = BYTE_SWAP8(modification_time); + fileid->Read(×cale, sizeof(unsigned long int)); + timescale = BYTE_SWAP4(timescale); + fileid->Read(&duration, sizeof(int8byte)); + duration = BYTE_SWAP8(duration); + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Creation time: %u"), creation_time), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Modification time: %u"), modification_time), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Timescale: %u"), timescale), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Duration: %u"), duration), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + } + fileid->Read(&language, sizeof(unsigned short int)); + + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Language: %d (%c%c%c)"), language & 0xEFFF, + 0x60 + (char) ((language >> 10) & 0x001F), 0x60 + (char) ((language >> 5) & 0x001F), 0x60 + (char) ((language >> 0) & 0x001F)), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + }; + break; + + /* Media Handler box */ + case (HDLR_BOX): { + unsigned long int version, predefined, temp[3]; + char handler[4], name[256]; + int namelen = wxMin(256, (filelimit - filepoint - 24)); + fileid->Read(&version, sizeof(unsigned long int)); + version = BYTE_SWAP4(version); + fileid->Read(&predefined, sizeof(unsigned long int)); + fileid->Read(handler, 4 * sizeof(char)); + fileid->Read(&temp, 3 * sizeof(unsigned long int)); + fileid->Read(name, namelen * sizeof(char)); + + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Handler: %.4s"), handler), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("Name: %.255s"), name), + m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1, + new OPJMarkerData(wxT("INFO")) + ); + + } + break; + + /* not yet implemented */ + default: + break; + + }; + + return (0); +} + + +void OPJParseThread::ParseJP2File(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, wxTreeItemId parentid) +{ + unsigned long int scanpoint; + + jpeg2000parse(fileid, filepoint, filelimit, parentid, 0, NULL, &scanpoint); +} + +/* the parsing function itself */ +/* + fileid = fid of the file to scan (you should open it by yourself) + filepoint = first byte where to start to scan from (usually 0) + filelimit = first byte where to stop to scan from (usually the file size) + level = set this to 0 + scansign = signature to scan for (NULL avoids search, returns " " if successful) + scanpoint = point where the scan signature lies +*/ +int OPJParseThread::jpeg2000parse(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, + wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint) +{ + unsigned long int LBox = 0x00000000; + //int LBox_read; + char TBox[5] = "\0\0\0\0"; + //int TBox_read; + int8byte XLBox = 0x0000000000000000; + //int XLBox_read; + unsigned long int box_length = 0; + int last_box = 0, box_num = 0; + int box_type = ANY_BOX; + unsigned char /*onebyte[1], twobytes[2],*/ fourbytes[4]; + + /* cycle all over the file */ + box_num = 0; + last_box = 0; + while (!last_box) { + + /* do not exceed file limit */ + if (filepoint >= filelimit) + return (0); + + /* seek on file */ + if (fileid->Seek(filepoint, wxFromStart) == wxInvalidOffset) + return (-1); + + /* read the mandatory LBox, 4 bytes */ + if (fileid->Read(fourbytes, 4) < 4) { + WriteText(wxT("Problem reading LBox from the file (file ended?)")); + return -1; + }; + LBox = STREAM_TO_UINT32(fourbytes, 0); + + /* read the mandatory TBox, 4 bytes */ + if (fileid->Read(TBox, 4) < 4) { + WriteText(wxT("Problem reading TBox from the file (file ended?)")); + return -1; + }; + + /* look if scansign is got */ + if ((scansign != NULL) && (memcmp(TBox, scansign, 4) == 0)) { + memcpy(scansign, " ", 4); + *scanpoint = filepoint; + + /* hack/exploit */ + // stop as soon as you find the codebox + return (0); + + }; + + /* determine the box type */ + for (box_type = JP_BOX; box_type < UNK_BOX; box_type++) + if (memcmp(TBox, j22box[box_type].value, 4) == 0) + break; + + /* read the optional XLBox, 8 bytes */ + if (LBox == 1) { + + if (fileid->Read(&XLBox, 8) < 8) { + WriteText(wxT("Problem reading XLBox from the file (file ended?)")); + return -1; + }; + box_length = (unsigned long int) BYTE_SWAP8(XLBox); + + } else if (LBox == 0x00000000) { + + /* last box in file */ + last_box = 1; + box_length = filelimit - filepoint; + + } else + + box_length = LBox; + + /* show box info */ + + // append the marker + int image, imageSel; + image = m_tree->TreeCtrlIcon_Folder; + imageSel = image + 1; + wxTreeItemId currid = m_tree->AppendItem(parentid, + wxString::Format(wxT("%03d: "), box_num) + + wxString::FromAscii(TBox) + + wxString::Format(wxT(" (0x%04X)"), + ((unsigned long int) TBox[3]) + ((unsigned long int) TBox[2] << 8) + + ((unsigned long int) TBox[1] << 16) + ((unsigned long int) TBox[0] << 24) + ), + image, imageSel, + new OPJMarkerData(wxT("BOX"), m_tree->m_fname.GetFullPath(), filepoint, filepoint + box_length) + ); + + // append some info + image = m_tree->TreeCtrlIcon_File; + imageSel = image + 1; + + // box name + wxTreeItemId subcurrid1 = m_tree->AppendItem(currid, + wxT("*** ") + wxString::FromAscii(j22box[box_type].name) + wxT(" ***"), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + m_tree->SetItemFont(subcurrid1, *wxITALIC_FONT); + + // position and length + wxTreeItemId subcurrid2 = m_tree->AppendItem(currid, + wxLongLong(filepoint).ToString() + wxT(" > ") + wxLongLong(filepoint + box_length - 1).ToString() + + wxT(", ") + wxString::Format(wxT("%d + 8 (%d)"), box_length, box_length + 8), + image, imageSel, + new OPJMarkerData(wxT("INFO")) + ); + + /* go deep in the box */ + box_handler_function((int) box_type, fileid, (LBox == 1) ? (filepoint + 16) : (filepoint + 8), filepoint + box_length, + currid, level, scansign, scanpoint); + + /* if it's a superbox go inside it */ + if (j22box[box_type].sbox) + jpeg2000parse(fileid, (LBox == 1) ? (filepoint + 16) : (filepoint + 8), filepoint + box_length, + currid, level + 1, scansign, scanpoint); + + /* increment box number and filepoint*/ + box_num++; + filepoint += box_length; + + }; + + /* all good */ + return (0); +} + diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/Makefile b/contrib/menuetlibc/openjpeg/OPJ_Validate/Makefile new file mode 100644 index 0000000000..c5434f08ad --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/Makefile @@ -0,0 +1,2 @@ +OPJ_Validate_Makee: OPJ_Validate.c md5.c + gcc -o OPJ_Validate OPJ_Validate.c md5.c -I. diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Param_File_v0_1.txt b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Param_File_v0_1.txt new file mode 100644 index 0000000000..881c92d92c --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Param_File_v0_1.txt @@ -0,0 +1,100 @@ +#Version 0.1 - February 9th 2007 +#Usage: OPJ_Validate OpenJPEG_command_line +#Example: OPJ_Validate image_to_j2k.exe -i original/Bretagne1.ppm -o original/Bretagne1.j2k -r 200, 50, 10 +#Attention: don't forget the *.exe extension for the executable file, and check the paths + +image_to_j2k.exe -i original/Bretagne1.ppm -o temp/Bretagne1_0.j2k -r 200,50,10 +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.ppm +image_to_j2k.exe -i original/Bretagne2.ppm -o temp/Bretagne2_0.j2k -c [128,128],[128,128],[128,128] -r 100,20,2 -t 640,480 -b 32,32 +j2k_to_image.exe -i original/Bretagne2.j2k -o temp/Bretagne2.ppm -r 2 +image_to_j2k.exe -i original/Cevennes1.bmp -o temp/Cevennes1.j2k -r 10 +j2k_to_image.exe -i original/Cevennes1.j2k -o temp/Cevennes1.bmp -l 2 +image_to_j2k.exe -i original/Cevennes2.ppm -o temp/Cevennes2.jp2 -r 50 +j2k_to_image.exe -i original/Cevennes2.jp2 -o temp/Cevennes2.ppm +image_to_j2k.exe -i original/Rome.bmp -o temp/Rome.jp2 -q 30,35,50 -p LRCP -n 3 +j2k_to_image.exe -i original/Rome.jp2 -o temp/Rome.ppm +image_to_j2k.exe -i original/Bretagne1.ppm -o temp/Bretagne1_1.j2k -q 30,35,40 -n 2 +image_to_j2k.exe -i original/Bretagne1.ppm -o temp/Bretagne1_2.j2k -q 30,35,40 -b 16,16 -c [101,101] +image_to_j2k.exe -i original/Bretagne2.ppm -o temp/Bretagne2_1.j2k -t 127,127 -p PCRL +image_to_j2k.exe -i original/X_4_2K_24_185_CBR_WB_000.tif -o temp/X_4_2K_24_185_CBR_WB_000.j2k -cinema2K 24 +image_to_j2k.exe -i original/X_5_2K_24_235_CBR_STEM24_000.tif -o temp/X_5_2K_24_235_CBR_STEM24_000.j2k -cinema2K 48 +image_to_j2k.exe -i original/X_6_2K_24_FULL_CBR_CIRCLE_000.tif -o temp/X_6_2K_24_FULL_CBR_CIRCLE_000.j2k -cinema2K 24 +#à remettre +#image_to_j2k.exe -i original/X_16_4K_24_185_CBR_WB_000.tif -o temp/X_16_4K_24_185_CBR_WB_000.j2k -cinema4K +j2k_to_image.exe -i original/A_4_2K_24_185_CBR_WB_000.j2k -o temp/A_4_2K_24_185_CBR_WB_000.tif +j2k_to_image.exe -i original/B_5_2K_24_235_CBR_STEM24_000.j2k -o temp/B_5_2K_24_235_CBR_STEM24_000.tif +j2k_to_image.exe -i original/C_6_2K_24_FULL_CBR_CIRCLE_000.j2k -o temp/C_6_2K_24_FULL_CBR_CIRCLE_000.tif +#à remettre +#j2k_to_image.exe -i original/C_18_4K_24_FULL_CBR_CIRCLE_000.j2k -o temp/C_18_4K_24_FULL_CBR_CIRCLE_000.tif +j2k_to_image.exe -i original/p0_01.j2k -o temp/p0_01.tif +j2k_to_image.exe -i original/p0_02.j2k -o temp/p0_02.tif +j2k_to_image.exe -i original/p0_03.j2k -o temp/p0_03.tif +j2k_to_image.exe -i original/p0_04.j2k -o temp/p0_04.tif +#à remettre +#j2k_to_image.exe -i original/p0_07.j2k -o temp/p0_07.tif +j2k_to_image.exe -i original/p0_08.j2k -o temp/p0_08.tif +j2k_to_image.exe -i original/p0_09.j2k -o temp/p0_09.tif +j2k_to_image.exe -i original/p0_10.j2k -o temp/p0_10.tif +j2k_to_image.exe -i original/p0_11.j2k -o temp/p0_11.tif +j2k_to_image.exe -i original/p0_12.j2k -o temp/p0_12.tif +j2k_to_image.exe -i original/p0_14.j2k -o temp/p0_14.tif +j2k_to_image.exe -i original/p0_15.j2k -o temp/p0_15.tif +j2k_to_image.exe -i original/p0_16.j2k -o temp/p0_16.tif +j2k_to_image.exe -i original/p1_01.j2k -o temp/p1_01.tif +j2k_to_image.exe -i original/p1_02.j2k -o temp/p1_02.tif +j2k_to_image.exe -i original/p1_04.j2k -o temp/p1_04.tif +j2k_to_image.exe -i original/p1_05.j2k -o temp/p1_05.tif +j2k_to_image.exe -i original/p1_06.j2k -o temp/p1_06.tif +image_to_j2k.exe -i original/c0p0_01.pgx -o temp/c0p0_01.j2k +image_to_j2k.exe -i original/c0p0_02.pgx -o temp/c0p0_02.j2k +image_to_j2k.exe -i original/c0p0_03r0.pgx -o temp/c0p0_03r0.j2k +image_to_j2k.exe -i original/c0p0_03r1.pgx -o temp/c0p0_03r1.j2k +image_to_j2k.exe -i original/c0p0_04.pgx -o temp/c00_p04.j2k +image_to_j2k.exe -i original/c0p0_05.pgx -o temp/c0p0_05.j2k +image_to_j2k.exe -i original/c0p0_06.pgx -o temp/c0p0_06.j2k +image_to_j2k.exe -i original/c0p0_07.pgx -o temp/c0p0_07.j2k +image_to_j2k.exe -i original/c0p0_08.pgx -o temp/c0p0_08.j2k +image_to_j2k.exe -i original/c0p0_09.pgx -o temp/c0p0_09.j2k +image_to_j2k.exe -i original/c0p0_10.pgx -o temp/c0p0_10.j2k +image_to_j2k.exe -i original/c0p0_11.pgx -o temp/c0p0_11.j2k +image_to_j2k.exe -i original/c0p0_12.pgx -o temp/c0p0_12.j2k +image_to_j2k.exe -i original/c0p0_13.pgx -o temp/c0p0_13.j2k +image_to_j2k.exe -i original/c0p0_14.pgx -o temp/c0p0_14.j2k +image_to_j2k.exe -i original/c0p0_15r0.pgx -o temp/c0p0_15r0.j2k +image_to_j2k.exe -i original/c0p0_15r1.pgx -o temp/c0p0_15r1.j2k +image_to_j2k.exe -i original/c0p0_16.pgx -o temp/c0p0_16.j2k +image_to_j2k.exe -i original/c0p1_04r0.pgx -o temp/c0p1_04r0.j2k +image_to_j2k.exe -i original/c0p1_05.pgx -o temp/c0p1_05.j2k +image_to_j2k.exe -i original/c1p0_01_0.pgx -o temp/c1p0_01_0.j2k +image_to_j2k.exe -i original/c1p0_02_0.pgx -o temp/c1p0_02_0.j2k +image_to_j2k.exe -i original/c1p0_03_0.pgx -o temp/c1p0_03_0.j2k +image_to_j2k.exe -i original/c1p0_04_0.pgx -o temp/c1p0_04_0.j2k +image_to_j2k.exe -i original/c1p0_05_0.pgx -o temp/c1p0_05_0.j2k +image_to_j2k.exe -i original/c1p0_06_0.pgx -o temp/c1p0_06_0.j2k +image_to_j2k.exe -i original/c1p0_07_0.pgx -o temp/c1p0_07_0.j2k +image_to_j2k.exe -i original/c1p0_08_0.pgx -o temp/c1p0_08_0.j2k +image_to_j2k.exe -i original/c1p0_09_0.pgx -o temp/c1p0_09_0.j2k +image_to_j2k.exe -i original/c1p0_10_0.pgx -o temp/c1p0_10_0.j2k +image_to_j2k.exe -i original/c1p0_11_0.pgx -o temp/c1p0_11_0.j2k +image_to_j2k.exe -i original/c1p0_12_0.pgx -o temp/c1p0_12_0.j2k +image_to_j2k.exe -i original/c1p0_13_0.pgx -o temp/c1p0_13_0.j2k +image_to_j2k.exe -i original/c1p0_14_0.pgx -o temp/c1p0_14_0.j2k +image_to_j2k.exe -i original/c1p0_15_0.pgx -o temp/c1p0_15_0.j2k +image_to_j2k.exe -i original/c1p0_16_0.pgx -o temp/c1p0_16_0.j2k +image_to_j2k.exe -i original/c1p1_02_0.pgx -o temp/c1p1_02_0.j2k +image_to_j2k.exe -i original/c1p1_05_0.pgx -o temp/c1p1_05_0.j2k +image_to_j2k.exe -i original/Bretagne2.ppm -o temp/Bretagne2_2.j2k -s 2,2 -SOP +image_to_j2k.exe -i original/Bretagne2.ppm -o temp/Bretagne2_3.j2k -EPH -M 38 +image_to_j2k.exe -i original/Bretagne2.ppm -o temp/Bretagne2_4.j2k -d 150,300 -r 800 +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.bmp +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.bmp -r 2 +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.tga +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.tga -r 2 +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.pnm +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.pnm -r 2 +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.ppm -r 2 +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.raw +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.raw -r 2 +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.tif +j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.tif -r 2 +j2k_to_image.exe -i original/p0_03.j2k -o p0_03.pgx diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.c b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.c new file mode 100644 index 0000000000..9bd1da5b41 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.c @@ -0,0 +1,244 @@ +/* +* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium +* Copyright (c) 2002-2007, Professor Benoit Macq +* Copyright (c) 2003-2007, Francois-Olivier Devaux +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. 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. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. +*/ + +#ifdef _WIN32 +#include +#endif /* _WIN32 */ +#include +#include +#include "md5.h" + +#define OPJ_Bin_Dir "OPJ_Binaries" + +int doprocess(char programme[4096],char command_line[4096]) { + +#ifdef _WIN32 + + int exit=STILL_ACTIVE; + STARTUPINFO siStartupInfo; + PROCESS_INFORMATION piProcessInfo; + + memset(&siStartupInfo, 0, sizeof(siStartupInfo)); + memset(&piProcessInfo, 0, sizeof(piProcessInfo)); + siStartupInfo.cb = sizeof(siStartupInfo); + + if(CreateProcess(programme, // Application name + command_line, // Application arguments + 0, + 0, + FALSE, + CREATE_DEFAULT_ERROR_MODE, + 0, + 0, // Working directory + &siStartupInfo, + &piProcessInfo) == FALSE) + return 1; + + exit=STILL_ACTIVE; + while(exit==STILL_ACTIVE) { + Sleep(1000); + GetExitCodeProcess(piProcessInfo.hProcess,&exit); + } + + return 0; + +#else /* !_WIN32 */ + printf("\n%s\n", command_line); + system(command_line); + return 0; + +#endif /* _WIN32 */ + +} + +char MD5_process(char *input_filename, char *md5_filename) { + MD5_CTX mdContext; + int bytes; + unsigned char data[1024]; + FILE *input_file, *md5_file; + + input_file = fopen(input_filename, "rb"); + if (!input_file) { + printf("Error opening file %s\n", input_filename); + return 1; + } + + md5_file = fopen(md5_filename, "wb"); + if (!md5_file) { + printf("Error opening file %s\n", md5_filename); + return 1; + } + + MD5Init (&mdContext); + while ((bytes = fread (data, 1, 1024, input_file)) != 0) + MD5Update (&mdContext, data, bytes); + MD5Final (&mdContext); + + fwrite(mdContext.digest,16,1,md5_file); + + fclose(input_file); + fclose(md5_file); + + return 0; +} + +char fcompare(char *input_filename, char *output_filename) { + FILE *input_file, *output_file; + unsigned char input_buffer[17], output_buffer[17]; + char comparison; + + input_file = fopen(input_filename, "rb"); + if (!input_file) { + printf("Error opening file %s\n", input_filename); + return -1; + } + + output_file = fopen(output_filename, "rb"); + if (!output_file) { + printf("Error opening file %s\n", output_filename); + return -1; + } + + fread(input_buffer,16,1,input_file); + fread(output_buffer,16,1,output_file); + fclose(input_file); + fclose(output_file); + input_buffer[16] = 0; + output_buffer[16] = 0; + + comparison = strcmp(input_buffer, output_buffer); + + if (comparison) + return 1; + return 0; +} + +int main(int argc, char* argv[]) { + FILE *param_file, *md5_file; + FILE *report_file; + char line[4096]; + char md5_filename[4096], tempmd5_filename[4096], temp[4096], report_filename[4096]; + char output_filename[4096]; + char input_cmdline[4096]; + char command_line[4096], exefile[4096]; + int task_counter = 0, word_counter; + char bin_dir[4096]; + unsigned int word_pointer; + char ch[4096]; + char comparison; + int num_failed = 0; + int num_inexistant = 0; + int num_passed = 0; + + if (argc != 3) { + printf("Error with command line. \nExpected: OPJ_Validate parameter_filename bin_directory\n Example: OPJ_Validate parameters_01.txt version1.1.a\n\n"); + return 1; + } + + param_file = fopen(argv[1],"rb"); + if (!param_file) { + printf("Error opening parameter file %s\n",argv[1]); + return 1; + } + + sprintf(bin_dir,"%s/%s",OPJ_Bin_Dir,argv[2]); + sprintf(tempmd5_filename,"temp/tempmd5.txt"); + sprintf(report_filename,"%s/report.txt",bin_dir); + report_file = fopen(report_filename, "wb"); + if (!report_file) { + printf("Unable to open report file %s", report_filename); + return 1; + } + + while (fgets(line, 4096, param_file) != NULL) { + + if (line[0] != '#' && line[0] != 0x0d) { // If not a comment line + sscanf(line, "%s", temp); + word_pointer = 0; + sprintf(input_cmdline,""); + sscanf(line+word_pointer,"%s",ch); + sprintf(exefile,"%s/%s",bin_dir,ch); + word_counter = 0; + while (sscanf(line+word_pointer,"%s",ch) > 0) { + if (word_counter == 4) + strcpy(output_filename, ch); + word_pointer += strlen(ch)+1; + sprintf(input_cmdline,"%s%s ",input_cmdline, ch); + word_counter++; + } + sprintf(md5_filename,"%s.md5",output_filename); + task_counter++; + sprintf(command_line,"%s/%s",bin_dir,input_cmdline); + printf("Task %d\nMD5 file: %s\nCommand line: \"%s\"\n",task_counter, md5_filename,command_line); + fprintf(report_file,"Task %d\n MD5 file: %s\n Command line: \"%s\"\n",task_counter, md5_filename,command_line); + + if (doprocess(exefile,command_line)) { + printf("Error executing: \"%s\" \n", command_line); + fprintf(report_file,"Task %d failed because command line is not valid.\n\n", task_counter); + } + else { + + // Check if MD5 reference exists + md5_file = fopen(md5_filename,"rb"); + if (md5_file) { + fclose(md5_file); + if (MD5_process(output_filename, tempmd5_filename)) + return 1; + + comparison = fcompare(tempmd5_filename, md5_filename); + if (comparison == -1) + return 1; + else if (comparison) { + printf("ERROR: %s and %s are different.\nThe codec seems to behave differently.\n\n", tempmd5_filename, md5_filename); + fprintf(report_file,"ERROR: %s and %s are different.\nThe codec seems to behave differently.\n\n", tempmd5_filename, md5_filename); + num_failed++; + } + else { + printf("%s and %s are the same.\nTask %d OK\n\n",tempmd5_filename, md5_filename, task_counter); + fprintf(report_file," %s and %s are the same.\nTask %d OK\n\n",tempmd5_filename, md5_filename, task_counter); + num_passed++; + } + remove(tempmd5_filename); + } + else { + if (MD5_process(output_filename, md5_filename)) + return 1; + printf("... MD5 of %s was inexistant. It has been created\n\n", output_filename); + fprintf(report_file,"MD5 of %s was inexistant. It has been created\n\n", output_filename); + num_inexistant++; + } + } + } + } + + printf("\nREPORT;\n%d tests num_passed\n%d tests num_failed\n%d MD5 were num_inexistant\n", num_passed, num_failed, num_inexistant); + fprintf(report_file,"\nREPORT;\n%d tests num_passed\n%d tests num_failed\n%d MD5 were num_inexistant\n", num_passed, num_failed, num_inexistant); + fclose(param_file); + fclose(report_file); + +} diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.dsp b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.dsp new file mode 100644 index 0000000000..74630891b5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.dsp @@ -0,0 +1,108 @@ +# Microsoft Developer Studio Project File - Name="OPJ_Validate" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=OPJ_Validate - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "OPJ_Validate.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "OPJ_Validate.mak" CFG="OPJ_Validate - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "OPJ_Validate - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "OPJ_Validate - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "OPJ_Validate - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x80c /d "NDEBUG" +# ADD RSC /l 0x80c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "OPJ_Validate - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x80c /d "_DEBUG" +# ADD RSC /l 0x80c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "OPJ_Validate - Win32 Release" +# Name "OPJ_Validate - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\md5.c +# End Source File +# Begin Source File + +SOURCE=.\OPJ_Validate.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\md5.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.dsw b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.dsw new file mode 100644 index 0000000000..05a3403854 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "OPJ_Validate"=".\OPJ_Validate.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Candidate_vs_Ref.bat b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Candidate_vs_Ref.bat new file mode 100644 index 0000000000..0fd61ad285 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Candidate_vs_Ref.bat @@ -0,0 +1,8 @@ +cd temp +erase *.ppm +erase *.j2k +erase *.bmp +erase *.tif +erase *.jp2 +cd .. +OPJ_Validate.exe OPJ_Param_File_v0_1.txt testv2 diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Candidate_vs_Ref.sh b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Candidate_vs_Ref.sh new file mode 100644 index 0000000000..edd3eaa460 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Candidate_vs_Ref.sh @@ -0,0 +1,16 @@ +#!/bin/bash +cd temp +erase *.ppm +erase *.j2k +erase *.bmp +erase *.tif +erase *.jp2 +cd .. + +echo +echo "Type the name of the directory (inside OPJ_Binaries) " +echo "containing your executables to compared with reference, followed by [ENTER] (example: rev101):" +read compdir + +./OPJ_Validate linux_OPJ_Param_File_v0_1.txt $compdir +echo diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Create_Ref.bat b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Create_Ref.bat new file mode 100644 index 0000000000..83332fc85b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Create_Ref.bat @@ -0,0 +1,4 @@ +cd temp +erase *.md5 +cd .. +OPJ_Validate.exe OPJ_Param_File_v0_1.txt rev490 diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Create_Ref.sh b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Create_Ref.sh new file mode 100644 index 0000000000..e44e053b02 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/OPJ_Validate_Create_Ref.sh @@ -0,0 +1,13 @@ +#!/bin/bash +#Create Reference images and hash + +echo +echo "Type the name of the directory (inside OPJ_Binaries) " +echo "containing your reference executables, followed by [ENTER] (example: rev100):" +read refdir +cd temp +rm *.md5 +cd .. +./OPJ_Validate linux_OPJ_Param_File_v0_1.txt $refdir +echo + diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/README.txt b/contrib/menuetlibc/openjpeg/OPJ_Validate/README.txt new file mode 100644 index 0000000000..364ef8e16f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/README.txt @@ -0,0 +1,46 @@ +Initialization +-------------- +Download the source images into the /original directory from http://www.openjpeg.org/OPJ_Validate_OriginalImages.7z + +Usage +----- +Usage: OPJ_Validate batch_text_file bin_directory +Example: OPJ_Validate OPJ_Param_File_v0_1.txt v1.1.a +where OPJ_Param_File_v0_1.txt is a file containing a list of compression and decompression parameters +and v1.1.a is a directory inside the directory OPJ_Binaries containing the openjpeg executables (j2k_to_image.exe and image_to_j2k.exe) + +Example with batch file: You consider revision 490 (/rev490) as stable, and would like to compare it a new version, revision 493 (rev493). + +Batch mode +---------- +1) Calculate the reference by running the "OPJ_Validate_Create_Ref rev490" file (.sh or .bat depending on your os) +2) Compare the candidate revision with ther reference by running the "OPJ_Validate_Candidate_vs_Ref rev493" file +3) The results of the comparison are given at the end of the processing. They are also available in the bin directory OPJ_Binaries/rev493/report.txt + +Manual mode +----------- +1) Put the j2k_to_image.exe and image_to_j2k.exe binaries of both revisions in the OPJ_Binaries directory (OPJ_Binaries/rev490 and OPJ_Binaries/rev493) +2) Start by initializing the validation with revision 490. + a) Modify OPJ_Validate_init.bat and set the last line to "OPJ_Validate.exe OPJ_Param_File_v0_1.txt rev490" + b) Execute OPJ_Validate_init.bat +3) Compare the reference files generated in the previous step with files generated with revision 493 + a) Modify OPJ_Validate_run.bat and set the last line to "OPJ_Validate.exe OPJ_Param_File_v0_1.txt rev493" + b) Execute OPJ_Validate_run.bat +4) Read the results in the binaries directory of revision 493 (OPJ_Binaries/rev493/report.txt) + Search for the word "ERROR:" in that file. + If this word is not present in the report, this means that both codecs of rev490 and rev493 gave the same results. + Otherwise, it means that for certain encoding/decoding parameters, the codecs behave differently. + + Example of error + Task 17 + MD5 file: temp/A_4_2K_24_185_CBR_WB_000.tif.md5 + Command line: "OPJ_Binaries/rev473/j2k_to_image.exe -i original/A_4_2K_24_185_CBR_WB_000.j2k -o temp/A_4_2K_24_185_CBR_WB_000.tif " + ERROR: temp/tempmd5.txt and temp/A_4_2K_24_185_CBR_WB_000.tif.md5 are different. + The codec seems to behave differently. + + This means that the rev490 and rev493 created two different versions of file A_4_2K_24_185_CBR_WB_000.tif with the command line given above. + An error might have been caused by switching to this new revision. + + Warning: Do not take the last line of the report.txt file into account ( Cool. All files passed the tests !) as it is a bug. Search for the word "ERROR:" to detect potential errors. +5) If no error is detected, you can commit the changes to the OpenJPEG repository + diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/linux_OPJ_Param_File_v0_1.txt b/contrib/menuetlibc/openjpeg/OPJ_Validate/linux_OPJ_Param_File_v0_1.txt new file mode 100644 index 0000000000..0dafe2c888 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/linux_OPJ_Param_File_v0_1.txt @@ -0,0 +1,89 @@ +#OPJ Parameter file +#Version 0.1 - February 9th 2007 +#Usage: OPJ_Validate OpenJPEG_command_line +#Example: OPJ_Validate image_to_j2k.exe -i original/Bretagne1.ppm -o original/Bretagne1.j2k -r 200, 50, 10 +#Attention: don't forget the *.exe extension for the executable file, and check the paths +# +image_to_j2k -i original/Bretagne1.ppm -o temp/Bretagne1_0.j2k -r 200,50,10 +j2k_to_image -i original/Bretagne1.j2k -o temp/Bretagne1.ppm +image_to_j2k -i original/Bretagne2.ppm -o temp/Bretagne2_0.j2k -c [128,128],[128,128],[128,128] -r 100,20,2 -t 640,480 -b 32,32 +j2k_to_image -i original/Bretagne2.j2k -o temp/Bretagne2.ppm -r 2 +image_to_j2k -i original/Cevennes1.bmp -o temp/Cevennes1.j2k -r 10 +j2k_to_image -i original/Cevennes1.j2k -o temp/Cevennes1.bmp -l 2 +image_to_j2k -i original/Cevennes2.ppm -o temp/Cevennes2.jp2 -r 50 +j2k_to_image -i original/Cevennes2.jp2 -o temp/Cevennes2.ppm +image_to_j2k -i original/Rome.bmp -o temp/Rome.jp2 -q 30,35,50 -p LRCP -n 3 +j2k_to_image -i original/Rome.jp2 -o temp/Rome.ppm +image_to_j2k -i original/Bretagne1.ppm -o temp/Bretagne1_1.j2k -q 30,35,40 -n 2 +image_to_j2k -i original/Bretagne1.ppm -o temp/Bretagne1_2.j2k -q 30,35,40 -b 16,16 -c [101,101] +image_to_j2k -i original/Bretagne2.ppm -o temp/Bretagne2_1.j2k -t 127,127 -p PCRL +image_to_j2k -i original/X_4_2K_24_185_CBR_WB_000.tif -o temp/X_4_2K_24_185_CBR_WB_000.j2k -cinema2K 24 +image_to_j2k -i original/X_5_2K_24_235_CBR_STEM24_000.tif -o temp/X_5_2K_24_235_CBR_STEM24_000.j2k -cinema2K 48 +image_to_j2k -i original/X_6_2K_24_FULL_CBR_CIRCLE_000.tif -o temp/X_6_2K_24_FULL_CBR_CIRCLE_000.j2k -cinema2K 24 +#à remettre +#image_to_j2k -i original/X_16_4K_24_185_CBR_WB_000.tif -o temp/X_16_4K_24_185_CBR_WB_000.j2k -cinema4K +j2k_to_image -i original/A_4_2K_24_185_CBR_WB_000.j2k -o temp/A_4_2K_24_185_CBR_WB_000.tif +j2k_to_image -i original/B_5_2K_24_235_CBR_STEM24_000.j2k -o temp/B_5_2K_24_235_CBR_STEM24_000.tif +j2k_to_image -i original/C_6_2K_24_FULL_CBR_CIRCLE_000.j2k -o temp/C_6_2K_24_FULL_CBR_CIRCLE_000.tif +#à remettre +#j2k_to_image -i original/C_18_4K_24_FULL_CBR_CIRCLE_000.j2k -o temp/C_18_4K_24_FULL_CBR_CIRCLE_000.tif +j2k_to_image -i original/p0_01.j2k -o temp/p0_01.tif +j2k_to_image -i original/p0_02.j2k -o temp/p0_02.tif +j2k_to_image -i original/p0_03.j2k -o temp/p0_03.tif +j2k_to_image -i original/p0_04.j2k -o temp/p0_04.tif +#a remettre +#j2k_to_image -i original/p0_07.j2k -o temp/p0_07.tif +j2k_to_image -i original/p0_08.j2k -o temp/p0_08.tif +j2k_to_image -i original/p0_09.j2k -o temp/p0_09.tif +j2k_to_image -i original/p0_10.j2k -o temp/p0_10.tif +j2k_to_image -i original/p0_11.j2k -o temp/p0_11.tif +j2k_to_image -i original/p0_12.j2k -o temp/p0_12.tif +j2k_to_image -i original/p0_14.j2k -o temp/p0_14.tif +j2k_to_image -i original/p0_15.j2k -o temp/p0_15.tif +j2k_to_image -i original/p0_16.j2k -o temp/p0_16.tif +j2k_to_image -i original/p1_01.j2k -o temp/p1_01.tif +j2k_to_image -i original/p1_02.j2k -o temp/p1_02.tif +j2k_to_image -i original/p1_04.j2k -o temp/p1_04.tif +j2k_to_image -i original/p1_05.j2k -o temp/p1_05.tif +j2k_to_image -i original/p1_06.j2k -o temp/p1_06.tif +image_to_j2k -i original/c0p0_01.pgx -o temp/c0p0_01.j2k +image_to_j2k -i original/c0p0_02.pgx -o temp/c0p0_02.j2k +image_to_j2k -i original/c0p0_03r0.pgx -o temp/c0p0_03r0.j2k +image_to_j2k -i original/c0p0_03r1.pgx -o temp/c0p0_03r1.j2k +image_to_j2k -i original/c0p0_04.pgx -o temp/c00_p04.j2k +image_to_j2k -i original/c0p0_05.pgx -o temp/c0p0_05.j2k +image_to_j2k -i original/c0p0_06.pgx -o temp/c0p0_06.j2k +image_to_j2k -i original/c0p0_07.pgx -o temp/c0p0_07.j2k +image_to_j2k -i original/c0p0_08.pgx -o temp/c0p0_08.j2k +image_to_j2k -i original/c0p0_09.pgx -o temp/c0p0_09.j2k +image_to_j2k -i original/c0p0_10.pgx -o temp/c0p0_10.j2k +image_to_j2k -i original/c0p0_11.pgx -o temp/c0p0_11.j2k +image_to_j2k -i original/c0p0_12.pgx -o temp/c0p0_12.j2k +image_to_j2k -i original/c0p0_13.pgx -o temp/c0p0_13.j2k +image_to_j2k -i original/c0p0_14.pgx -o temp/c0p0_14.j2k +image_to_j2k -i original/c0p0_15r0.pgx -o temp/c0p0_15r0.j2k +image_to_j2k -i original/c0p0_15r1.pgx -o temp/c0p0_15r1.j2k +image_to_j2k -i original/c0p0_16.pgx -o temp/c0p0_16.j2k +image_to_j2k -i original/c0p1_04r0.pgx -o temp/c0p1_04r0.j2k +image_to_j2k -i original/c0p1_05.pgx -o temp/c0p1_05.j2k +image_to_j2k -i original/c1p0_01_0.pgx -o temp/c1p0_01_0.j2k +image_to_j2k -i original/c1p0_02_0.pgx -o temp/c1p0_02_0.j2k +image_to_j2k -i original/c1p0_03_0.pgx -o temp/c1p0_03_0.j2k +image_to_j2k -i original/c1p0_04_0.pgx -o temp/c1p0_04_0.j2k +image_to_j2k -i original/c1p0_05_0.pgx -o temp/c1p0_05_0.j2k +image_to_j2k -i original/c1p0_06_0.pgx -o temp/c1p0_06_0.j2k +image_to_j2k -i original/c1p0_07_0.pgx -o temp/c1p0_07_0.j2k +image_to_j2k -i original/c1p0_08_0.pgx -o temp/c1p0_08_0.j2k +image_to_j2k -i original/c1p0_09_0.pgx -o temp/c1p0_09_0.j2k +image_to_j2k -i original/c1p0_10_0.pgx -o temp/c1p0_10_0.j2k +image_to_j2k -i original/c1p0_11_0.pgx -o temp/c1p0_11_0.j2k +image_to_j2k -i original/c1p0_12_0.pgx -o temp/c1p0_12_0.j2k +image_to_j2k -i original/c1p0_13_0.pgx -o temp/c1p0_13_0.j2k +image_to_j2k -i original/c1p0_14_0.pgx -o temp/c1p0_14_0.j2k +image_to_j2k -i original/c1p0_15_0.pgx -o temp/c1p0_15_0.j2k +image_to_j2k -i original/c1p0_16_0.pgx -o temp/c1p0_16_0.j2k +image_to_j2k -i original/c1p1_02_0.pgx -o temp/c1p1_02_0.j2k +image_to_j2k -i original/c1p1_05_0.pgx -o temp/c1p1_05_0.j2k +image_to_j2k -i original/Bretagne2.ppm -o temp/Bretagne2_2.j2k -s 2,2 -SOP +image_to_j2k -i original/Bretagne2.ppm -o temp/Bretagne2_3.j2k -EPH -M 38 +image_to_j2k -i original/Bretagne2.ppm -o temp/Bretagne2_4.j2k -d 150,300 -r 800 diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/md5.c b/contrib/menuetlibc/openjpeg/OPJ_Validate/md5.c new file mode 100644 index 0000000000..735a27cbb3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/md5.c @@ -0,0 +1,276 @@ +/* + ********************************************************************** + ** md5.c ** + ** RSA Data Security, Inc. MD5 Message Digest Algorithm ** + ** Created: 2/17/90 RLR ** + ** Revised: 1/91 SRD,AJ,BSK,JT Reference C Version ** + ********************************************************************** + */ + +/* + ********************************************************************** + ** Copyright (C) 1990, RSA Data Security, Inc. 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 the following line if the md5.h header file is separate -- */ +#include "md5.h" + +/* forward declaration */ +static void Transform (); + +static unsigned char PADDING[64] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +/* F, G and H are basic MD5 functions: selection, majority, parity */ +#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)))) + +/* 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) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define GG(a, b, c, d, x, s, ac) \ + {(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define HH(a, b, c, d, x, s, ac) \ + {(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define II(a, b, c, d, x, s, ac) \ + {(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } + +void MD5Init (mdContext) +MD5_CTX *mdContext; +{ + mdContext->i[0] = mdContext->i[1] = (UINT4)0; + + /* Load magic initialization constants. + */ + mdContext->buf[0] = (UINT4)0x67452301; + mdContext->buf[1] = (UINT4)0xefcdab89; + mdContext->buf[2] = (UINT4)0x98badcfe; + mdContext->buf[3] = (UINT4)0x10325476; +} + +void MD5Update (mdContext, inBuf, inLen) +MD5_CTX *mdContext; +unsigned char *inBuf; +unsigned int inLen; +{ + UINT4 in[16]; + int mdi; + unsigned int i, ii; + + /* compute number of bytes mod 64 */ + mdi = (int)((mdContext->i[0] >> 3) & 0x3F); + + /* update number of bits */ + if ((mdContext->i[0] + ((UINT4)inLen << 3)) < mdContext->i[0]) + mdContext->i[1]++; + mdContext->i[0] += ((UINT4)inLen << 3); + mdContext->i[1] += ((UINT4)inLen >> 29); + + while (inLen--) { + /* add new character to buffer, increment mdi */ + mdContext->in[mdi++] = *inBuf++; + + /* transform if necessary */ + if (mdi == 0x40) { + for (i = 0, ii = 0; i < 16; i++, ii += 4) + in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | + (((UINT4)mdContext->in[ii+2]) << 16) | + (((UINT4)mdContext->in[ii+1]) << 8) | + ((UINT4)mdContext->in[ii]); + Transform (mdContext->buf, in); + mdi = 0; + } + } +} + +void MD5Final (mdContext) +MD5_CTX *mdContext; +{ + UINT4 in[16]; + int mdi; + unsigned int i, ii; + unsigned int padLen; + + /* save number of bits */ + in[14] = mdContext->i[0]; + in[15] = mdContext->i[1]; + + /* compute number of bytes mod 64 */ + mdi = (int)((mdContext->i[0] >> 3) & 0x3F); + + /* pad out to 56 mod 64 */ + padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi); + MD5Update (mdContext, PADDING, padLen); + + /* append length in bits and transform */ + for (i = 0, ii = 0; i < 14; i++, ii += 4) + in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | + (((UINT4)mdContext->in[ii+2]) << 16) | + (((UINT4)mdContext->in[ii+1]) << 8) | + ((UINT4)mdContext->in[ii]); + Transform (mdContext->buf, in); + + /* store buffer in digest */ + for (i = 0, ii = 0; i < 4; i++, ii += 4) { + mdContext->digest[ii] = (unsigned char)(mdContext->buf[i] & 0xFF); + mdContext->digest[ii+1] = + (unsigned char)((mdContext->buf[i] >> 8) & 0xFF); + mdContext->digest[ii+2] = + (unsigned char)((mdContext->buf[i] >> 16) & 0xFF); + mdContext->digest[ii+3] = + (unsigned char)((mdContext->buf[i] >> 24) & 0xFF); + } +} + +/* Basic MD5 step. Transform buf based on in. + */ +static void Transform (buf, in) +UINT4 *buf; +UINT4 *in; +{ + UINT4 a = buf[0], b = buf[1], c = buf[2], d = buf[3]; + + /* Round 1 */ +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 + FF ( a, b, c, d, in[ 0], S11, 3614090360); /* 1 */ + FF ( d, a, b, c, in[ 1], S12, 3905402710); /* 2 */ + FF ( c, d, a, b, in[ 2], S13, 606105819); /* 3 */ + FF ( b, c, d, a, in[ 3], S14, 3250441966); /* 4 */ + FF ( a, b, c, d, in[ 4], S11, 4118548399); /* 5 */ + FF ( d, a, b, c, in[ 5], S12, 1200080426); /* 6 */ + FF ( c, d, a, b, in[ 6], S13, 2821735955); /* 7 */ + FF ( b, c, d, a, in[ 7], S14, 4249261313); /* 8 */ + FF ( a, b, c, d, in[ 8], S11, 1770035416); /* 9 */ + FF ( d, a, b, c, in[ 9], S12, 2336552879); /* 10 */ + FF ( c, d, a, b, in[10], S13, 4294925233); /* 11 */ + FF ( b, c, d, a, in[11], S14, 2304563134); /* 12 */ + FF ( a, b, c, d, in[12], S11, 1804603682); /* 13 */ + FF ( d, a, b, c, in[13], S12, 4254626195); /* 14 */ + FF ( c, d, a, b, in[14], S13, 2792965006); /* 15 */ + FF ( b, c, d, a, in[15], S14, 1236535329); /* 16 */ + + /* Round 2 */ +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 + GG ( a, b, c, d, in[ 1], S21, 4129170786); /* 17 */ + GG ( d, a, b, c, in[ 6], S22, 3225465664); /* 18 */ + GG ( c, d, a, b, in[11], S23, 643717713); /* 19 */ + GG ( b, c, d, a, in[ 0], S24, 3921069994); /* 20 */ + GG ( a, b, c, d, in[ 5], S21, 3593408605); /* 21 */ + GG ( d, a, b, c, in[10], S22, 38016083); /* 22 */ + GG ( c, d, a, b, in[15], S23, 3634488961); /* 23 */ + GG ( b, c, d, a, in[ 4], S24, 3889429448); /* 24 */ + GG ( a, b, c, d, in[ 9], S21, 568446438); /* 25 */ + GG ( d, a, b, c, in[14], S22, 3275163606); /* 26 */ + GG ( c, d, a, b, in[ 3], S23, 4107603335); /* 27 */ + GG ( b, c, d, a, in[ 8], S24, 1163531501); /* 28 */ + GG ( a, b, c, d, in[13], S21, 2850285829); /* 29 */ + GG ( d, a, b, c, in[ 2], S22, 4243563512); /* 30 */ + GG ( c, d, a, b, in[ 7], S23, 1735328473); /* 31 */ + GG ( b, c, d, a, in[12], S24, 2368359562); /* 32 */ + + /* Round 3 */ +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 + HH ( a, b, c, d, in[ 5], S31, 4294588738); /* 33 */ + HH ( d, a, b, c, in[ 8], S32, 2272392833); /* 34 */ + HH ( c, d, a, b, in[11], S33, 1839030562); /* 35 */ + HH ( b, c, d, a, in[14], S34, 4259657740); /* 36 */ + HH ( a, b, c, d, in[ 1], S31, 2763975236); /* 37 */ + HH ( d, a, b, c, in[ 4], S32, 1272893353); /* 38 */ + HH ( c, d, a, b, in[ 7], S33, 4139469664); /* 39 */ + HH ( b, c, d, a, in[10], S34, 3200236656); /* 40 */ + HH ( a, b, c, d, in[13], S31, 681279174); /* 41 */ + HH ( d, a, b, c, in[ 0], S32, 3936430074); /* 42 */ + HH ( c, d, a, b, in[ 3], S33, 3572445317); /* 43 */ + HH ( b, c, d, a, in[ 6], S34, 76029189); /* 44 */ + HH ( a, b, c, d, in[ 9], S31, 3654602809); /* 45 */ + HH ( d, a, b, c, in[12], S32, 3873151461); /* 46 */ + HH ( c, d, a, b, in[15], S33, 530742520); /* 47 */ + HH ( b, c, d, a, in[ 2], S34, 3299628645); /* 48 */ + + /* Round 4 */ +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + II ( a, b, c, d, in[ 0], S41, 4096336452); /* 49 */ + II ( d, a, b, c, in[ 7], S42, 1126891415); /* 50 */ + II ( c, d, a, b, in[14], S43, 2878612391); /* 51 */ + II ( b, c, d, a, in[ 5], S44, 4237533241); /* 52 */ + II ( a, b, c, d, in[12], S41, 1700485571); /* 53 */ + II ( d, a, b, c, in[ 3], S42, 2399980690); /* 54 */ + II ( c, d, a, b, in[10], S43, 4293915773); /* 55 */ + II ( b, c, d, a, in[ 1], S44, 2240044497); /* 56 */ + II ( a, b, c, d, in[ 8], S41, 1873313359); /* 57 */ + II ( d, a, b, c, in[15], S42, 4264355552); /* 58 */ + II ( c, d, a, b, in[ 6], S43, 2734768916); /* 59 */ + II ( b, c, d, a, in[13], S44, 1309151649); /* 60 */ + II ( a, b, c, d, in[ 4], S41, 4149444226); /* 61 */ + II ( d, a, b, c, in[11], S42, 3174756917); /* 62 */ + II ( c, d, a, b, in[ 2], S43, 718787259); /* 63 */ + II ( b, c, d, a, in[ 9], S44, 3951481745); /* 64 */ + + buf[0] += a; + buf[1] += b; + buf[2] += c; + buf[3] += d; +} + +/* + ********************************************************************** + ** End of md5.c ** + ******************************* (cut) ******************************** + */ diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/md5.h b/contrib/menuetlibc/openjpeg/OPJ_Validate/md5.h new file mode 100644 index 0000000000..6fb35cfff0 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/md5.h @@ -0,0 +1,59 @@ +/* + ********************************************************************** + ** md5.h -- Header file for implementation of MD5 ** + ** RSA Data Security, Inc. MD5 Message Digest Algorithm ** + ** Created: 2/17/90 RLR ** + ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** + ** Revised (for MD5): RLR 4/27/91 ** + ** -- G modified to have y&~z instead of y&z ** + ** -- FF, GG, HH modified to add in last register done ** + ** -- Access pattern: round 2 works mod 5, round 3 works mod 3 ** + ** -- distinct additive constant for each step ** + ** -- round 4 added, working mod 7 ** + ********************************************************************** + */ + +/* + ********************************************************************** + ** Copyright (C) 1990, RSA Data Security, Inc. 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. ** + ********************************************************************** + */ + +/* typedef a 32 bit type */ +typedef unsigned long int UINT4; + +/* Data structure for MD5 (Message Digest) computation */ +typedef struct { + UINT4 i[2]; /* number of _bits_ handled mod 2^64 */ + UINT4 buf[4]; /* scratch buffer */ + unsigned char in[64]; /* input buffer */ + unsigned char digest[16]; /* actual digest after MD5Final call */ +} MD5_CTX; + +void MD5Init (); +void MD5Update (); +void MD5Final (); + +/* + ********************************************************************** + ** End of md5.h ** + ******************************* (cut) ******************************** + */ diff --git a/contrib/menuetlibc/openjpeg/OPJ_Validate/original/README.txt b/contrib/menuetlibc/openjpeg/OPJ_Validate/original/README.txt new file mode 100644 index 0000000000..d78d1bde9f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OPJ_Validate/original/README.txt @@ -0,0 +1 @@ +Download the source images into this directory from http://www.openjpeg.org/OPJ_Validate_OriginalImages.7z diff --git a/contrib/menuetlibc/openjpeg/OpenJPEG.rc b/contrib/menuetlibc/openjpeg/OpenJPEG.rc new file mode 100644 index 0000000000..4711c57572 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/OpenJPEG.rc @@ -0,0 +1,109 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// French (France) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA) +#ifdef _WIN32 +LANGUAGE LANG_FRENCH, SUBLANG_FRENCH +#pragma code_page(1252) +#endif //_WIN32 + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,1,0,0 + PRODUCTVERSION 1,1,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "Comments", "The OpenJPEG library is an open-source JPEG 2000 codec. \0" + VALUE "CompanyName", "OpenJPEG\0" + VALUE "FileDescription", "OpenJPEG\0" + VALUE "FileVersion", "1, 1, 0, 0\0" + VALUE "InternalName", "OpenJPEG\0" + VALUE "LegalCopyright", "Copyright © 2002-2007, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium\0" + VALUE "LegalTrademarks", "See http://www.openjpeg.org for details\0" + VALUE "OriginalFilename", "OpenJPEG.dll\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "OpenJPEG\0" + VALUE "ProductVersion", "1, 1, 0, 0\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END + +#endif // !_MAC + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // French (France) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/contrib/menuetlibc/openjpeg/README b/contrib/menuetlibc/openjpeg/README new file mode 100644 index 0000000000..031cf3d841 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/README @@ -0,0 +1 @@ +see INSTALL for installation procedures. \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/README.msvc b/contrib/menuetlibc/openjpeg/README.msvc new file mode 100644 index 0000000000..fc9ea8943a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/README.msvc @@ -0,0 +1,40 @@ +How to compile the library under MS VC++ 6.0 +-------------------------------------------- + +The library comes in two versions : +- a static library that can be linked against any C/C++ program +- a Dynamic Link Library (Windows DLL) that can be used in any C/C++ program and in most interpreted languages (e.g. VB, C#, ...). + +In order to compile the library version *or* the DLL version, you will have to : + +1) Open the MSVC workspace named LibOpenJPEG.dsw +2) Set the choosen target as the active project, that means : + a) Go to the Menu 'Build -> Set Active Configuration' + b) Choose one of the following configuration : + - DllOpenJPEG - Win32 Release => creates a DLL in release mode named OpenJPEG.dll + - DllOpenJPEG - Win32 Debug => creates a DLL in debug mode named OpenJPEGd.dll + - LibOpenJPEG - Win32 Release => creates a static library in release mode named LibOpenJPEG.lib + - LibOpenJPEG - Win32 Debug => creates a static library in debug mode named LibOpenJPEGd.lib +3) Build the project : Menu -> Build -> Rebuild All + +The build process will create a directory named 'dist' that will contain all you need in order to use the library. + +Simple codec compilation +------------------------ + +Once you've built the library, you might want to test it with a basic codec. To do this, go to the codec directory and use one of the following projects to build an encoder and decoder respectively: +- image_to_j2k.dsw +- j2k_to_image.dsw + +IMPORTANT NOTE : +---------------- + +The encoder and decoder samples are configured to use the static version of the library. A link to the LibOpenJPEG static project is included in these projects so that you can build both a codec and the library in a single pass. + +However, you MUST NOTE that in order to use LibOpenJPEG as a static library in your program, you NEED to add the following compiler directive to your project : OPJ_STATIC +Look at the menu 'Project -> Settings -> C/C++ tab -> preprocessor definition' to see how this is configured. +When using OpenJPEG as a DLL, this compiler directive MUST NOT be used. + + + + diff --git a/contrib/menuetlibc/openjpeg/aclocal.m4 b/contrib/menuetlibc/openjpeg/aclocal.m4 new file mode 100644 index 0000000000..62a80cffe7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/aclocal.m4 @@ -0,0 +1,8984 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_XSI_SHELLFNS + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`print -r -- -n 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +void fnord () __attribute__((visibility("default"))); +#endif + +void fnord () { int i=42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE(int foo(void) {}, + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ) + LDFLAGS="$save_LDFLAGS" + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. +m4_defun([_LT_PROG_XSI_SHELLFNS], +[case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $[*] )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} + +dnl func_dirname_and_basename +dnl A portable version of this function is already defined in general.m4sh +dnl so there is no need for it here. + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[[^=]]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[[^.]]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$[@]"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]+=\$[2]" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]=\$$[1]\$[2]" +} + +_LT_EOF + ;; + esac +]) + +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) + +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) + +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# Generated from ltversion.in. + +# serial 3169 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.2.8]) +m4_define([LT_PACKAGE_REVISION], [1.3169]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.2.8' +macro_revision='1.3169' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) + +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/contrib/menuetlibc/openjpeg/bootstrap.sh b/contrib/menuetlibc/openjpeg/bootstrap.sh new file mode 100755 index 0000000000..effb50fda1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/bootstrap.sh @@ -0,0 +1,3 @@ +#!/bin/sh +autoreconf --install --force + diff --git a/contrib/menuetlibc/openjpeg/clean.bat b/contrib/menuetlibc/openjpeg/clean.bat new file mode 100644 index 0000000000..2ce15cbef5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/clean.bat @@ -0,0 +1,25 @@ +rd Release /s /q +rd Debug /s /q +rd codec\Debug /s /q +rd codec\Release /s /q +rd dist /s /q +del *.pch /s /q +del *.ncb /s /q +del *.opt /s /q +del *.plg /s /q +del *.obj /s /q +del *.dll /s /q +del *.exe /s /q +del *.bsc /s /q +del *.bak /s /q +del *.pdb /s /q +del *.sql /s /q +del *.mdb /s /q +del *.lib /s /q +del *.exp /s /q +del *.ilk /s /q +del *.idb /s /q +del *.aps /s /q +del *.suo /s /q /a:h +del *.o /s /q + diff --git a/contrib/menuetlibc/openjpeg/codec/.deps/color.Po b/contrib/menuetlibc/openjpeg/codec/.deps/color.Po new file mode 100644 index 0000000000..8cf8b08b32 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/.deps/color.Po @@ -0,0 +1,144 @@ +color.o: ../common/color.c /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h ../opj_config.h \ + ../libopenjpeg/openjpeg.h ../common/color.h /usr/include/lcms.h \ + /usr/include/assert.h /usr/include/memory.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h ../common/getopt.h \ + /usr/include/icc34.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +../opj_config.h: + +../libopenjpeg/openjpeg.h: + +../common/color.h: + +/usr/include/lcms.h: + +/usr/include/assert.h: + +/usr/include/memory.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +../common/getopt.h: + +/usr/include/icc34.h: diff --git a/contrib/menuetlibc/openjpeg/codec/.deps/convert.Po b/contrib/menuetlibc/openjpeg/codec/.deps/convert.Po new file mode 100644 index 0000000000..292cf7ee4b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/.deps/convert.Po @@ -0,0 +1,138 @@ +convert.o: convert.c ../opj_config.h /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/tiffio.h \ + /usr/include/tiff.h /usr/include/tiffconf.h /usr/include/tiffvers.h \ + /usr/include/libpng12/png.h /usr/include/zlib.h /usr/include/zconf.h \ + /usr/include/zlibdefs.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h ../common/getopt.h \ + /usr/include/libpng12/pngconf.h /usr/include/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h ../libopenjpeg/openjpeg.h \ + convert.h + +../opj_config.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/tiffio.h: + +/usr/include/tiff.h: + +/usr/include/tiffconf.h: + +/usr/include/tiffvers.h: + +/usr/include/libpng12/png.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +/usr/include/zlibdefs.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +../common/getopt.h: + +/usr/include/libpng12/pngconf.h: + +/usr/include/setjmp.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +../libopenjpeg/openjpeg.h: + +convert.h: diff --git a/contrib/menuetlibc/openjpeg/codec/.deps/getopt.Po b/contrib/menuetlibc/openjpeg/codec/.deps/getopt.Po new file mode 100644 index 0000000000..c7a6edfba1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/.deps/getopt.Po @@ -0,0 +1,91 @@ +getopt.o: ../common/getopt.c /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/xlocale.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: diff --git a/contrib/menuetlibc/openjpeg/codec/.deps/image_to_j2k.Po b/contrib/menuetlibc/openjpeg/codec/.deps/image_to_j2k.Po new file mode 100644 index 0000000000..9aae673db3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/.deps/image_to_j2k.Po @@ -0,0 +1,144 @@ +image_to_j2k.o: image_to_j2k.c /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h /usr/include/strings.h ../opj_config.h \ + ../libopenjpeg/openjpeg.h ../common/getopt.h convert.h index.h \ + ../common/format_defs.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/strings.h: + +../opj_config.h: + +../libopenjpeg/openjpeg.h: + +../common/getopt.h: + +convert.h: + +index.h: + +../common/format_defs.h: diff --git a/contrib/menuetlibc/openjpeg/codec/.deps/index.Po b/contrib/menuetlibc/openjpeg/codec/.deps/index.Po new file mode 100644 index 0000000000..107a7a0cfc --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/.deps/index.Po @@ -0,0 +1,77 @@ +index.o: index.c /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/string.h \ + /usr/include/xlocale.h ../libopenjpeg/openjpeg.h index.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +../libopenjpeg/openjpeg.h: + +index.h: diff --git a/contrib/menuetlibc/openjpeg/codec/.deps/j2k_dump.Po b/contrib/menuetlibc/openjpeg/codec/.deps/j2k_dump.Po new file mode 100644 index 0000000000..c8cefdf77a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/.deps/j2k_dump.Po @@ -0,0 +1,148 @@ +j2k_dump.o: j2k_dump.c /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h /usr/include/strings.h ../opj_config.h \ + ../libopenjpeg/openjpeg.h ../libopenjpeg/j2k.h ../libopenjpeg/jp2.h \ + ../common/getopt.h convert.h index.h ../common/format_defs.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/strings.h: + +../opj_config.h: + +../libopenjpeg/openjpeg.h: + +../libopenjpeg/j2k.h: + +../libopenjpeg/jp2.h: + +../common/getopt.h: + +convert.h: + +index.h: + +../common/format_defs.h: diff --git a/contrib/menuetlibc/openjpeg/codec/.deps/j2k_to_image.Po b/contrib/menuetlibc/openjpeg/codec/.deps/j2k_to_image.Po new file mode 100644 index 0000000000..3810074ea7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/.deps/j2k_to_image.Po @@ -0,0 +1,166 @@ +j2k_to_image.o: j2k_to_image.c /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h /usr/include/strings.h ../opj_config.h \ + ../libopenjpeg/openjpeg.h ../common/getopt.h convert.h index.h \ + /usr/include/lcms.h /usr/include/assert.h /usr/include/memory.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/icc34.h \ + ../common/color.h ../common/format_defs.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/strings.h: + +../opj_config.h: + +../libopenjpeg/openjpeg.h: + +../common/getopt.h: + +convert.h: + +index.h: + +/usr/include/lcms.h: + +/usr/include/assert.h: + +/usr/include/memory.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/icc34.h: + +../common/color.h: + +../common/format_defs.h: diff --git a/contrib/menuetlibc/openjpeg/codec/CMakeLists.txt b/contrib/menuetlibc/openjpeg/codec/CMakeLists.txt new file mode 100644 index 0000000000..346f81cef1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/CMakeLists.txt @@ -0,0 +1,102 @@ + # Build the demo app, small examples + +# First thing define the common source: +SET(common_SRCS + convert.c + index.c + ${OPENJPEG_SOURCE_DIR}/common/color.c +) + +# If not getopt was found then add it to the lib: +IF(DONT_HAVE_GETOPT) + SET(common_SRCS + ${common_SRCS} + ${OPENJPEG_SOURCE_DIR}/common/getopt.c + ) +ENDIF(DONT_HAVE_GETOPT) + +# Headers file are located here: +INCLUDE_DIRECTORIES( + ${OPENJPEG_SOURCE_DIR}/libopenjpeg + ${LCMS_INCLUDE_DIR} + ${OPENJPEG_SOURCE_DIR}/common + ) +IF(PNG_FOUND) + INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR}) +ENDIF(PNG_FOUND) +IF(TIFF_FOUND) + INCLUDE_DIRECTORIES(${TIFF_INCLUDE_DIR}) +ENDIF(TIFF_FOUND) + +IF(WIN32) + IF(BUILD_SHARED_LIBS) + ADD_DEFINITIONS(-DOPJ_EXPORTS) + ELSE(BUILD_SHARED_LIBS) + ADD_DEFINITIONS(-DOPJ_STATIC) + ENDIF(BUILD_SHARED_LIBS) +ENDIF(WIN32) + +# Loop over all executables: +FOREACH(exe j2k_to_image image_to_j2k j2k_dump) + ADD_EXECUTABLE(${exe} ${exe}.c ${common_SRCS}) + TARGET_LINK_LIBRARIES(${exe} ${OPENJPEG_LIBRARY_NAME} ${LCMS_LIB}) + IF(PNG_FOUND) + TARGET_LINK_LIBRARIES(${exe} ${PNG_LIBRARIES}) + ENDIF(PNG_FOUND) + IF(TIFF_FOUND) + TARGET_LINK_LIBRARIES(${exe} ${TIFF_LIBRARIES}) + ENDIF(TIFF_FOUND) + ADD_TEST(${exe} ${EXECUTABLE_OUTPUT_PATH}/${exe}) + # calling those exe without option will make them fail always: + SET_TESTS_PROPERTIES(${exe} PROPERTIES WILL_FAIL TRUE) + # On unix you need to link to the math library: + IF(UNIX) + TARGET_LINK_LIBRARIES(${exe} m) + ENDIF(UNIX) + # Install exe + INSTALL(TARGETS ${exe} + EXPORT OpenJPEGTargets + DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications + ) +ENDFOREACH(exe) + +# Install man pages +INSTALL( + FILES ../doc/man/man1/image_to_j2k.1 + ../doc/man/man1/j2k_dump.1 + ../doc/man/man1/j2k_to_image.1 + DESTINATION ${OPENJPEG_INSTALL_MAN_DIR}/man1) +# + +if(BUILD_TESTING) +# Do testing here, once we know the examples are being built: +FILE(GLOB_RECURSE OPENJPEG_DATA_IMAGES_GLOB + "${JPEG2000_CONFORMANCE_DATA_ROOT}/*.j2k" + "${JPEG2000_CONFORMANCE_DATA_ROOT}/*.j2c" + "${JPEG2000_CONFORMANCE_DATA_ROOT}/*.jp2" + ) + +foreach(filename ${OPENJPEG_DATA_IMAGES_GLOB}) + get_filename_component(filename_temp ${filename} NAME) + get_filename_component(filename_ext ${filename} EXT) + execute_process(COMMAND ${EXECUTABLE_OUTPUT_PATH}/j2k_dump -i ${filename} + OUTPUT_VARIABLE dump_success + OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${filename_temp}.dump + ERROR_QUIET + ) + if(dump_success) + file(READ ${CMAKE_CURRENT_BINARY_DIR}/${filename_temp}.dump numcomp_file) + string(REGEX REPLACE ".*numcomps=([0-9]+).*" "\\1" + numcomps "${numcomp_file}") + #message( "found:${output_variable} for ${filename_temp}" ) + endif() + ADD_TEST(dump-${filename_temp} ${EXECUTABLE_OUTPUT_PATH}/j2k_dump -i ${filename}) + foreach(codec_type ppm pgx bmp tif raw tga png) + ADD_TEST(j2i-${filename_temp}-${codec_type} ${EXECUTABLE_OUTPUT_PATH}/j2k_to_image -i ${filename} -o ${filename_temp}.${codec_type}) + 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}) + #if(UNIX) + # ADD_TEST(cmp-${filename_temp}-${codec_type} cmp ${filename} ${filename_temp}.${codec_type}${filename_ext}) + #endif(UNIX) + endforeach(codec_type) +endforeach(filename) +endif(BUILD_TESTING) diff --git a/contrib/menuetlibc/openjpeg/codec/Makefile b/contrib/menuetlibc/openjpeg/codec/Makefile new file mode 100644 index 0000000000..f9ffa47bd8 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/Makefile @@ -0,0 +1,622 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# codec/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + +pkgdatadir = $(datadir)/openjpeg-1.4.0 +pkgincludedir = $(includedir)/openjpeg-1.4.0 +pkglibdir = $(libdir)/openjpeg-1.4.0 +pkglibexecdir = $(libexecdir)/openjpeg-1.4.0 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +am__append_1 = -DOPJ_EXPORTS +#am__append_2 = -DOPJ_STATIC +am__append_3 = +am__append_4 = -ltiff +am__append_5 = -I/usr/include/libpng12 +am__append_6 = -L/usr/lib/x86_64-linux-gnu -lpng12 +#am__append_7 = +#am__append_8 = +am__append_9 = -I/usr/include +am__append_10 = -llcms +bin_PROGRAMS = j2k_to_image$(EXEEXT) image_to_j2k$(EXEEXT) \ + j2k_dump$(EXEEXT) +subdir = codec +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_image_to_j2k_OBJECTS = getopt.$(OBJEXT) index.$(OBJEXT) \ + convert.$(OBJEXT) image_to_j2k.$(OBJEXT) +image_to_j2k_OBJECTS = $(am_image_to_j2k_OBJECTS) +image_to_j2k_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +image_to_j2k_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + ../libopenjpeg/libopenjpeg.la +am_j2k_dump_OBJECTS = getopt.$(OBJEXT) index.$(OBJEXT) \ + j2k_dump.$(OBJEXT) +j2k_dump_OBJECTS = $(am_j2k_dump_OBJECTS) +j2k_dump_LDADD = $(LDADD) +j2k_dump_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + ../libopenjpeg/libopenjpeg.la +am_j2k_to_image_OBJECTS = getopt.$(OBJEXT) index.$(OBJEXT) \ + convert.$(OBJEXT) color.$(OBJEXT) j2k_to_image.$(OBJEXT) +j2k_to_image_OBJECTS = $(am_j2k_to_image_OBJECTS) +j2k_to_image_LDADD = $(LDADD) +j2k_to_image_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + ../libopenjpeg/libopenjpeg.la +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(image_to_j2k_SOURCES) $(j2k_dump_SOURCES) \ + $(j2k_to_image_SOURCES) +DIST_SOURCES = $(image_to_j2k_SOURCES) $(j2k_dump_SOURCES) \ + $(j2k_to_image_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf +AUTOHEADER = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader +AUTOMAKE = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11 +AWK = mawk +BUILD_NR = 0 +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JP3D_BUILD_NR = 0 +JP3D_MAJOR_NR = 1 +JP3D_MINOR_NR = 3 +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBPNG_CONFIG = /usr/bin/libpng-config +LIBS = -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAJOR_NR = 1 +MAKEINFO = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo +MINOR_NR = 4 +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = openjpeg-1.4.0 +PACKAGE_BUGREPORT = http://code.google.com/p/openjpeg/ +PACKAGE_NAME = OpenJPEG +PACKAGE_STRING = OpenJPEG 1.4.0 +PACKAGE_TARNAME = openjpeg-1.4.0 +PACKAGE_URL = http://www.openjpeg.org/ +PACKAGE_VERSION = 1.4.0 +PATH_SEPARATOR = : +PKGCONFIG = /usr/bin/pkg-config +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 1.4.0 +abs_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/codec +abs_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/codec +abs_top_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_top_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh +jp3d_dir = +jpwl_dir = +lcms1includes = -I/usr/include +lcms1libs = -llcms +lcms2includes = +lcms2libs = +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pngincludes = -I/usr/include/libpng12 +pnglibs = -L/usr/lib/x86_64-linux-gnu -lpng12 +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +tiffincludes = +tifflibs = -ltiff +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +with_doxygen = no +COMPILERFLAGS = -Wall $(am__append_1) $(am__append_2) +USERLIBS = -lm $(am__append_4) $(am__append_6) $(am__append_8) \ + $(am__append_10) +INCLUDES = -I.. -I. -I../libopenjpeg -I../common $(am__append_3) \ + $(am__append_5) $(am__append_7) $(am__append_9) +LDADD = $(USERLIBS) ../libopenjpeg/libopenjpeg.la +j2k_to_image_SOURCES = ../common/getopt.c index.c convert.c \ + ../common/color.c j2k_to_image.c + +image_to_j2k_SOURCES = ../common/getopt.c index.c convert.c image_to_j2k.c +j2k_dump_SOURCES = ../common/getopt.c index.c j2k_dump.c +REPBIN = $(bin_PROGRAMS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign codec/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign codec/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +image_to_j2k$(EXEEXT): $(image_to_j2k_OBJECTS) $(image_to_j2k_DEPENDENCIES) + @rm -f image_to_j2k$(EXEEXT) + $(LINK) $(image_to_j2k_OBJECTS) $(image_to_j2k_LDADD) $(LIBS) +j2k_dump$(EXEEXT): $(j2k_dump_OBJECTS) $(j2k_dump_DEPENDENCIES) + @rm -f j2k_dump$(EXEEXT) + $(LINK) $(j2k_dump_OBJECTS) $(j2k_dump_LDADD) $(LIBS) +j2k_to_image$(EXEEXT): $(j2k_to_image_OBJECTS) $(j2k_to_image_DEPENDENCIES) + @rm -f j2k_to_image$(EXEEXT) + $(LINK) $(j2k_to_image_OBJECTS) $(j2k_to_image_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/color.Po +include ./$(DEPDIR)/convert.Po +include ./$(DEPDIR)/getopt.Po +include ./$(DEPDIR)/image_to_j2k.Po +include ./$(DEPDIR)/index.Po +include ./$(DEPDIR)/j2k_dump.Po +include ./$(DEPDIR)/j2k_to_image.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +getopt.o: ../common/getopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getopt.o -MD -MP -MF $(DEPDIR)/getopt.Tpo -c -o getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + $(am__mv) $(DEPDIR)/getopt.Tpo $(DEPDIR)/getopt.Po +# source='../common/getopt.c' object='getopt.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + +getopt.obj: ../common/getopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getopt.obj -MD -MP -MF $(DEPDIR)/getopt.Tpo -c -o getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + $(am__mv) $(DEPDIR)/getopt.Tpo $(DEPDIR)/getopt.Po +# source='../common/getopt.c' object='getopt.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + +color.o: ../common/color.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT color.o -MD -MP -MF $(DEPDIR)/color.Tpo -c -o color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c + $(am__mv) $(DEPDIR)/color.Tpo $(DEPDIR)/color.Po +# source='../common/color.c' object='color.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c + +color.obj: ../common/color.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT color.obj -MD -MP -MF $(DEPDIR)/color.Tpo -c -o color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` + $(am__mv) $(DEPDIR)/color.Tpo $(DEPDIR)/color.Po +# source='../common/color.c' object='color.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) all-local +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS + + +all-local: + $(INSTALL) -d ../bin + $(INSTALL) $(bin_PROGRAMS) ../bin + @echo "" > .report.txt + @for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> .report.txt ; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/codec/Makefile.am b/contrib/menuetlibc/openjpeg/codec/Makefile.am new file mode 100644 index 0000000000..b75b4b4bb7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/Makefile.am @@ -0,0 +1,52 @@ +COMPILERFLAGS = -Wall + +if with_sharedlibs +COMPILERFLAGS += -DOPJ_EXPORTS +else +COMPILERFLAGS += -DOPJ_STATIC +endif + +USERLIBS = -lm +INCLUDES = -I.. -I. -I../libopenjpeg -I../common + +if with_libtiff +INCLUDES += @tiffincludes@ +USERLIBS += @tifflibs@ +endif + +if with_libpng +INCLUDES += @pngincludes@ +USERLIBS += @pnglibs@ +endif + +if with_liblcms2 +INCLUDES += @lcms2includes@ +USERLIBS += @lcms2libs@ +endif + +if with_liblcms1 +INCLUDES += @lcms1includes@ +USERLIBS += @lcms1libs@ +endif + +bin_PROGRAMS = j2k_to_image image_to_j2k j2k_dump + +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +LDADD = $(USERLIBS) ../libopenjpeg/libopenjpeg.la + +j2k_to_image_SOURCES = ../common/getopt.c index.c convert.c \ + ../common/color.c j2k_to_image.c + +image_to_j2k_SOURCES = ../common/getopt.c index.c convert.c image_to_j2k.c + +j2k_dump_SOURCES = ../common/getopt.c index.c j2k_dump.c + +REPBIN=$(bin_PROGRAMS) + +all-local: + $(INSTALL) -d ../bin + $(INSTALL) $(bin_PROGRAMS) ../bin + @echo "" > .report.txt + @for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> .report.txt ; \ + done diff --git a/contrib/menuetlibc/openjpeg/codec/Makefile.in b/contrib/menuetlibc/openjpeg/codec/Makefile.in new file mode 100644 index 0000000000..8eaf245976 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/Makefile.in @@ -0,0 +1,622 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@with_sharedlibs_TRUE@am__append_1 = -DOPJ_EXPORTS +@with_sharedlibs_FALSE@am__append_2 = -DOPJ_STATIC +@with_libtiff_TRUE@am__append_3 = @tiffincludes@ +@with_libtiff_TRUE@am__append_4 = @tifflibs@ +@with_libpng_TRUE@am__append_5 = @pngincludes@ +@with_libpng_TRUE@am__append_6 = @pnglibs@ +@with_liblcms2_TRUE@am__append_7 = @lcms2includes@ +@with_liblcms2_TRUE@am__append_8 = @lcms2libs@ +@with_liblcms1_TRUE@am__append_9 = @lcms1includes@ +@with_liblcms1_TRUE@am__append_10 = @lcms1libs@ +bin_PROGRAMS = j2k_to_image$(EXEEXT) image_to_j2k$(EXEEXT) \ + j2k_dump$(EXEEXT) +subdir = codec +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_image_to_j2k_OBJECTS = getopt.$(OBJEXT) index.$(OBJEXT) \ + convert.$(OBJEXT) image_to_j2k.$(OBJEXT) +image_to_j2k_OBJECTS = $(am_image_to_j2k_OBJECTS) +image_to_j2k_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +image_to_j2k_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + ../libopenjpeg/libopenjpeg.la +am_j2k_dump_OBJECTS = getopt.$(OBJEXT) index.$(OBJEXT) \ + j2k_dump.$(OBJEXT) +j2k_dump_OBJECTS = $(am_j2k_dump_OBJECTS) +j2k_dump_LDADD = $(LDADD) +j2k_dump_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + ../libopenjpeg/libopenjpeg.la +am_j2k_to_image_OBJECTS = getopt.$(OBJEXT) index.$(OBJEXT) \ + convert.$(OBJEXT) color.$(OBJEXT) j2k_to_image.$(OBJEXT) +j2k_to_image_OBJECTS = $(am_j2k_to_image_OBJECTS) +j2k_to_image_LDADD = $(LDADD) +j2k_to_image_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + ../libopenjpeg/libopenjpeg.la +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(image_to_j2k_SOURCES) $(j2k_dump_SOURCES) \ + $(j2k_to_image_SOURCES) +DIST_SOURCES = $(image_to_j2k_SOURCES) $(j2k_dump_SOURCES) \ + $(j2k_to_image_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_NR = @BUILD_NR@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JP3D_BUILD_NR = @JP3D_BUILD_NR@ +JP3D_MAJOR_NR = @JP3D_MAJOR_NR@ +JP3D_MINOR_NR = @JP3D_MINOR_NR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBPNG_CONFIG = @LIBPNG_CONFIG@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAJOR_NR = @MAJOR_NR@ +MAKEINFO = @MAKEINFO@ +MINOR_NR = @MINOR_NR@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG = @PKGCONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +jp3d_dir = @jp3d_dir@ +jpwl_dir = @jpwl_dir@ +lcms1includes = @lcms1includes@ +lcms1libs = @lcms1libs@ +lcms2includes = @lcms2includes@ +lcms2libs = @lcms2libs@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pngincludes = @pngincludes@ +pnglibs = @pnglibs@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +tiffincludes = @tiffincludes@ +tifflibs = @tifflibs@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_doxygen = @with_doxygen@ +COMPILERFLAGS = -Wall $(am__append_1) $(am__append_2) +USERLIBS = -lm $(am__append_4) $(am__append_6) $(am__append_8) \ + $(am__append_10) +INCLUDES = -I.. -I. -I../libopenjpeg -I../common $(am__append_3) \ + $(am__append_5) $(am__append_7) $(am__append_9) +LDADD = $(USERLIBS) ../libopenjpeg/libopenjpeg.la +j2k_to_image_SOURCES = ../common/getopt.c index.c convert.c \ + ../common/color.c j2k_to_image.c + +image_to_j2k_SOURCES = ../common/getopt.c index.c convert.c image_to_j2k.c +j2k_dump_SOURCES = ../common/getopt.c index.c j2k_dump.c +REPBIN = $(bin_PROGRAMS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign codec/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign codec/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +image_to_j2k$(EXEEXT): $(image_to_j2k_OBJECTS) $(image_to_j2k_DEPENDENCIES) + @rm -f image_to_j2k$(EXEEXT) + $(LINK) $(image_to_j2k_OBJECTS) $(image_to_j2k_LDADD) $(LIBS) +j2k_dump$(EXEEXT): $(j2k_dump_OBJECTS) $(j2k_dump_DEPENDENCIES) + @rm -f j2k_dump$(EXEEXT) + $(LINK) $(j2k_dump_OBJECTS) $(j2k_dump_LDADD) $(LIBS) +j2k_to_image$(EXEEXT): $(j2k_to_image_OBJECTS) $(j2k_to_image_DEPENDENCIES) + @rm -f j2k_to_image$(EXEEXT) + $(LINK) $(j2k_to_image_OBJECTS) $(j2k_to_image_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convert.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/image_to_j2k.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/index.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/j2k_dump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/j2k_to_image.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +getopt.o: ../common/getopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getopt.o -MD -MP -MF $(DEPDIR)/getopt.Tpo -c -o getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/getopt.Tpo $(DEPDIR)/getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/getopt.c' object='getopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + +getopt.obj: ../common/getopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getopt.obj -MD -MP -MF $(DEPDIR)/getopt.Tpo -c -o getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/getopt.Tpo $(DEPDIR)/getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/getopt.c' object='getopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + +color.o: ../common/color.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT color.o -MD -MP -MF $(DEPDIR)/color.Tpo -c -o color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/color.Tpo $(DEPDIR)/color.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/color.c' object='color.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c + +color.obj: ../common/color.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT color.obj -MD -MP -MF $(DEPDIR)/color.Tpo -c -o color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/color.Tpo $(DEPDIR)/color.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/color.c' object='color.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) all-local +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS + + +all-local: + $(INSTALL) -d ../bin + $(INSTALL) $(bin_PROGRAMS) ../bin + @echo "" > .report.txt + @for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> .report.txt ; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/codec/Makefile.nix b/contrib/menuetlibc/openjpeg/codec/Makefile.nix new file mode 100644 index 0000000000..183e90542d --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/Makefile.nix @@ -0,0 +1,68 @@ +#codec Makefile +include ../config.nix + +CFLAGS = -Wall + +INSTALL_BIN = $(prefix)/bin + +INCLUDE = -I.. -I. -I../libopenjpeg -I../common +USERLIBS = -lm + +ifeq ($(WITH_TIFF),yes) +INCLUDE += $(TIFF_INCLUDE) +USERLIBS += $(TIFF_LIB) +endif + +ifeq ($(WITH_PNG),yes) +INCLUDE += $(PNG_INCLUDE) +USERLIBS += $(PNG_LIB) +endif + +ifeq ($(WITH_LCMS2),yes) +INCLUDE += $(LCMS2_INCLUDE) +USERLIBS += $(LCMS2_LIB) +endif + +ifeq ($(WITH_LCMS1),yes) +INCLUDE += $(LCMS1_INCLUDE) +USERLIBS += $(LCMS1_LIB) +endif + +CFLAGS += $(INCLUDE) -lstdc++ # -g -p -pg + +all: j2k_to_image image_to_j2k j2k_dump + install -d ../bin + install j2k_to_image image_to_j2k j2k_dump ../bin + +ifeq ($(ENABLE_SHARED),yes) +ELIB = ../libopenjpeg.so.$(MAJOR).$(MINOR).$(BUILD) +else +ELIB = ../libopenjpeg.a +endif + +j2k_to_image: j2k_to_image.c $(ELIB) + $(CC) $(CFLAGS) ../common/getopt.c index.c convert.c \ + ../common/color.c j2k_to_image.c \ + -o j2k_to_image $(ELIB) $(USERLIBS) + +image_to_j2k: image_to_j2k.c $(ELIB) + $(CC) $(CFLAGS) ../common/getopt.c index.c convert.c image_to_j2k.c \ + -o image_to_j2k $(ELIB) $(USERLIBS) + +j2k_dump: j2k_dump.c $(ELIB) + $(CC) $(CFLAGS) ../common/getopt.c index.c j2k_dump.c \ + -o j2k_dump $(ELIB) $(USERLIBS) + +clean: + rm -f j2k_to_image image_to_j2k j2k_dump + +install: all + install -d $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root j2k_to_image $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root image_to_j2k $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root j2k_dump $(DESTDIR)$(INSTALL_BIN) + +uninstall: + rm -f $(DESTDIR)$(INSTALL_BIN)/j2k_to_image + rm -f $(DESTDIR)$(INSTALL_BIN)/image_to_j2k + rm -f $(DESTDIR)$(INSTALL_BIN)/j2k_dump diff --git a/contrib/menuetlibc/openjpeg/codec/README b/contrib/menuetlibc/openjpeg/codec/README new file mode 100644 index 0000000000..80049980e3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/README @@ -0,0 +1,8 @@ +Simple codec compilation +------------------------ +Once you've built the library, you might want to test it with a basic codec. To do this, go to the codec directory and either use the provided Makefile or use one of the following commands to build an encoder and decoder respectively: + +gcc index.c convert.c image_to_j2k.c -o image_to_j2k -lopenjpeg -I ../libopenjpeg/ -lm -ltiff +gcc index.c convert.c j2k_to_image.c -o j2k_to_image -lopenjpeg -I ../libopenjpeg/ -lm -ltiff + +You should add '-L..' to those lines if you did not use the 'install' target when building the library. \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/codec/convert.c b/contrib/menuetlibc/openjpeg/codec/convert.c new file mode 100644 index 0000000000..25e715bf45 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/convert.c @@ -0,0 +1,2686 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2006-2007, Parvatha Elangovan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#include "opj_config.h" + +#include +#include +#include + +#ifdef HAVE_LIBTIFF +#ifdef _WIN32 +#include "../libs/libtiff/tiffio.h" +#else +#include +#endif /* _WIN32 */ +#endif /* HAVE_LIBTIFF */ + +#ifdef HAVE_LIBPNG +#ifdef _WIN32 +#include "../libs/png/png.h" +#else +#include +#endif /* _WIN32 */ +#endif /* HAVE_LIBPNG */ + +#include "../libopenjpeg/openjpeg.h" +#include "convert.h" + +/* + * Get logarithm of an integer and round downwards. + * + * log2(a) + */ +static int int_floorlog2(int a) { + int l; + for (l = 0; a > 1; l++) { + a >>= 1; + } + return l; +} + +/* + * Divide an integer by a power of 2 and round upwards. + * + * a divided by 2^b + */ +static int int_ceildivpow2(int a, int b) { + return (a + (1 << b) - 1) >> b; +} + +/* + * Divide an integer and round upwards. + * + * a divided by b + */ +static int int_ceildiv(int a, int b) { + return (a + b - 1) / b; +} + + +/* -->> -->> -->> -->> + + TGA IMAGE FORMAT + + <<-- <<-- <<-- <<-- */ + +// TGA header definition. +#pragma pack(push,1) // Pack structure byte aligned +typedef struct tga_header +{ + unsigned char id_length; /* Image id field length */ + unsigned char colour_map_type; /* Colour map type */ + unsigned char image_type; /* Image type */ + /* + ** Colour map specification + */ + unsigned short colour_map_index; /* First entry index */ + unsigned short colour_map_length; /* Colour map length */ + unsigned char colour_map_entry_size; /* Colour map entry size */ + /* + ** Image specification + */ + unsigned short x_origin; /* x origin of image */ + unsigned short y_origin; /* u origin of image */ + unsigned short image_width; /* Image width */ + unsigned short image_height; /* Image height */ + unsigned char pixel_depth; /* Pixel depth */ + unsigned char image_desc; /* Image descriptor */ +} tga_header; +#pragma pack(pop) // Return to normal structure packing alignment. + +int tga_readheader(FILE *fp, unsigned int *bits_per_pixel, + unsigned int *width, unsigned int *height, int *flip_image) +{ + int palette_size; + tga_header tga ; + + if (!bits_per_pixel || !width || !height || !flip_image) + return 0; + + // Read TGA header + fread((unsigned char*)&tga, sizeof(tga_header), 1, fp); + + *bits_per_pixel = tga.pixel_depth; + + *width = tga.image_width; + *height = tga.image_height ; + + // Ignore tga identifier, if present ... + if (tga.id_length) + { + unsigned char *id = (unsigned char *) malloc(tga.id_length); + fread(id, tga.id_length, 1, fp); + free(id); + } + + // Test for compressed formats ... not yet supported ... + // Note :- 9 - RLE encoded palettized. + // 10 - RLE encoded RGB. + if (tga.image_type > 8) + { + fprintf(stderr, "Sorry, compressed tga files are not currently supported.\n"); + return 0 ; + } + + *flip_image = !(tga.image_desc & 32); + + // Palettized formats are not yet supported, skip over the palette, if present ... + palette_size = tga.colour_map_length * (tga.colour_map_entry_size/8); + + if (palette_size>0) + { + fprintf(stderr, "File contains a palette - not yet supported."); + fseek(fp, palette_size, SEEK_CUR); + } + return 1; +} + +int tga_writeheader(FILE *fp, int bits_per_pixel, int width, int height, + bool flip_image) +{ + tga_header tga; + + if (!bits_per_pixel || !width || !height) + return 0; + + memset(&tga, 0, sizeof(tga_header)); + + tga.pixel_depth = bits_per_pixel; + tga.image_width = width; + tga.image_height = height; + tga.image_type = 2; // Uncompressed. + tga.image_desc = 8; // 8 bits per component. + + if (flip_image) + tga.image_desc |= 32; + + // Write TGA header + fwrite((unsigned char*)&tga, sizeof(tga_header), 1, fp); + + return 1; +} + +opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) { + FILE *f; + opj_image_t *image; + unsigned int image_width, image_height, pixel_bit_depth; + unsigned int x, y; + int flip_image=0; + opj_image_cmptparm_t cmptparm[4]; /* maximum 4 components */ + int numcomps; + OPJ_COLOR_SPACE color_space; + bool mono ; + bool save_alpha; + int subsampling_dx, subsampling_dy; + int i; + + f = fopen(filename, "rb"); + if (!f) { + fprintf(stderr, "Failed to open %s for reading !!\n", filename); + return 0; + } + + if (!tga_readheader(f, &pixel_bit_depth, &image_width, &image_height, &flip_image)) + return NULL; + + // We currently only support 24 & 32 bit tga's ... + if (!((pixel_bit_depth == 24) || (pixel_bit_depth == 32))) + return NULL; + + /* initialize image components */ + memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t)); + + mono = (pixel_bit_depth == 8) || (pixel_bit_depth == 16); // Mono with & without alpha. + save_alpha = (pixel_bit_depth == 16) || (pixel_bit_depth == 32); // Mono with alpha, or RGB with alpha + + if (mono) { + color_space = CLRSPC_GRAY; + numcomps = save_alpha ? 2 : 1; + } + else { + numcomps = save_alpha ? 4 : 3; + color_space = CLRSPC_SRGB; + } + + subsampling_dx = parameters->subsampling_dx; + subsampling_dy = parameters->subsampling_dy; + + for (i = 0; i < numcomps; i++) { + cmptparm[i].prec = 8; + cmptparm[i].bpp = 8; + cmptparm[i].sgnd = 0; + cmptparm[i].dx = subsampling_dx; + cmptparm[i].dy = subsampling_dy; + cmptparm[i].w = image_width; + cmptparm[i].h = image_height; + } + + /* create the image */ + image = opj_image_create(numcomps, &cmptparm[0], color_space); + + if (!image) + return NULL; + + /* set image offset and reference grid */ + image->x0 = parameters->image_offset_x0; + image->y0 = parameters->image_offset_y0; + image->x1 = !image->x0 ? (image_width - 1) * subsampling_dx + 1 : image->x0 + (image_width - 1) * subsampling_dx + 1; + image->y1 = !image->y0 ? (image_height - 1) * subsampling_dy + 1 : image->y0 + (image_height - 1) * subsampling_dy + 1; + + /* set image data */ + for (y=0; y < image_height; y++) + { + int index; + + if (flip_image) + index = (image_height-y-1)*image_width; + else + index = y*image_width; + + if (numcomps==3) + { + for (x=0;xcomps[0].data[index]=r; + image->comps[1].data[index]=g; + image->comps[2].data[index]=b; + index++; + } + } + else if (numcomps==4) + { + for (x=0;xcomps[0].data[index]=r; + image->comps[1].data[index]=g; + image->comps[2].data[index]=b; + image->comps[3].data[index]=a; + index++; + } + } + else { + fprintf(stderr, "Currently unsupported bit depth : %s\n", filename); + } + } + return image; +} + +int imagetotga(opj_image_t * image, const char *outfile) { + int width, height, bpp, x, y; + bool write_alpha; + int i; + unsigned int alpha_channel; + float r,g,b,a; + unsigned char value; + float scale; + FILE *fdest; + + fdest = fopen(outfile, "wb"); + if (!fdest) { + fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile); + return 1; + } + + for (i = 0; i < image->numcomps-1; i++) { + if ((image->comps[0].dx != image->comps[i+1].dx) + ||(image->comps[0].dy != image->comps[i+1].dy) + ||(image->comps[0].prec != image->comps[i+1].prec)) { + fprintf(stderr, "Unable to create a tga file with such J2K image charateristics."); + return 1; + } + } + + width = image->comps[0].w; + height = image->comps[0].h; + + // Mono with alpha, or RGB with alpha. + write_alpha = (image->numcomps==2) || (image->numcomps==4); + + // Write TGA header + bpp = write_alpha ? 32 : 24; + if (!tga_writeheader(fdest, bpp, width , height, true)) + return 1; + + alpha_channel = image->numcomps-1; + + scale = 255.0f / (float)((1<comps[0].prec)-1); + + for (y=0; y < height; y++) { + unsigned int index=y*width; + + for (x=0; x < width; x++, index++) { + r = (float)(image->comps[0].data[index]); + + if (image->numcomps>2) { + g = (float)(image->comps[1].data[index]); + b = (float)(image->comps[2].data[index]); + } + else {// Greyscale ... + g = r; + b = r; + } + + // TGA format writes BGR ... + value = (unsigned char)(b*scale); + fwrite(&value,1,1,fdest); + + value = (unsigned char)(g*scale); + fwrite(&value,1,1,fdest); + + value = (unsigned char)(r*scale); + fwrite(&value,1,1,fdest); + + if (write_alpha) { + a = (float)(image->comps[alpha_channel].data[index]); + value = (unsigned char)(a*scale); + fwrite(&value,1,1,fdest); + } + } + } + + return 0; +} + +/* -->> -->> -->> -->> + + BMP IMAGE FORMAT + + <<-- <<-- <<-- <<-- */ + +/* WORD defines a two byte word */ +typedef unsigned short int WORD; + +/* DWORD defines a four byte word */ +typedef unsigned long int DWORD; + +typedef struct { + WORD bfType; /* 'BM' for Bitmap (19776) */ + DWORD bfSize; /* Size of the file */ + WORD bfReserved1; /* Reserved : 0 */ + WORD bfReserved2; /* Reserved : 0 */ + DWORD bfOffBits; /* Offset */ +} BITMAPFILEHEADER_t; + +typedef struct { + DWORD biSize; /* Size of the structure in bytes */ + DWORD biWidth; /* Width of the image in pixels */ + DWORD biHeight; /* Heigth of the image in pixels */ + WORD biPlanes; /* 1 */ + WORD biBitCount; /* Number of color bits by pixels */ + DWORD biCompression; /* Type of encoding 0: none 1: RLE8 2: RLE4 */ + DWORD biSizeImage; /* Size of the image in bytes */ + DWORD biXpelsPerMeter; /* Horizontal (X) resolution in pixels/meter */ + DWORD biYpelsPerMeter; /* Vertical (Y) resolution in pixels/meter */ + DWORD biClrUsed; /* Number of color used in the image (0: ALL) */ + DWORD biClrImportant; /* Number of important color (0: ALL) */ +} BITMAPINFOHEADER_t; + +opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters) { + int subsampling_dx = parameters->subsampling_dx; + int subsampling_dy = parameters->subsampling_dy; + + int i, numcomps, w, h; + OPJ_COLOR_SPACE color_space; + opj_image_cmptparm_t cmptparm[3]; /* maximum of 3 components */ + opj_image_t * image = NULL; + + FILE *IN; + BITMAPFILEHEADER_t File_h; + BITMAPINFOHEADER_t Info_h; + unsigned char *RGB; + unsigned char *table_R, *table_G, *table_B; + unsigned int j, PAD = 0; + + int x, y, index; + int gray_scale = 1, not_end_file = 1; + + unsigned int line = 0, col = 0; + unsigned char v, v2; + DWORD W, H; + + IN = fopen(filename, "rb"); + if (!IN) { + fprintf(stderr, "Failed to open %s for reading !!\n", filename); + return 0; + } + + File_h.bfType = getc(IN); + File_h.bfType = (getc(IN) << 8) + File_h.bfType; + + if (File_h.bfType != 19778) { + fprintf(stderr,"Error, not a BMP file!\n"); + return 0; + } else { + /* FILE HEADER */ + /* ------------- */ + File_h.bfSize = getc(IN); + File_h.bfSize = (getc(IN) << 8) + File_h.bfSize; + File_h.bfSize = (getc(IN) << 16) + File_h.bfSize; + File_h.bfSize = (getc(IN) << 24) + File_h.bfSize; + + File_h.bfReserved1 = getc(IN); + File_h.bfReserved1 = (getc(IN) << 8) + File_h.bfReserved1; + + File_h.bfReserved2 = getc(IN); + File_h.bfReserved2 = (getc(IN) << 8) + File_h.bfReserved2; + + File_h.bfOffBits = getc(IN); + File_h.bfOffBits = (getc(IN) << 8) + File_h.bfOffBits; + File_h.bfOffBits = (getc(IN) << 16) + File_h.bfOffBits; + File_h.bfOffBits = (getc(IN) << 24) + File_h.bfOffBits; + + /* INFO HEADER */ + /* ------------- */ + + Info_h.biSize = getc(IN); + Info_h.biSize = (getc(IN) << 8) + Info_h.biSize; + Info_h.biSize = (getc(IN) << 16) + Info_h.biSize; + Info_h.biSize = (getc(IN) << 24) + Info_h.biSize; + + Info_h.biWidth = getc(IN); + Info_h.biWidth = (getc(IN) << 8) + Info_h.biWidth; + Info_h.biWidth = (getc(IN) << 16) + Info_h.biWidth; + Info_h.biWidth = (getc(IN) << 24) + Info_h.biWidth; + w = Info_h.biWidth; + + Info_h.biHeight = getc(IN); + Info_h.biHeight = (getc(IN) << 8) + Info_h.biHeight; + Info_h.biHeight = (getc(IN) << 16) + Info_h.biHeight; + Info_h.biHeight = (getc(IN) << 24) + Info_h.biHeight; + h = Info_h.biHeight; + + Info_h.biPlanes = getc(IN); + Info_h.biPlanes = (getc(IN) << 8) + Info_h.biPlanes; + + Info_h.biBitCount = getc(IN); + Info_h.biBitCount = (getc(IN) << 8) + Info_h.biBitCount; + + Info_h.biCompression = getc(IN); + Info_h.biCompression = (getc(IN) << 8) + Info_h.biCompression; + Info_h.biCompression = (getc(IN) << 16) + Info_h.biCompression; + Info_h.biCompression = (getc(IN) << 24) + Info_h.biCompression; + + Info_h.biSizeImage = getc(IN); + Info_h.biSizeImage = (getc(IN) << 8) + Info_h.biSizeImage; + Info_h.biSizeImage = (getc(IN) << 16) + Info_h.biSizeImage; + Info_h.biSizeImage = (getc(IN) << 24) + Info_h.biSizeImage; + + Info_h.biXpelsPerMeter = getc(IN); + Info_h.biXpelsPerMeter = (getc(IN) << 8) + Info_h.biXpelsPerMeter; + Info_h.biXpelsPerMeter = (getc(IN) << 16) + Info_h.biXpelsPerMeter; + Info_h.biXpelsPerMeter = (getc(IN) << 24) + Info_h.biXpelsPerMeter; + + Info_h.biYpelsPerMeter = getc(IN); + Info_h.biYpelsPerMeter = (getc(IN) << 8) + Info_h.biYpelsPerMeter; + Info_h.biYpelsPerMeter = (getc(IN) << 16) + Info_h.biYpelsPerMeter; + Info_h.biYpelsPerMeter = (getc(IN) << 24) + Info_h.biYpelsPerMeter; + + Info_h.biClrUsed = getc(IN); + Info_h.biClrUsed = (getc(IN) << 8) + Info_h.biClrUsed; + Info_h.biClrUsed = (getc(IN) << 16) + Info_h.biClrUsed; + Info_h.biClrUsed = (getc(IN) << 24) + Info_h.biClrUsed; + + Info_h.biClrImportant = getc(IN); + Info_h.biClrImportant = (getc(IN) << 8) + Info_h.biClrImportant; + Info_h.biClrImportant = (getc(IN) << 16) + Info_h.biClrImportant; + Info_h.biClrImportant = (getc(IN) << 24) + Info_h.biClrImportant; + + /* Read the data and store them in the OUT file */ + + if (Info_h.biBitCount == 24) { + numcomps = 3; + color_space = CLRSPC_SRGB; + /* initialize image components */ + memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t)); + for(i = 0; i < numcomps; i++) { + cmptparm[i].prec = 8; + cmptparm[i].bpp = 8; + cmptparm[i].sgnd = 0; + cmptparm[i].dx = subsampling_dx; + cmptparm[i].dy = subsampling_dy; + cmptparm[i].w = w; + cmptparm[i].h = h; + } + /* create the image */ + image = opj_image_create(numcomps, &cmptparm[0], color_space); + if(!image) { + fclose(IN); + return NULL; + } + + /* set image offset and reference grid */ + image->x0 = parameters->image_offset_x0; + image->y0 = parameters->image_offset_y0; + image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w - 1) * subsampling_dx + 1; + image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h - 1) * subsampling_dy + 1; + + /* set image data */ + + /* Place the cursor at the beginning of the image information */ + fseek(IN, 0, SEEK_SET); + fseek(IN, File_h.bfOffBits, SEEK_SET); + + W = Info_h.biWidth; + H = Info_h.biHeight; + + /* PAD = 4 - (3 * W) % 4; */ + /* PAD = (PAD == 4) ? 0 : PAD; */ + PAD = (3 * W) % 4 ? 4 - (3 * W) % 4 : 0; + + RGB = (unsigned char *) malloc((3 * W + PAD) * H * sizeof(unsigned char)); + + fread(RGB, sizeof(unsigned char), (3 * W + PAD) * H, IN); + + index = 0; + + for(y = 0; y < (int)H; y++) { + unsigned char *scanline = RGB + (3 * W + PAD) * (H - 1 - y); + for(x = 0; x < (int)W; x++) { + unsigned char *pixel = &scanline[3 * x]; + image->comps[0].data[index] = pixel[2]; /* R */ + image->comps[1].data[index] = pixel[1]; /* G */ + image->comps[2].data[index] = pixel[0]; /* B */ + index++; + } + } + + free(RGB); + + } else if (Info_h.biBitCount == 8 && Info_h.biCompression == 0) { + table_R = (unsigned char *) malloc(256 * sizeof(unsigned char)); + table_G = (unsigned char *) malloc(256 * sizeof(unsigned char)); + table_B = (unsigned char *) malloc(256 * sizeof(unsigned char)); + + for (j = 0; j < Info_h.biClrUsed; j++) { + table_B[j] = getc(IN); + table_G[j] = getc(IN); + table_R[j] = getc(IN); + getc(IN); + if (table_R[j] != table_G[j] && table_R[j] != table_B[j] && table_G[j] != table_B[j]) + gray_scale = 0; + } + + /* Place the cursor at the beginning of the image information */ + fseek(IN, 0, SEEK_SET); + fseek(IN, File_h.bfOffBits, SEEK_SET); + + W = Info_h.biWidth; + H = Info_h.biHeight; + if (Info_h.biWidth % 2) + W++; + + numcomps = gray_scale ? 1 : 3; + color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB; + /* initialize image components */ + memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t)); + for(i = 0; i < numcomps; i++) { + cmptparm[i].prec = 8; + cmptparm[i].bpp = 8; + cmptparm[i].sgnd = 0; + cmptparm[i].dx = subsampling_dx; + cmptparm[i].dy = subsampling_dy; + cmptparm[i].w = w; + cmptparm[i].h = h; + } + /* create the image */ + image = opj_image_create(numcomps, &cmptparm[0], color_space); + if(!image) { + fclose(IN); + return NULL; + } + + /* set image offset and reference grid */ + image->x0 = parameters->image_offset_x0; + image->y0 = parameters->image_offset_y0; + image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w - 1) * subsampling_dx + 1; + image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h - 1) * subsampling_dy + 1; + + /* set image data */ + + RGB = (unsigned char *) malloc(W * H * sizeof(unsigned char)); + + fread(RGB, sizeof(unsigned char), W * H, IN); + if (gray_scale) { + index = 0; + for (j = 0; j < W * H; j++) { + if ((j % W < W - 1 && Info_h.biWidth % 2) || !(Info_h.biWidth % 2)) { + image->comps[0].data[index] = table_R[RGB[W * H - ((j) / (W) + 1) * W + (j) % (W)]]; + index++; + } + } + + } else { + index = 0; + for (j = 0; j < W * H; j++) { + if ((j % W < W - 1 && Info_h.biWidth % 2) || !(Info_h.biWidth % 2)) { + unsigned char pixel_index = RGB[W * H - ((j) / (W) + 1) * W + (j) % (W)]; + image->comps[0].data[index] = table_R[pixel_index]; + image->comps[1].data[index] = table_G[pixel_index]; + image->comps[2].data[index] = table_B[pixel_index]; + index++; + } + } + } + free(RGB); + free(table_R); + free(table_G); + free(table_B); + } else if (Info_h.biBitCount == 8 && Info_h.biCompression == 1) { + table_R = (unsigned char *) malloc(256 * sizeof(unsigned char)); + table_G = (unsigned char *) malloc(256 * sizeof(unsigned char)); + table_B = (unsigned char *) malloc(256 * sizeof(unsigned char)); + + for (j = 0; j < Info_h.biClrUsed; j++) { + table_B[j] = getc(IN); + table_G[j] = getc(IN); + table_R[j] = getc(IN); + getc(IN); + if (table_R[j] != table_G[j] && table_R[j] != table_B[j] && table_G[j] != table_B[j]) + gray_scale = 0; + } + + numcomps = gray_scale ? 1 : 3; + color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB; + /* initialize image components */ + memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t)); + for(i = 0; i < numcomps; i++) { + cmptparm[i].prec = 8; + cmptparm[i].bpp = 8; + cmptparm[i].sgnd = 0; + cmptparm[i].dx = subsampling_dx; + cmptparm[i].dy = subsampling_dy; + cmptparm[i].w = w; + cmptparm[i].h = h; + } + /* create the image */ + image = opj_image_create(numcomps, &cmptparm[0], color_space); + if(!image) { + fclose(IN); + return NULL; + } + + /* set image offset and reference grid */ + image->x0 = parameters->image_offset_x0; + image->y0 = parameters->image_offset_y0; + image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w - 1) * subsampling_dx + 1; + image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h - 1) * subsampling_dy + 1; + + /* set image data */ + + /* Place the cursor at the beginning of the image information */ + fseek(IN, 0, SEEK_SET); + fseek(IN, File_h.bfOffBits, SEEK_SET); + + RGB = (unsigned char *) malloc(Info_h.biWidth * Info_h.biHeight * sizeof(unsigned char)); + + while (not_end_file) { + v = getc(IN); + if (v) { + v2 = getc(IN); + for (i = 0; i < (int) v; i++) { + RGB[line * Info_h.biWidth + col] = v2; + col++; + } + } else { + v = getc(IN); + switch (v) { + case 0: + col = 0; + line++; + break; + case 1: + line++; + not_end_file = 0; + break; + case 2: + fprintf(stderr,"No Delta supported\n"); + opj_image_destroy(image); + fclose(IN); + return NULL; + default: + for (i = 0; i < v; i++) { + v2 = getc(IN); + RGB[line * Info_h.biWidth + col] = v2; + col++; + } + if (v % 2) + v2 = getc(IN); + break; + } + } + } + if (gray_scale) { + index = 0; + for (line = 0; line < Info_h.biHeight; line++) { + for (col = 0; col < Info_h.biWidth; col++) { + image->comps[0].data[index] = table_R[(int)RGB[(Info_h.biHeight - line - 1) * Info_h.biWidth + col]]; + index++; + } + } + } else { + index = 0; + for (line = 0; line < Info_h.biHeight; line++) { + for (col = 0; col < Info_h.biWidth; col++) { + unsigned char pixel_index = (int)RGB[(Info_h.biHeight - line - 1) * Info_h.biWidth + col]; + image->comps[0].data[index] = table_R[pixel_index]; + image->comps[1].data[index] = table_G[pixel_index]; + image->comps[2].data[index] = table_B[pixel_index]; + index++; + } + } + } + free(RGB); + free(table_R); + free(table_G); + free(table_B); + } else { + fprintf(stderr, + "Other system than 24 bits/pixels or 8 bits (no RLE coding) is not yet implemented [%d]\n", Info_h.biBitCount); + } + fclose(IN); + } + + return image; +} + +int imagetobmp(opj_image_t * image, const char *outfile) { + int w, h; + int i, pad; + FILE *fdest = NULL; + int adjustR, adjustG, adjustB; + + if (image->numcomps == 3 && image->comps[0].dx == image->comps[1].dx + && image->comps[1].dx == image->comps[2].dx + && image->comps[0].dy == image->comps[1].dy + && image->comps[1].dy == image->comps[2].dy + && image->comps[0].prec == image->comps[1].prec + && image->comps[1].prec == image->comps[2].prec) { + + /* -->> -->> -->> -->> + 24 bits color + <<-- <<-- <<-- <<-- */ + + fdest = fopen(outfile, "wb"); + if (!fdest) { + fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile); + return 1; + } + + w = image->comps[0].w; + h = image->comps[0].h; + + fprintf(fdest, "BM"); + + /* FILE HEADER */ + /* ------------- */ + fprintf(fdest, "%c%c%c%c", + (unsigned char) (h * w * 3 + 3 * h * (w % 2) + 54) & 0xff, + (unsigned char) ((h * w * 3 + 3 * h * (w % 2) + 54) >> 8) & 0xff, + (unsigned char) ((h * w * 3 + 3 * h * (w % 2) + 54) >> 16) & 0xff, + (unsigned char) ((h * w * 3 + 3 * h * (w % 2) + 54) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff,((54) >> 16) & 0xff, ((54) >> 24) & 0xff); + + /* INFO HEADER */ + /* ------------- */ + fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff, ((40) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (unsigned char) ((w) & 0xff), + (unsigned char) ((w) >> 8) & 0xff, + (unsigned char) ((w) >> 16) & 0xff, + (unsigned char) ((w) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (unsigned char) ((h) & 0xff), + (unsigned char) ((h) >> 8) & 0xff, + (unsigned char) ((h) >> 16) & 0xff, + (unsigned char) ((h) >> 24) & 0xff); + fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff); + fprintf(fdest, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff); + fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (unsigned char) (3 * h * w + 3 * h * (w % 2)) & 0xff, + (unsigned char) ((h * w * 3 + 3 * h * (w % 2)) >> 8) & 0xff, + (unsigned char) ((h * w * 3 + 3 * h * (w % 2)) >> 16) & 0xff, + (unsigned char) ((h * w * 3 + 3 * h * (w % 2)) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff); + + if (image->comps[0].prec > 8) { + adjustR = image->comps[0].prec - 8; + printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n", image->comps[0].prec); + } + else + adjustR = 0; + if (image->comps[1].prec > 8) { + adjustG = image->comps[1].prec - 8; + printf("BMP CONVERSION: Truncating component 1 from %d bits to 8 bits\n", image->comps[1].prec); + } + else + adjustG = 0; + if (image->comps[2].prec > 8) { + adjustB = image->comps[2].prec - 8; + printf("BMP CONVERSION: Truncating component 2 from %d bits to 8 bits\n", image->comps[2].prec); + } + else + adjustB = 0; + + for (i = 0; i < w * h; i++) { + unsigned char rc, gc, bc; + int r, g, b; + + r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)]; + r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0); + rc = (unsigned char) ((r >> adjustR)+((r >> (adjustR-1))%2)); + g = image->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)]; + g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0); + gc = (unsigned char) ((g >> adjustG)+((g >> (adjustG-1))%2)); + b = image->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)]; + b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0); + bc = (unsigned char) ((b >> adjustB)+((b >> (adjustB-1))%2)); + + fprintf(fdest, "%c%c%c", bc, gc, rc); + + if ((i + 1) % w == 0) { + for (pad = (3 * w) % 4 ? 4 - (3 * w) % 4 : 0; pad > 0; pad--) /* ADD */ + fprintf(fdest, "%c", 0); + } + } + fclose(fdest); + } else { /* Gray-scale */ + + /* -->> -->> -->> -->> + 8 bits non code (Gray scale) + <<-- <<-- <<-- <<-- */ + + fdest = fopen(outfile, "wb"); + w = image->comps[0].w; + h = image->comps[0].h; + + fprintf(fdest, "BM"); + + /* FILE HEADER */ + /* ------------- */ + fprintf(fdest, "%c%c%c%c", (unsigned char) (h * w + 54 + 1024 + h * (w % 2)) & 0xff, + (unsigned char) ((h * w + 54 + 1024 + h * (w % 2)) >> 8) & 0xff, + (unsigned char) ((h * w + 54 + 1024 + h * (w % 2)) >> 16) & 0xff, + (unsigned char) ((h * w + 54 + 1024 + w * (w % 2)) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (54 + 1024) & 0xff, ((54 + 1024) >> 8) & 0xff, + ((54 + 1024) >> 16) & 0xff, + ((54 + 1024) >> 24) & 0xff); + + /* INFO HEADER */ + /* ------------- */ + fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff, ((40) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (unsigned char) ((w) & 0xff), + (unsigned char) ((w) >> 8) & 0xff, + (unsigned char) ((w) >> 16) & 0xff, + (unsigned char) ((w) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (unsigned char) ((h) & 0xff), + (unsigned char) ((h) >> 8) & 0xff, + (unsigned char) ((h) >> 16) & 0xff, + (unsigned char) ((h) >> 24) & 0xff); + fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff); + fprintf(fdest, "%c%c", (8) & 0xff, ((8) >> 8) & 0xff); + fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (unsigned char) (h * w + h * (w % 2)) & 0xff, + (unsigned char) ((h * w + h * (w % 2)) >> 8) & 0xff, + (unsigned char) ((h * w + h * (w % 2)) >> 16) & 0xff, + (unsigned char) ((h * w + h * (w % 2)) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff, ((256) >> 16) & 0xff, ((256) >> 24) & 0xff); + fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff, ((256) >> 16) & 0xff, ((256) >> 24) & 0xff); + + if (image->comps[0].prec > 8) { + adjustR = image->comps[0].prec - 8; + printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n", image->comps[0].prec); + }else + adjustR = 0; + + for (i = 0; i < 256; i++) { + fprintf(fdest, "%c%c%c%c", i, i, i, 0); + } + + for (i = 0; i < w * h; i++) { + unsigned char rc; + int r; + + r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)]; + r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0); + rc = (unsigned char) ((r >> adjustR)+((r >> (adjustR-1))%2)); + + fprintf(fdest, "%c", rc); + + if ((i + 1) % w == 0) { + for (pad = w % 4 ? 4 - w % 4 : 0; pad > 0; pad--) /* ADD */ + fprintf(fdest, "%c", 0); + } + } + fclose(fdest); + } + + return 0; +} + +/* -->> -->> -->> -->> + +PGX IMAGE FORMAT + +<<-- <<-- <<-- <<-- */ + + +unsigned char readuchar(FILE * f) +{ + unsigned char c1; + fread(&c1, 1, 1, f); + return c1; +} + +unsigned short readushort(FILE * f, int bigendian) +{ + unsigned char c1, c2; + fread(&c1, 1, 1, f); + fread(&c2, 1, 1, f); + if (bigendian) + return (c1 << 8) + c2; + else + return (c2 << 8) + c1; +} + +unsigned int readuint(FILE * f, int bigendian) +{ + unsigned char c1, c2, c3, c4; + fread(&c1, 1, 1, f); + fread(&c2, 1, 1, f); + fread(&c3, 1, 1, f); + fread(&c4, 1, 1, f); + if (bigendian) + return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; + else + return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1; +} + +opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) { + FILE *f = NULL; + int w, h, prec; + int i, numcomps, max; + OPJ_COLOR_SPACE color_space; + opj_image_cmptparm_t cmptparm; /* maximum of 1 component */ + opj_image_t * image = NULL; + + char endian1,endian2,sign; + char signtmp[32]; + + char temp[32]; + int bigendian; + opj_image_comp_t *comp = NULL; + + numcomps = 1; + color_space = CLRSPC_GRAY; + + memset(&cmptparm, 0, sizeof(opj_image_cmptparm_t)); + + max = 0; + + f = fopen(filename, "rb"); + if (!f) { + fprintf(stderr, "Failed to open %s for reading !\n", filename); + return NULL; + } + + fseek(f, 0, SEEK_SET); + fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d",temp,&endian1,&endian2,signtmp,&prec,temp,&w,temp,&h); + + i=0; + sign='+'; + while (signtmp[i]!='\0') { + if (signtmp[i]=='-') sign='-'; + i++; + } + + fgetc(f); + if (endian1=='M' && endian2=='L') { + bigendian = 1; + } else if (endian2=='M' && endian1=='L') { + bigendian = 0; + } else { + fprintf(stderr, "Bad pgx header, please check input file\n"); + return NULL; + } + + /* initialize image component */ + + cmptparm.x0 = parameters->image_offset_x0; + cmptparm.y0 = parameters->image_offset_y0; + cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 : cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1; + cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 : cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1; + + if (sign == '-') { + cmptparm.sgnd = 1; + } else { + cmptparm.sgnd = 0; + } + cmptparm.prec = prec; + cmptparm.bpp = prec; + cmptparm.dx = parameters->subsampling_dx; + cmptparm.dy = parameters->subsampling_dy; + + /* create the image */ + image = opj_image_create(numcomps, &cmptparm, color_space); + if(!image) { + fclose(f); + return NULL; + } + /* set image offset and reference grid */ + image->x0 = cmptparm.x0; + image->y0 = cmptparm.x0; + image->x1 = cmptparm.w; + image->y1 = cmptparm.h; + + /* set image data */ + + comp = &image->comps[0]; + + for (i = 0; i < w * h; i++) { + int v; + if (comp->prec <= 8) { + if (!comp->sgnd) { + v = readuchar(f); + } else { + v = (char) readuchar(f); + } + } else if (comp->prec <= 16) { + if (!comp->sgnd) { + v = readushort(f, bigendian); + } else { + v = (short) readushort(f, bigendian); + } + } else { + if (!comp->sgnd) { + v = readuint(f, bigendian); + } else { + v = (int) readuint(f, bigendian); + } + } + if (v > max) + max = v; + comp->data[i] = v; + } + fclose(f); + comp->bpp = int_floorlog2(max) + 1; + + return image; +} + +int imagetopgx(opj_image_t * image, const char *outfile) { + int w, h; + int i, j, compno; + FILE *fdest = NULL; + + for (compno = 0; compno < image->numcomps; compno++) { + opj_image_comp_t *comp = &image->comps[compno]; + char bname[256]; /* buffer for name */ + char *name = bname; /* pointer */ + int nbytes = 0; + const size_t olen = strlen(outfile); + const size_t dotpos = olen - 4; + const size_t total = dotpos + 1 + 1 + 4; /* '-' + '[1-3]' + '.pgx' */ + if( outfile[dotpos] != '.' ) { + /* `pgx` was recognized but there is no dot at expected position */ + fprintf(stderr, "ERROR -> Impossible happen." ); + return 1; + } + if( total > 256 ) { + name = (char*)malloc(total+1); + } + strncpy(name, outfile, dotpos); + if (image->numcomps > 1) { + sprintf(name+dotpos, "-%d.pgx", compno); + } else { + strcpy(name+dotpos, ".pgx"); + } + fdest = fopen(name, "wb"); + if (!fdest) { + fprintf(stderr, "ERROR -> failed to open %s for writing\n", name); + return 1; + } + /* dont need name anymore */ + if( total > 256 ) { + free(name); + } + + w = image->comps[compno].w; + h = image->comps[compno].h; + + fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec, w, h); + if (comp->prec <= 8) { + nbytes = 1; + } else if (comp->prec <= 16) { + nbytes = 2; + } else { + nbytes = 4; + } + for (i = 0; i < w * h; i++) { + int v = image->comps[compno].data[i]; + for (j = nbytes - 1; j >= 0; j--) { + char byte = (char) (v >> (j * 8)); + fwrite(&byte, 1, 1, fdest); + } + } + fclose(fdest); + } + + return 0; +} + +/* -->> -->> -->> -->> + +PNM IMAGE FORMAT + +<<-- <<-- <<-- <<-- */ + +opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) { + int subsampling_dx = parameters->subsampling_dx; + int subsampling_dy = parameters->subsampling_dy; + + FILE *f = NULL; + int i, compno, numcomps, w, h; + OPJ_COLOR_SPACE color_space; + opj_image_cmptparm_t cmptparm[3]; /* maximum of 3 components */ + opj_image_t * image = NULL; + char value; + + f = fopen(filename, "rb"); + if (!f) { + fprintf(stderr, "Failed to open %s for reading !!\n", filename); + return 0; + } + + if (fgetc(f) != 'P') + return 0; + value = fgetc(f); + + switch(value) { + case '2': /* greyscale image type */ + case '5': + numcomps = 1; + color_space = CLRSPC_GRAY; + break; + + case '3': /* RGB image type */ + case '6': + numcomps = 3; + color_space = CLRSPC_SRGB; + break; + + default: + fclose(f); + return NULL; + } + + fgetc(f); + + /* skip comments */ + while(fgetc(f) == '#') while(fgetc(f) != '\n'); + + fseek(f, -1, SEEK_CUR); + fscanf(f, "%d %d\n255", &w, &h); + fgetc(f); /* */ + + /* initialize image components */ + memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t)); + for(i = 0; i < numcomps; i++) { + cmptparm[i].prec = 8; + cmptparm[i].bpp = 8; + cmptparm[i].sgnd = 0; + cmptparm[i].dx = subsampling_dx; + cmptparm[i].dy = subsampling_dy; + cmptparm[i].w = w; + cmptparm[i].h = h; + } + /* create the image */ + image = opj_image_create(numcomps, &cmptparm[0], color_space); + if(!image) { + fclose(f); + return NULL; + } + + /* set image offset and reference grid */ + image->x0 = parameters->image_offset_x0; + image->y0 = parameters->image_offset_y0; + image->x1 = parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1; + image->y1 = parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1; + + /* set image data */ + + if ((value == '2') || (value == '3')) { /* ASCII */ + for (i = 0; i < w * h; i++) { + for(compno = 0; compno < numcomps; compno++) { + unsigned int index = 0; + fscanf(f, "%u", &index); + /* compno : 0 = GREY, (0, 1, 2) = (R, G, B) */ + image->comps[compno].data[i] = index; + } + } + } else if ((value == '5') || (value == '6')) { /* BINARY */ + for (i = 0; i < w * h; i++) { + for(compno = 0; compno < numcomps; compno++) { + unsigned char index = 0; + fread(&index, 1, 1, f); + /* compno : 0 = GREY, (0, 1, 2) = (R, G, B) */ + image->comps[compno].data[i] = index; + } + } + } + + fclose(f); + + return image; +} + +int imagetopnm(opj_image_t * image, const char *outfile) { + int w, wr, h, hr, max; + int i, compno; + int adjustR, adjustG, adjustB, adjustX; + FILE *fdest = NULL; + char S2; + const char *tmp = outfile; + + while (*tmp) { + tmp++; + } + tmp--; + tmp--; + S2 = *tmp; + + if (image->numcomps == 3 && image->comps[0].dx == image->comps[1].dx + && image->comps[1].dx == image->comps[2].dx + && image->comps[0].dy == image->comps[1].dy + && image->comps[1].dy == image->comps[2].dy + && image->comps[0].prec == image->comps[1].prec + && image->comps[1].prec == image->comps[2].prec + && S2 !='g' && S2 !='G') { + + fdest = fopen(outfile, "wb"); + if (!fdest) { + fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile); + return 1; + } + + w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx); + wr = image->comps[0].w; + + h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy); + hr = image->comps[0].h; + + max = image->comps[0].prec > 8 ? 255 : (1 << image->comps[0].prec) - 1; + + image->comps[0].x0 = int_ceildivpow2(image->comps[0].x0 - int_ceildiv(image->x0, image->comps[0].dx), image->comps[0].factor); + image->comps[0].y0 = int_ceildivpow2(image->comps[0].y0 - int_ceildiv(image->y0, image->comps[0].dy), image->comps[0].factor); + + fprintf(fdest, "P6\n%d %d\n%d\n", wr, hr, max); + + if (image->comps[0].prec > 8) { + adjustR = image->comps[0].prec - 8; + printf("PNM CONVERSION: Truncating component 0 from %d bits to 8 bits\n", image->comps[0].prec); + } + else + adjustR = 0; + if (image->comps[1].prec > 8) { + adjustG = image->comps[1].prec - 8; + printf("PNM CONVERSION: Truncating component 1 from %d bits to 8 bits\n", image->comps[1].prec); + } + else + adjustG = 0; + if (image->comps[2].prec > 8) { + adjustB = image->comps[2].prec - 8; + printf("PNM CONVERSION: Truncating component 2 from %d bits to 8 bits\n", image->comps[2].prec); + } + else + adjustB = 0; + + + for (i = 0; i < wr * hr; i++) { + int r, g, b; + unsigned char rc,gc,bc; + r = image->comps[0].data[i]; + r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0); + rc = (unsigned char) ((r >> adjustR)+((r >> (adjustR-1))%2)); + + g = image->comps[1].data[i]; + g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0); + gc = (unsigned char) ((g >> adjustG)+((g >> (adjustG-1))%2)); + + b = image->comps[2].data[i]; + b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0); + bc = (unsigned char) ((b >> adjustB)+((b >> (adjustB-1))%2)); + + fprintf(fdest, "%c%c%c", rc, gc, bc); + } + fclose(fdest); + + } else { + int ncomp=(S2=='g' || S2=='G')?1:image->numcomps; + if (image->numcomps > ncomp) { + fprintf(stderr,"WARNING -> [PGM files] Only the first component\n"); + fprintf(stderr," is written to the file\n"); + } + for (compno = 0; compno < ncomp; compno++) { + char name[256]; + if (ncomp > 1) { + sprintf(name, "%d.%s", compno, outfile); + } else { + sprintf(name, "%s", outfile); + } + + fdest = fopen(name, "wb"); + if (!fdest) { + fprintf(stderr, "ERROR -> failed to open %s for writing\n", name); + return 1; + } + + w = int_ceildiv(image->x1 - image->x0, image->comps[compno].dx); + wr = image->comps[compno].w; + + h = int_ceildiv(image->y1 - image->y0, image->comps[compno].dy); + hr = image->comps[compno].h; + + max = image->comps[compno].prec > 8 ? 255 : (1 << image->comps[compno].prec) - 1; + + image->comps[compno].x0 = int_ceildivpow2(image->comps[compno].x0 - int_ceildiv(image->x0, image->comps[compno].dx), image->comps[compno].factor); + image->comps[compno].y0 = int_ceildivpow2(image->comps[compno].y0 - int_ceildiv(image->y0, image->comps[compno].dy), image->comps[compno].factor); + + fprintf(fdest, "P5\n%d %d\n%d\n", wr, hr, max); + + if (image->comps[compno].prec > 8) { + adjustX = image->comps[0].prec - 8; + printf("PNM CONVERSION: Truncating component %d from %d bits to 8 bits\n",compno, image->comps[compno].prec); + } + else + adjustX = 0; + + for (i = 0; i < wr * hr; i++) { + int l; + unsigned char lc; + l = image->comps[compno].data[i]; + l += (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0); + lc = (unsigned char) ((l >> adjustX)+((l >> (adjustX-1))%2)); + fprintf(fdest, "%c", lc); + } + fclose(fdest); + } + } + + return 0; +} + +#ifdef HAVE_LIBTIFF +/* -->> -->> -->> -->> + + TIFF IMAGE FORMAT + + <<-- <<-- <<-- <<-- */ + +typedef struct tiff_infoheader{ + DWORD tiWidth; // Width of Image in pixel + DWORD tiHeight; // Height of Image in pixel + DWORD tiPhoto; // Photometric + WORD tiBps; // Bits per sample + WORD tiSf; // Sample Format + WORD tiSpp; // Sample per pixel 1-bilevel,gray scale , 2- RGB + WORD tiPC; // Planar config (1-Interleaved, 2-Planarcomp) +}tiff_infoheader_t; + +int imagetotif(opj_image_t * image, const char *outfile) { + int width, height, imgsize; + int bps,index,adjust = 0; + int last_i=0; + TIFF *tif; + tdata_t buf; + tstrip_t strip; + tsize_t strip_size; + + if (image->numcomps == 3 && image->comps[0].dx == image->comps[1].dx + && image->comps[1].dx == image->comps[2].dx + && image->comps[0].dy == image->comps[1].dy + && image->comps[1].dy == image->comps[2].dy + && image->comps[0].prec == image->comps[1].prec + && image->comps[1].prec == image->comps[2].prec) { + + /* -->> -->> -->> + RGB color + <<-- <<-- <<-- */ + + tif = TIFFOpen(outfile, "wb"); + if (!tif) { + fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile); + return 1; + } + + width = image->comps[0].w; + height = image->comps[0].h; + imgsize = width * height ; + bps = image->comps[0].prec; + /* Set tags */ + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width); + TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps); + TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1); + + /* Get a buffer for the data */ + strip_size=TIFFStripSize(tif); + buf = _TIFFmalloc(strip_size); + index=0; + adjust = image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0; + for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) { + unsigned char *dat8; + tsize_t i, ssize; + ssize = TIFFStripSize(tif); + dat8 = (unsigned char*)buf; + if (image->comps[0].prec == 8){ + for (i=0; icomps[0].data[index]; + g = image->comps[1].data[index]; + b = image->comps[2].data[index]; + if (image->comps[0].sgnd){ + r += adjust; + g += adjust; + b += adjust; + } + dat8[i+0] = r ; // R + dat8[i+1] = g ; // G + dat8[i+2] = b ; // B + index++; + last_i = i+3; + }else + break; + } + if(last_i < ssize){ + for (i=last_i; icomps[0].data[index]; + g = image->comps[1].data[index]; + b = image->comps[2].data[index]; + if (image->comps[0].sgnd){ + r += adjust; + g += adjust; + b += adjust; + } + dat8[i+0] = r ; // R + if(i+1 comps[0].prec == 12){ + for (i=0; icomps[0].data[index]; + g = image->comps[1].data[index]; + b = image->comps[2].data[index]; + r1 = image->comps[0].data[index+1]; + g1 = image->comps[1].data[index+1]; + b1 = image->comps[2].data[index+1]; + if (image->comps[0].sgnd){ + r += adjust; + g += adjust; + b += adjust; + r1 += adjust; + g1 += adjust; + b1 += adjust; + } + dat8[i+0] = (r >> 4); + dat8[i+1] = ((r & 0x0f) << 4 )|((g >> 8)& 0x0f); + dat8[i+2] = g ; + dat8[i+3] = (b >> 4); + dat8[i+4] = ((b & 0x0f) << 4 )|((r1 >> 8)& 0x0f); + dat8[i+5] = r1; + dat8[i+6] = (g1 >> 4); + dat8[i+7] = ((g1 & 0x0f)<< 4 )|((b1 >> 8)& 0x0f); + dat8[i+8] = b1; + index+=2; + last_i = i+9; + }else + break; + } + if(last_i < ssize){ + for (i= last_i; icomps[0].data[index]; + g = image->comps[1].data[index]; + b = image->comps[2].data[index]; + r1 = image->comps[0].data[index+1]; + g1 = image->comps[1].data[index+1]; + b1 = image->comps[2].data[index+1]; + if (image->comps[0].sgnd){ + r += adjust; + g += adjust; + b += adjust; + r1 += adjust; + g1 += adjust; + b1 += adjust; + } + dat8[i+0] = (r >> 4); + if(i+1 > 8)& 0x0f); else break; + if(i+2 > 4); else break; + if(i+4 > 8)& 0x0f);else break; + if(i+5 > 4); else break; + if(i+7 > 8)& 0x0f);else break; + if(i+8 comps[0].prec == 16){ + for (i=0 ; icomps[0].data[index]; + g = image->comps[1].data[index]; + b = image->comps[2].data[index]; + if (image->comps[0].sgnd){ + r += adjust; + g += adjust; + b += adjust; + } + dat8[i+0] = r;//LSB + dat8[i+1] = (r >> 8);//MSB + dat8[i+2] = g; + dat8[i+3] = (g >> 8); + dat8[i+4] = b; + dat8[i+5] = (b >> 8); + index++; + last_i = i+6; + }else + break; + } + if(last_i < ssize){ + for (i=0 ; icomps[0].data[index]; + g = image->comps[1].data[index]; + b = image->comps[2].data[index]; + if (image->comps[0].sgnd){ + r += adjust; + g += adjust; + b += adjust; + } + dat8[i+0] = r;//LSB + if(i+1 > 8);else break;//MSB + if(i+2 > 8);else break; + if(i+4 > 8);else break; + index++; + }else + break; + } + } + }else{ + fprintf(stderr,"Bits=%d, Only 8,12,16 bits implemented\n",image->comps[0].prec); + fprintf(stderr,"Aborting\n"); + return 1; + } + (void)TIFFWriteEncodedStrip(tif, strip, (void*)buf, strip_size); + } + _TIFFfree((void*)buf); + TIFFClose(tif); + }else if (image->numcomps == 1){ + /* -->> -->> -->> + Black and White + <<-- <<-- <<-- */ + + tif = TIFFOpen(outfile, "wb"); + if (!tif) { + fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile); + return 1; + } + + width = image->comps[0].w; + height = image->comps[0].h; + imgsize = width * height; + bps = image->comps[0].prec; + + /* Set tags */ + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width); + TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps); + TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1); + + /* Get a buffer for the data */ + strip_size = TIFFStripSize(tif); + buf = _TIFFmalloc(strip_size); + index = 0; + for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) { + unsigned char *dat8; + tsize_t i; + dat8 = (unsigned char*)buf; + if (image->comps[0].prec == 8){ + for (i=0; icomps[0].data[index]; + if (image->comps[0].sgnd){ + r += adjust; + } + dat8[i+0] = r; + index++; + }else + break; + } + }else if (image->comps[0].prec == 12){ + for (i = 0; icomps[0].data[index]; + r1 = image->comps[0].data[index+1]; + if (image->comps[0].sgnd){ + r += adjust; + r1 += adjust; + } + dat8[i+0] = (r >> 4); + dat8[i+1] = ((r & 0x0f) << 4 )|((r1 >> 8)& 0x0f); + dat8[i+2] = r1 ; + index+=2; + }else + break; + } + }else if (image->comps[0].prec == 16){ + for (i=0; icomps[0].data[index]; + if (image->comps[0].sgnd){ + r += adjust; + } + dat8[i+0] = r; + dat8[i+1] = r >> 8; + index++; + }else + break; + } + }else{ + fprintf(stderr,"TIFF file creation. Bits=%d, Only 8,12,16 bits implemented\n",image->comps[0].prec); + fprintf(stderr,"Aborting\n"); + return 1; + } + (void)TIFFWriteEncodedStrip(tif, strip, (void*)buf, strip_size); + } + _TIFFfree(buf); + TIFFClose(tif); + }else{ + fprintf(stderr,"TIFF file creation. Bad color format. Only RGB & Grayscale has been implemented\n"); + fprintf(stderr,"Aborting\n"); + return 1; + } + return 0; +} + +opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters) +{ + int subsampling_dx = parameters->subsampling_dx; + int subsampling_dy = parameters->subsampling_dy; + TIFF *tif; + tiff_infoheader_t Info; + tdata_t buf; + tstrip_t strip; + tsize_t strip_size; + int j, numcomps, w, h,index; + OPJ_COLOR_SPACE color_space; + opj_image_cmptparm_t cmptparm[3]; + opj_image_t * image = NULL; + int imgsize = 0; + + tif = TIFFOpen(filename, "r"); + + if (!tif) { + fprintf(stderr, "Failed to open %s for reading\n", filename); + return 0; + } + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &Info.tiWidth); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &Info.tiHeight); + TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &Info.tiBps); + TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &Info.tiSf); + TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &Info.tiSpp); + Info.tiPhoto = 0; + TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &Info.tiPhoto); + TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &Info.tiPC); + w= Info.tiWidth; + h= Info.tiHeight; + + if (Info.tiPhoto == 2) { + /* -->> -->> -->> + RGB color + <<-- <<-- <<-- */ + + numcomps = 3; + color_space = CLRSPC_SRGB; + /* initialize image components*/ + memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t)); + for(j = 0; j < numcomps; j++) { + if (parameters->cp_cinema) { + cmptparm[j].prec = 12; + cmptparm[j].bpp = 12; + }else{ + cmptparm[j].prec = Info.tiBps; + cmptparm[j].bpp = Info.tiBps; + } + cmptparm[j].sgnd = 0; + cmptparm[j].dx = subsampling_dx; + cmptparm[j].dy = subsampling_dy; + cmptparm[j].w = w; + cmptparm[j].h = h; + } + /* create the image*/ + image = opj_image_create(numcomps, &cmptparm[0], color_space); + if(!image) { + TIFFClose(tif); + return NULL; + } + + /* set image offset and reference grid */ + image->x0 = parameters->image_offset_x0; + image->y0 = parameters->image_offset_y0; + image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w - 1) * subsampling_dx + 1; + image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h - 1) * subsampling_dy + 1; + + buf = _TIFFmalloc(TIFFStripSize(tif)); + strip_size=0; + strip_size=TIFFStripSize(tif); + index = 0; + imgsize = image->comps[0].w * image->comps[0].h ; + /* Read the Image components*/ + for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) { + unsigned char *dat8; + int i, ssize; + ssize = TIFFReadEncodedStrip(tif, strip, buf, strip_size); + dat8 = (unsigned char*)buf; + + if (Info.tiBps==12){ + for (i=0; icomps[0].data[index] = ( dat8[i+0]<<4 ) |(dat8[i+1]>>4); + image->comps[1].data[index] = ((dat8[i+1]& 0x0f)<< 8) | dat8[i+2]; + image->comps[2].data[index] = ( dat8[i+3]<<4) |(dat8[i+4]>>4); + image->comps[0].data[index+1] = ((dat8[i+4]& 0x0f)<< 8) | dat8[i+5]; + image->comps[1].data[index+1] = ( dat8[i+6] <<4) |(dat8[i+7]>>4); + image->comps[2].data[index+1] = ((dat8[i+7]& 0x0f)<< 8) | dat8[i+8]; + index+=2; + }else + break; + } + } + else if( Info.tiBps==16){ + for (i=0; icomps[0].data[index] = ( dat8[i+1] << 8 ) | dat8[i+0]; // R + image->comps[1].data[index] = ( dat8[i+3] << 8 ) | dat8[i+2]; // G + image->comps[2].data[index] = ( dat8[i+5] << 8 ) | dat8[i+4]; // B + if(parameters->cp_cinema){/* Rounding to 12 bits*/ + image->comps[0].data[index] = (image->comps[0].data[index] + 0x08) >> 4 ; + image->comps[1].data[index] = (image->comps[1].data[index] + 0x08) >> 4 ; + image->comps[2].data[index] = (image->comps[2].data[index] + 0x08) >> 4 ; + } + index++; + }else + break; + } + } + else if ( Info.tiBps==8){ + for (i=0; icomps[0].data[index] = dat8[i+0];// R + image->comps[1].data[index] = dat8[i+1];// G + image->comps[2].data[index] = dat8[i+2];// B + if(parameters->cp_cinema){/* Rounding to 12 bits*/ + image->comps[0].data[index] = image->comps[0].data[index] << 4 ; + image->comps[1].data[index] = image->comps[1].data[index] << 4 ; + image->comps[2].data[index] = image->comps[2].data[index] << 4 ; + } + index++; + }else + break; + } + } + else{ + fprintf(stderr,"TIFF file creation. Bits=%d, Only 8,12,16 bits implemented\n",Info.tiBps); + fprintf(stderr,"Aborting\n"); + return NULL; + } + } + + _TIFFfree(buf); + TIFFClose(tif); + }else if(Info.tiPhoto == 1) { + /* -->> -->> -->> + Black and White + <<-- <<-- <<-- */ + + numcomps = 1; + color_space = CLRSPC_GRAY; + /* initialize image components*/ + memset(&cmptparm[0], 0, sizeof(opj_image_cmptparm_t)); + cmptparm[0].prec = Info.tiBps; + cmptparm[0].bpp = Info.tiBps; + cmptparm[0].sgnd = 0; + cmptparm[0].dx = subsampling_dx; + cmptparm[0].dy = subsampling_dy; + cmptparm[0].w = w; + cmptparm[0].h = h; + + /* create the image*/ + image = opj_image_create(numcomps, &cmptparm[0], color_space); + if(!image) { + TIFFClose(tif); + return NULL; + } + /* set image offset and reference grid */ + image->x0 = parameters->image_offset_x0; + image->y0 = parameters->image_offset_y0; + image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w - 1) * subsampling_dx + 1; + image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h - 1) * subsampling_dy + 1; + + buf = _TIFFmalloc(TIFFStripSize(tif)); + strip_size = 0; + strip_size = TIFFStripSize(tif); + index = 0; + imgsize = image->comps[0].w * image->comps[0].h ; + /* Read the Image components*/ + for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) { + unsigned char *dat8; + int i, ssize; + ssize = TIFFReadEncodedStrip(tif, strip, buf, strip_size); + dat8 = (unsigned char*)buf; + + if (Info.tiBps==12){ + for (i=0; icomps[0].data[index] = ( dat8[i+0]<<4 ) |(dat8[i+1]>>4) ; + image->comps[0].data[index+1] = ((dat8[i+1]& 0x0f)<< 8) | dat8[i+2]; + index+=2; + }else + break; + } + } + else if( Info.tiBps==16){ + for (i=0; icomps[0].data[index] = ( dat8[i+1] << 8 ) | dat8[i+0]; + index++; + }else + break; + } + } + else if ( Info.tiBps==8){ + for (i=0; icomps[0].data[index] = dat8[i+0]; + index++; + }else + break; + } + } + else{ + fprintf(stderr,"TIFF file creation. Bits=%d, Only 8,12,16 bits implemented\n",Info.tiBps); + fprintf(stderr,"Aborting\n"); + return NULL; + } + } + + _TIFFfree(buf); + TIFFClose(tif); + }else{ + fprintf(stderr,"TIFF file creation. Bad color format. Only RGB & Grayscale has been implemented\n"); + fprintf(stderr,"Aborting\n"); + return NULL; + } + return image; +} + +#endif /* HAVE_LIBTIFF */ + +/* -->> -->> -->> -->> + + RAW IMAGE FORMAT + + <<-- <<-- <<-- <<-- */ + +opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw_cparameters_t *raw_cp) { + int subsampling_dx = parameters->subsampling_dx; + int subsampling_dy = parameters->subsampling_dy; + + FILE *f = NULL; + int i, compno, numcomps, w, h; + OPJ_COLOR_SPACE color_space; + opj_image_cmptparm_t *cmptparm; + opj_image_t * image = NULL; + unsigned short ch; + + if((! (raw_cp->rawWidth & raw_cp->rawHeight & raw_cp->rawComp & raw_cp->rawBitDepth)) == 0) + { + fprintf(stderr,"\nError: invalid raw image parameters\n"); + fprintf(stderr,"Please use the Format option -F:\n"); + fprintf(stderr,"-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n"); + fprintf(stderr,"Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n"); + fprintf(stderr,"Aborting\n"); + return NULL; + } + + f = fopen(filename, "rb"); + if (!f) { + fprintf(stderr, "Failed to open %s for reading !!\n", filename); + fprintf(stderr,"Aborting\n"); + return NULL; + } + numcomps = raw_cp->rawComp; + color_space = CLRSPC_SRGB; + w = raw_cp->rawWidth; + h = raw_cp->rawHeight; + cmptparm = (opj_image_cmptparm_t*) malloc(numcomps * sizeof(opj_image_cmptparm_t)); + + /* initialize image components */ + memset(&cmptparm[0], 0, numcomps * sizeof(opj_image_cmptparm_t)); + for(i = 0; i < numcomps; i++) { + cmptparm[i].prec = raw_cp->rawBitDepth; + cmptparm[i].bpp = raw_cp->rawBitDepth; + cmptparm[i].sgnd = raw_cp->rawSigned; + cmptparm[i].dx = subsampling_dx; + cmptparm[i].dy = subsampling_dy; + cmptparm[i].w = w; + cmptparm[i].h = h; + } + /* create the image */ + image = opj_image_create(numcomps, &cmptparm[0], color_space); + if(!image) { + fclose(f); + return NULL; + } + /* set image offset and reference grid */ + image->x0 = parameters->image_offset_x0; + image->y0 = parameters->image_offset_y0; + image->x1 = parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1; + image->y1 = parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1; + + if(raw_cp->rawBitDepth <= 8) + { + unsigned char value = 0; + for(compno = 0; compno < numcomps; compno++) { + for (i = 0; i < w * h; i++) { + if (!fread(&value, 1, 1, f)) { + fprintf(stderr,"Error reading raw file. End of file probably reached.\n"); + return NULL; + } + image->comps[compno].data[i] = raw_cp->rawSigned?(char)value:value; + } + } + } + else if(raw_cp->rawBitDepth <= 16) + { + unsigned short value; + for(compno = 0; compno < numcomps; compno++) { + for (i = 0; i < w * h; i++) { + unsigned char temp; + if (!fread(&temp, 1, 1, f)) { + fprintf(stderr,"Error reading raw file. End of file probably reached.\n"); + return NULL; + } + value = temp << 8; + if (!fread(&temp, 1, 1, f)) { + fprintf(stderr,"Error reading raw file. End of file probably reached.\n"); + return NULL; + } + value += temp; + image->comps[compno].data[i] = raw_cp->rawSigned?(short)value:value; + } + } + } + else { + fprintf(stderr,"OpenJPEG cannot encode raw components with bit depth higher than 16 bits.\n"); + return NULL; + } + + if (fread(&ch, 1, 1, f)) { + fprintf(stderr,"Warning. End of raw file not reached... processing anyway\n"); + } + fclose(f); + + return image; +} + +int imagetoraw(opj_image_t * image, const char *outfile) +{ + FILE *rawFile = NULL; + int compno; + int w, h; + int line, row; + int *ptr; + + if((image->numcomps * image->x1 * image->y1) == 0) + { + fprintf(stderr,"\nError: invalid raw image parameters\n"); + return 1; + } + + rawFile = fopen(outfile, "wb"); + if (!rawFile) { + fprintf(stderr, "Failed to open %s for writing !!\n", outfile); + return 1; + } + + fprintf(stdout,"Raw image characteristics: %d components\n", image->numcomps); + + for(compno = 0; compno < image->numcomps; compno++) + { + fprintf(stdout,"Component %d characteristics: %dx%dx%d %s\n", compno, image->comps[compno].w, + image->comps[compno].h, image->comps[compno].prec, image->comps[compno].sgnd==1 ? "signed": "unsigned"); + + w = image->comps[compno].w; + h = image->comps[compno].h; + + if(image->comps[compno].prec <= 8) + { + if(image->comps[compno].sgnd == 1) + { + signed char curr; + int mask = (1 << image->comps[compno].prec) - 1; + ptr = image->comps[compno].data; + for (line = 0; line < h; line++) { + for(row = 0; row < w; row++) { + curr = (signed char) (*ptr & mask); + fwrite(&curr, sizeof(signed char), 1, rawFile); + ptr++; + } + } + } + else if(image->comps[compno].sgnd == 0) + { + unsigned char curr; + int mask = (1 << image->comps[compno].prec) - 1; + ptr = image->comps[compno].data; + for (line = 0; line < h; line++) { + for(row = 0; row < w; row++) { + curr = (unsigned char) (*ptr & mask); + fwrite(&curr, sizeof(unsigned char), 1, rawFile); + ptr++; + } + } + } + } + else if(image->comps[compno].prec <= 16) + { + if(image->comps[compno].sgnd == 1) + { + signed short int curr; + int mask = (1 << image->comps[compno].prec) - 1; + ptr = image->comps[compno].data; + for (line = 0; line < h; line++) { + for(row = 0; row < w; row++) { + unsigned char temp; + curr = (signed short int) (*ptr & mask); + temp = (unsigned char) (curr >> 8); + fwrite(&temp, 1, 1, rawFile); + temp = (unsigned char) curr; + fwrite(&temp, 1, 1, rawFile); + ptr++; + } + } + } + else if(image->comps[compno].sgnd == 0) + { + unsigned short int curr; + int mask = (1 << image->comps[compno].prec) - 1; + ptr = image->comps[compno].data; + for (line = 0; line < h; line++) { + for(row = 0; row < w; row++) { + unsigned char temp; + curr = (unsigned short int) (*ptr & mask); + temp = (unsigned char) (curr >> 8); + fwrite(&temp, 1, 1, rawFile); + temp = (unsigned char) curr; + fwrite(&temp, 1, 1, rawFile); + ptr++; + } + } + } + } + else if (image->comps[compno].prec <= 32) + { + fprintf(stderr,"More than 16 bits per component no handled yet\n"); + return 1; + } + else + { + fprintf(stderr,"Error: invalid precision: %d\n", image->comps[compno].prec); + return 1; + } + } + fclose(rawFile); + return 0; +} + +#ifdef HAVE_LIBPNG + +#define PNG_MAGIC "\x89PNG\x0d\x0a\x1a\x0a" +#define MAGIC_SIZE 8 +/* PNG allows bits per sample: 1, 2, 4, 8, 16 */ + +opj_image_t *pngtoimage(const char *read_idf, opj_cparameters_t * params) +{ + png_structp png; + png_infop info; + double gamma, display_exponent; + int bit_depth, interlace_type,compression_type, filter_type; + int unit; + png_uint_32 resx, resy; + unsigned int i, j; + png_uint_32 width, height; + int color_type, has_alpha, is16; + unsigned char *s; + FILE *reader; + unsigned char **rows; +/* j2k: */ + opj_image_t *image; + opj_image_cmptparm_t cmptparm[4]; + int sub_dx, sub_dy; + unsigned int nr_comp; + int *r, *g, *b, *a; + unsigned char sigbuf[8]; + + if((reader = fopen(read_idf, "rb")) == NULL) + { + fprintf(stderr,"pngtoimage: can not open %s\n",read_idf); + return NULL; + } + image = NULL; png = NULL; rows = NULL; + + if(fread(sigbuf, 1, MAGIC_SIZE, reader) != MAGIC_SIZE + || memcmp(sigbuf, PNG_MAGIC, MAGIC_SIZE) != 0) + { + fprintf(stderr,"pngtoimage: %s is no valid PNG file\n",read_idf); + goto fin; + } +/* libpng-VERSION/example.c: + * PC : screen_gamma = 2.2; + * Mac: screen_gamma = 1.7 or 1.0; +*/ + display_exponent = 2.2; + + if((png = png_create_read_struct(PNG_LIBPNG_VER_STRING, + NULL, NULL, NULL)) == NULL) + goto fin; + if((info = png_create_info_struct(png)) == NULL) + goto fin; + + if(setjmp(png_jmpbuf(png))) + goto fin; + + png_init_io(png, reader); + png_set_sig_bytes(png, MAGIC_SIZE); + + png_read_info(png, info); + + if(png_get_IHDR(png, info, &width, &height, + &bit_depth, &color_type, &interlace_type, + &compression_type, &filter_type) == 0) + goto fin; + +/* png_set_expand(): + * expand paletted images to RGB, expand grayscale images of + * less than 8-bit depth to 8-bit depth, and expand tRNS chunks + * to alpha channels. +*/ + if(color_type == PNG_COLOR_TYPE_PALETTE) + png_set_expand(png); + else + if(color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) + png_set_expand(png); + + if(png_get_valid(png, info, PNG_INFO_tRNS)) + png_set_expand(png); + + is16 = (bit_depth == 16); + +/* GRAY => RGB; GRAY_ALPHA => RGBA +*/ + if(color_type == PNG_COLOR_TYPE_GRAY + || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + { + png_set_gray_to_rgb(png); + color_type = + (color_type == PNG_COLOR_TYPE_GRAY? PNG_COLOR_TYPE_RGB: + PNG_COLOR_TYPE_RGB_ALPHA); + } + if( !png_get_gAMA(png, info, &gamma)) + gamma = 0.45455; + + png_set_gamma(png, display_exponent, gamma); + + png_read_update_info(png, info); + + png_get_pHYs(png, info, &resx, &resy, &unit); + + color_type = png_get_color_type(png, info); + + has_alpha = (color_type == PNG_COLOR_TYPE_RGB_ALPHA); + + nr_comp = 3 + has_alpha; + + bit_depth = png_get_bit_depth(png, info); + + rows = (unsigned char**)calloc(height+1, sizeof(unsigned char*)); + for(i = 0; i < height; ++i) + rows[i] = (unsigned char*)malloc(png_get_rowbytes(png,info)); + + png_read_image(png, rows); + + memset(&cmptparm, 0, 4 * sizeof(opj_image_cmptparm_t)); + + sub_dx = params->subsampling_dx; sub_dy = params->subsampling_dy; + + for(i = 0; i < nr_comp; ++i) + { + cmptparm[i].prec = bit_depth; +/* bits_per_pixel: 8 or 16 */ + cmptparm[i].bpp = bit_depth; + cmptparm[i].sgnd = 0; + cmptparm[i].dx = sub_dx; + cmptparm[i].dy = sub_dy; + cmptparm[i].w = width; + cmptparm[i].h = height; + } + + image = opj_image_create(nr_comp, &cmptparm[0], CLRSPC_SRGB); + + if(image == NULL) goto fin; + + image->x0 = params->image_offset_x0; + image->y0 = params->image_offset_y0; + image->x1 = image->x0 + (width - 1) * sub_dx + 1 + image->x0; + image->y1 = image->y0 + (height - 1) * sub_dy + 1 + image->y0; + + r = image->comps[0].data; + g = image->comps[1].data; + b = image->comps[2].data; + a = image->comps[3].data; + + for(i = 0; i < height; ++i) + { + s = rows[i]; + + for(j = 0; j < width; ++j) + { + if(is16) + { + *r++ = s[0]<<8|s[1]; s += 2; + + *g++ = s[0]<<8|s[1]; s += 2; + + *b++ = s[0]<<8|s[1]; s += 2; + + if(has_alpha) { *a++ = s[0]<<8|s[1]; s += 2; } + + continue; + } + *r++ = *s++; *g++ = *s++; *b++ = *s++; + + if(has_alpha) *a++ = *s++; + } + } +fin: + if(rows) + { + for(i = 0; i < height; ++i) + free(rows[i]); + free(rows); + } + if(png) + png_destroy_read_struct(&png, &info, NULL); + + fclose(reader); + + return image; + +}/* pngtoimage() */ + +int imagetopng(opj_image_t * image, const char *write_idf) +{ + FILE *writer; + png_structp png; + png_infop info; + int *red, *green, *blue, *alpha; + unsigned char *row_buf, *d; + int has_alpha, width, height, nr_comp, color_type; + int adjustR, adjustG, adjustB, x, y, fails, is16, force16; + int opj_prec, prec, ushift, dshift; + unsigned short mask = 0xffff; + png_color_8 sig_bit; + + is16 = force16 = ushift = dshift = 0; fails = 1; + prec = opj_prec = image->comps[0].prec; + + if(prec > 8 && prec < 16) + { + prec = 16; force16 = 1; + } + if(prec != 1 && prec != 2 && prec != 4 && prec != 8 && prec != 16) + { + fprintf(stderr,"imagetopng: can not create %s" + "\n\twrong bit_depth %d\n", write_idf, prec); + return fails; + } + writer = fopen(write_idf, "wb"); + + if(writer == NULL) return fails; + + info = NULL; has_alpha = 0; + +/* Create and initialize the png_struct with the desired error handler + * functions. If you want to use the default stderr and longjump method, + * you can supply NULL for the last three parameters. We also check that + * the library version is compatible with the one used at compile time, + * in case we are using dynamically linked libraries. REQUIRED. +*/ + png = png_create_write_struct(PNG_LIBPNG_VER_STRING, + NULL, NULL, NULL); +/*png_voidp user_error_ptr, user_error_fn, user_warning_fn); */ + + if(png == NULL) goto fin; + +/* Allocate/initialize the image information data. REQUIRED +*/ + info = png_create_info_struct(png); + + if(info == NULL) goto fin; + +/* Set error handling. REQUIRED if you are not supplying your own + * error handling functions in the png_create_write_struct() call. +*/ + if(setjmp(png_jmpbuf(png))) goto fin; + +/* I/O initialization functions is REQUIRED +*/ + png_init_io(png, writer); + +/* Set the image information here. Width and height are up to 2^31, + * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on + * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY, + * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB, + * or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or + * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST + * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. + * REQUIRED +*/ + png_set_compression_level(png, Z_BEST_COMPRESSION); + + if(prec == 16) mask = 0xffff; + else + if(prec == 8) mask = 0x00ff; + else + if(prec == 4) mask = 0x000f; + else + if(prec == 2) mask = 0x0003; + else + if(prec == 1) mask = 0x0001; + + nr_comp = image->numcomps; + + if(nr_comp >= 3 + && image->comps[0].dx == image->comps[1].dx + && image->comps[1].dx == image->comps[2].dx + && image->comps[0].dy == image->comps[1].dy + && image->comps[1].dy == image->comps[2].dy + && image->comps[0].prec == image->comps[1].prec + && image->comps[1].prec == image->comps[2].prec) + { + int v; + + has_alpha = (nr_comp > 3); + + is16 = (prec == 16); + + width = image->comps[0].w; + height = image->comps[0].h; + + red = image->comps[0].data; + green = image->comps[1].data; + blue = image->comps[2].data; + + sig_bit.red = sig_bit.green = sig_bit.blue = prec; + + if(has_alpha) + { + sig_bit.alpha = prec; + alpha = image->comps[3].data; + color_type = PNG_COLOR_TYPE_RGB_ALPHA; + } + else + { + sig_bit.alpha = 0; alpha = NULL; + color_type = PNG_COLOR_TYPE_RGB; + } + png_set_sBIT(png, info, &sig_bit); + + png_set_IHDR(png, info, width, height, prec, + color_type, + PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + +/*=============================*/ + png_write_info(png, info); +/*=============================*/ + if(opj_prec < 8) + { + png_set_packing(png); + } + if(force16) + { + ushift = 16 - opj_prec; dshift = opj_prec - ushift; + } + adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0); + adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0); + adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0); + + row_buf = (unsigned char*)malloc(width * nr_comp * 2); + + for(y = 0; y < height; ++y) + { + d = row_buf; + + for(x = 0; x < width; ++x) + { + if(is16) + { +/* Network byte order */ + v = *red + adjustR; ++red; + + if(force16) { v = (v<>dshift); } + + *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v; + + v = *green + adjustG; ++green; + + if(force16) { v = (v<>dshift); } + + *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v; + + v = *blue + adjustB; ++blue; + + if(force16) { v = (v<>dshift); } + + *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v; + + if(has_alpha) + { + v = *alpha++; + + if(force16) { v = (v<>dshift); } + + *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v; + } + continue; + } + *d++ = (unsigned char)((*red + adjustR) & mask); ++red; + *d++ = (unsigned char)((*green + adjustG) & mask); ++green; + *d++ = (unsigned char)((*blue + adjustB) & mask); ++blue; + + if(has_alpha) + { + *d++ = (unsigned char)(*alpha & mask); ++alpha; + } + } /* for(x) */ + + png_write_row(png, row_buf); + + } /* for(y) */ + free(row_buf); + + }/* nr_comp >= 3 */ + else + if(nr_comp == 1 /* GRAY */ + || ( nr_comp == 2 /* GRAY_ALPHA */ + && image->comps[0].dx == image->comps[1].dx + && image->comps[0].dy == image->comps[1].dy + && image->comps[0].prec == image->comps[1].prec)) + { + int v; + + red = image->comps[0].data; + + if(force16) + { + ushift = 16 - opj_prec; dshift = opj_prec - ushift; + } + + sig_bit.gray = prec; + sig_bit.red = sig_bit.green = sig_bit.blue = sig_bit.alpha = 0; + alpha = NULL; + color_type = PNG_COLOR_TYPE_GRAY; + + if(nr_comp == 2) + { + has_alpha = 1; sig_bit.alpha = prec; + alpha = image->comps[1].data; + color_type = PNG_COLOR_TYPE_GRAY_ALPHA; + } + width = image->comps[0].w; + height = image->comps[0].h; + + png_set_IHDR(png, info, width, height, sig_bit.gray, + color_type, + PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + + png_set_sBIT(png, info, &sig_bit); +/*=============================*/ + png_write_info(png, info); +/*=============================*/ + adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0); + + if(opj_prec < 8) + { + png_set_packing(png); + } + + if(prec > 8) + { +/* Network byte order */ + + + row_buf = (unsigned char*) + malloc(width * nr_comp * sizeof(unsigned short)); + + for(y = 0; y < height; ++y) + { + d = row_buf; + + for(x = 0; x < width; ++x) + { + v = *red + adjustR; ++red; + + if(force16) { v = (v<>dshift); } + + *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)(v & 0xff); + + if(has_alpha) + { + v = *alpha++; + + if(force16) { v = (v<>dshift); } + + *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)(v & 0xff); + } + }/* for(x) */ + png_write_row(png, row_buf); + + } /* for(y) */ + free(row_buf); + } + else /* prec <= 8 */ + { + row_buf = (unsigned char*)calloc(width, nr_comp * 2); + + for(y = 0; y < height; ++y) + { + d = row_buf; + + for(x = 0; x < width; ++x) + { + *d++ = (unsigned char)((*red + adjustR) & mask); ++red; + + if(has_alpha) + { + *d++ = (unsigned char)(*alpha & mask); ++alpha; + } + }/* for(x) */ + + png_write_row(png, row_buf); + + } /* for(y) */ + free(row_buf); + } + } + else + { + fprintf(stderr,"imagetopng: can not create %s\n",write_idf); + goto fin; + } + png_write_end(png, info); + + fails = 0; + +fin: + + if(png) + { + png_destroy_write_struct(&png, &info); + } + fclose(writer); + + if(fails) remove(write_idf); + + return fails; +}/* imagetopng() */ +#endif /* HAVE_LIBPNG */ + diff --git a/contrib/menuetlibc/openjpeg/codec/convert.h b/contrib/menuetlibc/openjpeg/codec/convert.h new file mode 100644 index 0000000000..1dc58d7233 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/convert.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __J2K_CONVERT_H +#define __J2K_CONVERT_H + +/**@name RAW image encoding parameters */ +/*@{*/ +typedef struct raw_cparameters { + /** width of the raw image */ + int rawWidth; + /** height of the raw image */ + int rawHeight; + /** components of the raw image */ + int rawComp; + /** bit depth of the raw image */ + int rawBitDepth; + /** signed/unsigned raw image */ + bool rawSigned; + /*@}*/ +} raw_cparameters_t; + +/* TGA conversion */ +opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters); +int imagetotga(opj_image_t * image, const char *outfile); + +/* BMP conversion */ +opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters); +int imagetobmp(opj_image_t *image, const char *outfile); + +/* TIFF conversion*/ +opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters); +int imagetotif(opj_image_t *image, const char *outfile); +/** +Load a single image component encoded in PGX file format +@param filename Name of the PGX file to load +@param parameters *List ?* +@return Returns a greyscale image if successful, returns NULL otherwise +*/ +opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters); +int imagetopgx(opj_image_t *image, const char *outfile); + +opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters); +int imagetopnm(opj_image_t *image, const char *outfile); + +/* RAW conversion */ +int imagetoraw(opj_image_t * image, const char *outfile); +opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw_cparameters_t *raw_cp); + +/* PNG conversion*/ +extern int imagetopng(opj_image_t *image, const char *write_idf); +extern opj_image_t* pngtoimage(const char *filename, opj_cparameters_t *parameters); + +#endif /* __J2K_CONVERT_H */ + diff --git a/contrib/menuetlibc/openjpeg/codec/image_to_j2k.c b/contrib/menuetlibc/openjpeg/codec/image_to_j2k.c new file mode 100644 index 0000000000..443d4e0768 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/image_to_j2k.c @@ -0,0 +1,1789 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2006-2007, Parvatha Elangovan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include +#include +#include +#include + +#ifdef _WIN32 +#include "windirent.h" +#else +#include +#endif /* _WIN32 */ + +#ifdef _WIN32 +#include +#else +#include +#define _stricmp strcasecmp +#define _strnicmp strncasecmp +#endif /* _WIN32 */ + +#include "opj_config.h" +#include "openjpeg.h" +#include "getopt.h" +#include "convert.h" +#include "index.h" + +#include "format_defs.h" + +#define CINEMA_24_CS 1302083 /*Codestream length for 24fps*/ +#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/ +#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/ +#define COMP_48_CS 520833 /*Maximum size per color component for 2K @ 48fps*/ + +typedef struct dircnt{ + /** Buffer for holding images read from Directory*/ + char *filename_buf; + /** Pointer to the buffer*/ + char **filename; +}dircnt_t; + +typedef struct img_folder{ + /** The directory path of the folder containing input images*/ + char *imgdirpath; + /** Output format*/ + char *out_format; + /** Enable option*/ + char set_imgdir; + /** Enable Cod Format for output*/ + char set_out_format; + /** User specified rate stored in case of cinema option*/ + float *rates; +}img_fol_t; + +void encode_help_display() { + fprintf(stdout,"HELP for image_to_j2k\n----\n\n"); + fprintf(stdout,"- the -h option displays this help information on screen\n\n"); + +/* UniPG>> */ + fprintf(stdout,"List of parameters for the JPEG 2000 " +#ifdef USE_JPWL + "+ JPWL " +#endif /* USE_JPWL */ + "encoder:\n"); +/* <> */ +#ifdef USE_JPWL + fprintf(stdout," * No JPWL protection\n"); +#endif /* USE_JPWL */ +/* < \n"); + fprintf(stdout," Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA formats\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-i : source file (-i source.pnm also *.pgm, *.ppm, *.pgx, *png, *.bmp, *.tif, *.raw, *.tga) \n"); + fprintf(stdout," When using this option -o must be used\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-o : destination file (-o dest.j2k or .jp2) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"Optional Parameters:\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-h : display the help information \n "); + fprintf(stdout,"\n"); + fprintf(stdout,"-cinema2K : Digital Cinema 2K profile compliant codestream for 2K resolution.(-cinema2k 24 or 48) \n"); + fprintf(stdout," Need to specify the frames per second for a 2K resolution. Only 24 or 48 fps is allowed\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-cinema4K : Digital Cinema 4K profile compliant codestream for 4K resolution \n"); + fprintf(stdout," Frames per second not required. Default value is 24fps\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-r : different compression ratios for successive layers (-r 20,10,5)\n "); + fprintf(stdout," - The rate specified for each quality level is the desired \n"); + fprintf(stdout," compression factor.\n"); + fprintf(stdout," Example: -r 20,10,1 means quality 1: compress 20x, \n"); + fprintf(stdout," quality 2: compress 10x and quality 3: compress lossless\n"); + fprintf(stdout,"\n"); + fprintf(stdout," (options -r and -q cannot be used together)\n "); + fprintf(stdout,"\n"); + + fprintf(stdout,"-q : different psnr for successive layers (-q 30,40,50) \n "); + + fprintf(stdout," (options -r and -q cannot be used together)\n "); + + fprintf(stdout,"\n"); + fprintf(stdout,"-n : number of resolutions (-n 3) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-b : size of code block (-b 32,32) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-c : size of precinct (-c 128,128) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-t : size of tile (-t 512,512) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-s : subsampling factor (-s 2,2) [-s X,Y] \n"); + fprintf(stdout," Remark: subsampling bigger than 2 can produce error\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-POC : Progression order change (-POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL) \n"); + fprintf(stdout," Example: T1=0,0,1,5,3,CPRL \n"); + fprintf(stdout," : Ttilenumber=Resolution num start,Component num start,Layer num end,Resolution num end,Component num end,Progression order\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-SOP : write SOP marker before each packet \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-EPH : write EPH marker after each header packet \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-M : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n"); + fprintf(stdout," 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n"); + fprintf(stdout," Indicate multiple modes by adding their values. \n"); + fprintf(stdout," ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-x : create an index file *.Idx (-x index_name.Idx) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-ROI : c=%%d,U=%%d : quantization indices upshifted \n"); + fprintf(stdout," for component c=%%d [%%d = 0,1,2]\n"); + fprintf(stdout," with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI c=0,U=25) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-d : offset of the origin of the image (-d 150,300) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-T : offset of the origin of the tiles (-T 100,75) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-I : use the irreversible DWT 9-7 (-I) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-F : characteristics of the raw input image\n"); + fprintf(stdout," -F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n"); + fprintf(stdout," Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n"); + fprintf(stdout,"\n"); +/* UniPG>> */ +#ifdef USE_JPWL + fprintf(stdout,"-W : adoption of JPWL (Part 11) capabilities (-W params)\n"); + fprintf(stdout," The parameters can be written and repeated in any order:\n"); + fprintf(stdout," [h<=type>,s<=method>,a=,...\n"); + fprintf(stdout," ...,z=,g=,p<=type>]\n"); + fprintf(stdout,"\n"); + fprintf(stdout," h selects the header error protection (EPB): 'type' can be\n"); + fprintf(stdout," [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n"); + fprintf(stdout," if 'tilepart' is absent, it is for main and tile headers\n"); + fprintf(stdout," if 'tilepart' is present, it applies from that tile\n"); + fprintf(stdout," onwards, up to the next h<> spec, or to the last tilepart\n"); + fprintf(stdout," in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS); + fprintf(stdout,"\n"); + fprintf(stdout," p selects the packet error protection (EEP/UEP with EPBs)\n"); + fprintf(stdout," to be applied to raw data: 'type' can be\n"); + fprintf(stdout," [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n"); + fprintf(stdout," if 'tilepart:pack' is absent, it is from tile 0, packet 0\n"); + fprintf(stdout," if 'tilepart:pack' is present, it applies from that tile\n"); + fprintf(stdout," and that packet onwards, up to the next packet spec\n"); + fprintf(stdout," or to the last packet in the last tilepart in the stream\n"); + fprintf(stdout," (max. %d specs)\n", JPWL_MAX_NO_PACKSPECS); + fprintf(stdout,"\n"); + fprintf(stdout," s enables sensitivity data insertion (ESD): 'method' can be\n"); + fprintf(stdout," [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n"); + fprintf(stdout," 4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n"); + fprintf(stdout," if 'tilepart' is absent, it is for main header only\n"); + fprintf(stdout," if 'tilepart' is present, it applies from that tile\n"); + fprintf(stdout," onwards, up to the next s<> spec, or to the last tilepart\n"); + fprintf(stdout," in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS); + fprintf(stdout,"\n"); + fprintf(stdout," g determines the addressing mode: can be\n"); + fprintf(stdout," [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n"); + fprintf(stdout,"\n"); + fprintf(stdout," a determines the size of data addressing: can be\n"); + fprintf(stdout," 2/4 bytes (small/large codestreams). If not set, auto-mode\n"); + fprintf(stdout,"\n"); + fprintf(stdout," z determines the size of sensitivity values: can be\n"); + fprintf(stdout," 1/2 bytes, for the transformed pseudo-floating point value\n"); + fprintf(stdout,"\n"); + fprintf(stdout," ex.:\n"); + fprintf(stdout," h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n"); + fprintf(stdout," s0=6,s3=-1,a=0,g=1,z=1\n"); + fprintf(stdout," means\n"); + fprintf(stdout," predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n"); + fprintf(stdout," CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n"); + fprintf(stdout," UEP rs(78,32) for packets 0 to 23 of tile 0,\n"); + fprintf(stdout," UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n"); + fprintf(stdout," UEP rs default for packets of tilepart 1,\n"); + fprintf(stdout," no UEP for packets 0 to 19 of tilepart 3,\n"); + fprintf(stdout," UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n"); + fprintf(stdout," relative sensitivity ESD for MH,\n"); + fprintf(stdout," TSE ESD from TPH 0 to TPH 2, byte range with automatic\n"); + fprintf(stdout," size of addresses and 1 byte for each sensitivity value\n"); + fprintf(stdout,"\n"); + fprintf(stdout," ex.:\n"); + fprintf(stdout," h,s,p\n"); + fprintf(stdout," means\n"); + fprintf(stdout," default protection to headers (MH and TPHs) as well as\n"); + fprintf(stdout," data packets, one ESD in MH\n"); + fprintf(stdout,"\n"); + fprintf(stdout," N.B.: use the following recommendations when specifying\n"); + fprintf(stdout," the JPWL parameters list\n"); + fprintf(stdout," - when you use UEP, always pair the 'p' option with 'h'\n"); + fprintf(stdout," \n"); +#endif /* USE_JPWL */ +/* <d_name)==0 || strcmp("..",content->d_name)==0 ) + continue; + num_images++; + } + return num_images; +} + +int load_images(dircnt_t *dirptr, char *imgdirpath){ + DIR *dir; + struct dirent* content; + int i = 0; + + /*Reading the input images from given input directory*/ + + dir= opendir(imgdirpath); + if(!dir){ + fprintf(stderr,"Could not open Folder %s\n",imgdirpath); + return 1; + }else { + fprintf(stderr,"Folder opened successfully\n"); + } + + while((content=readdir(dir))!=NULL){ + if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 ) + continue; + + strcpy(dirptr->filename[i],content->d_name); + i++; + } + return 0; +} + +int get_file_format(char *filename) { + unsigned int i; + static const char *extension[] = { + "pgx", "pnm", "pgm", "ppm", "bmp", "tif", "raw", "tga", "png", "j2k", "jp2", "j2c", "jpc" + }; + static const int format[] = { + PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, J2K_CFMT, J2K_CFMT + }; + char * ext = strrchr(filename, '.'); + if (ext == NULL) + return -1; + ext++; + for(i = 0; i < sizeof(format)/sizeof(*format); i++) { + if(_strnicmp(ext, extension[i], 3) == 0) { + return format[i]; + } + } + return -1; +} + +char * get_file_name(char *name){ + char *fname; + fname= (char*)malloc(OPJ_PATH_LEN*sizeof(char)); + fname= strtok(name,"."); + return fname; +} + +char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_cparameters_t *parameters){ + char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],outfilename[OPJ_PATH_LEN],temp_ofname[OPJ_PATH_LEN]; + char *temp_p, temp1[OPJ_PATH_LEN]=""; + + strcpy(image_filename,dirptr->filename[imageno]); + fprintf(stderr,"File Number %d \"%s\"\n",imageno,image_filename); + parameters->decod_format = get_file_format(image_filename); + if (parameters->decod_format == -1) + return 1; + sprintf(infilename,"%s/%s",img_fol->imgdirpath,image_filename); + strncpy(parameters->infile, infilename, sizeof(infilename)); + + //Set output file + strcpy(temp_ofname,get_file_name(image_filename)); + while((temp_p = strtok(NULL,".")) != NULL){ + strcat(temp_ofname,temp1); + sprintf(temp1,".%s",temp_p); + } + if(img_fol->set_out_format==1){ + sprintf(outfilename,"%s/%s.%s",img_fol->imgdirpath,temp_ofname,img_fol->out_format); + strncpy(parameters->outfile, outfilename, sizeof(outfilename)); + } + return 0; +} + +static int initialise_4K_poc(opj_poc_t *POC, int numres){ + POC[0].tile = 1; + POC[0].resno0 = 0; + POC[0].compno0 = 0; + POC[0].layno1 = 1; + POC[0].resno1 = numres-1; + POC[0].compno1 = 3; + POC[0].prg1 = CPRL; + POC[1].tile = 1; + POC[1].resno0 = numres-1; + POC[1].compno0 = 0; + POC[1].layno1 = 1; + POC[1].resno1 = numres; + POC[1].compno1 = 3; + POC[1].prg1 = CPRL; + return 2; +} + +void cinema_parameters(opj_cparameters_t *parameters){ + parameters->tile_size_on = false; + parameters->cp_tdx=1; + parameters->cp_tdy=1; + + /*Tile part*/ + parameters->tp_flag = 'C'; + parameters->tp_on = 1; + + /*Tile and Image shall be at (0,0)*/ + parameters->cp_tx0 = 0; + parameters->cp_ty0 = 0; + parameters->image_offset_x0 = 0; + parameters->image_offset_y0 = 0; + + /*Codeblock size= 32*32*/ + parameters->cblockw_init = 32; + parameters->cblockh_init = 32; + parameters->csty |= 0x01; + + /*The progression order shall be CPRL*/ + parameters->prog_order = CPRL; + + /* No ROI */ + parameters->roi_compno = -1; + + parameters->subsampling_dx = 1; parameters->subsampling_dy = 1; + + /* 9-7 transform */ + parameters->irreversible = 1; + +} + +void cinema_setup_encoder(opj_cparameters_t *parameters,opj_image_t *image, img_fol_t *img_fol){ + int i; + float temp_rate; + + switch (parameters->cp_cinema){ + case CINEMA2K_24: + case CINEMA2K_48: + if(parameters->numresolution > 6){ + parameters->numresolution = 6; + } + if (!((image->comps[0].w == 2048) | (image->comps[0].h == 1080))){ + fprintf(stdout,"Image coordinates %d x %d is not 2K compliant.\nJPEG Digital Cinema Profile-3 " + "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080\n", + image->comps[0].w,image->comps[0].h); + parameters->cp_rsiz = STD_RSIZ; + } + break; + + case CINEMA4K_24: + if(parameters->numresolution < 1){ + parameters->numresolution = 1; + }else if(parameters->numresolution > 7){ + parameters->numresolution = 7; + } + if (!((image->comps[0].w == 4096) | (image->comps[0].h == 2160))){ + fprintf(stdout,"Image coordinates %d x %d is not 4K compliant.\nJPEG Digital Cinema Profile-4" + "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160\n", + image->comps[0].w,image->comps[0].h); + parameters->cp_rsiz = STD_RSIZ; + } + parameters->numpocs = initialise_4K_poc(parameters->POC,parameters->numresolution); + break; + default : + break; + } + + switch (parameters->cp_cinema){ + case CINEMA2K_24: + case CINEMA4K_24: + for(i=0 ; itcp_numlayers ; i++){ + temp_rate = 0 ; + if (img_fol->rates[i]== 0){ + parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy); + }else{ + temp_rate =((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy); + if (temp_rate > CINEMA_24_CS ){ + parameters->tcp_rates[i]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy); + }else{ + parameters->tcp_rates[i]= img_fol->rates[i]; + } + } + } + parameters->max_comp_size = COMP_24_CS; + break; + + case CINEMA2K_48: + for(i=0 ; itcp_numlayers ; i++){ + temp_rate = 0 ; + if (img_fol->rates[i]== 0){ + parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy); + }else{ + temp_rate =((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy); + if (temp_rate > CINEMA_48_CS ){ + parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/ + (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy); + }else{ + parameters->tcp_rates[i]= img_fol->rates[i]; + } + } + } + parameters->max_comp_size = COMP_48_CS; + break; + default: + break; + } + parameters->cp_disto_alloc = 1; +} + +/* ------------------------------------------------------------------------------------ */ + +int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters, + img_fol_t *img_fol, raw_cparameters_t *raw_cp, char *indexfilename) { + int i, j,totlen; + option_t long_option[]={ + {"cinema2K",REQ_ARG, NULL ,'w'}, + {"cinema4K",NO_ARG, NULL ,'y'}, + {"ImgDir",REQ_ARG, NULL ,'z'}, + {"TP",REQ_ARG, NULL ,'v'}, + {"SOP",NO_ARG, NULL ,'S'}, + {"EPH",NO_ARG, NULL ,'E'}, + {"OutFor",REQ_ARG, NULL ,'O'}, + {"POC",REQ_ARG, NULL ,'P'}, + {"ROI",REQ_ARG, NULL ,'R'}, + }; + + /* parse the command line */ + const char optlist[] = "i:o:r:q:n:b:c:t:p:s:SEM:x:R:d:T:If:P:C:F:" +#ifdef USE_JPWL + "W:" +#endif /* USE_JPWL */ + "h"; + + totlen=sizeof(long_option); + img_fol->set_out_format=0; + raw_cp->rawWidth = 0; + + while (1) { + int c = getopt_long(argc, argv, optlist,long_option,totlen); + if (c == -1) + break; + switch (c) { + case 'i': /* input file */ + { + char *infile = optarg; + parameters->decod_format = get_file_format(infile); + switch(parameters->decod_format) { + case PGX_DFMT: + case PXM_DFMT: + case BMP_DFMT: + case TIF_DFMT: + case RAW_DFMT: + case TGA_DFMT: + case PNG_DFMT: + break; + default: + fprintf(stderr, + "!! Unrecognized format for infile : %s " + "[accept only *.pnm, *.pgm, *.ppm, *.pgx, *png, *.bmp, *.tif, *.raw or *.tga] !!\n\n", + infile); + return 1; + } + strncpy(parameters->infile, infile, sizeof(parameters->infile)-1); + } + break; + + /* ----------------------------------------------------- */ + + case 'o': /* output file */ + { + char *outfile = optarg; + parameters->cod_format = get_file_format(outfile); + switch(parameters->cod_format) { + case J2K_CFMT: + case JP2_CFMT: + break; + default: + fprintf(stderr, "Unknown output format image %s [only *.j2k, *.j2c or *.jp2]!! \n", outfile); + return 1; + } + strncpy(parameters->outfile, outfile, sizeof(parameters->outfile)-1); + } + break; + + /* ----------------------------------------------------- */ + case 'O': /* output format */ + { + char outformat[50]; + char *of = optarg; + sprintf(outformat,".%s",of); + img_fol->set_out_format = 1; + parameters->cod_format = get_file_format(outformat); + switch(parameters->cod_format) { + case J2K_CFMT: + case JP2_CFMT: + img_fol->out_format = optarg; + break; + default: + fprintf(stderr, "Unknown output format image [only j2k, j2c, jp2]!! \n"); + return 1; + } + } + break; + + + /* ----------------------------------------------------- */ + + + case 'r': /* rates rates/distorsion */ + { + char *s = optarg; + parameters->tcp_numlayers = 0; + while (sscanf(s, "%f", ¶meters->tcp_rates[parameters->tcp_numlayers]) == 1) { + parameters->tcp_numlayers++; + while (*s && *s != ',') { + s++; + } + if (!*s) + break; + s++; + } + parameters->cp_disto_alloc = 1; + } + break; + + /* ----------------------------------------------------- */ + + + case 'F': /* Raw image format parameters */ + { + char signo; + char *s = optarg; + if (sscanf(s, "%d,%d,%d,%d,%c", &raw_cp->rawWidth, &raw_cp->rawHeight, &raw_cp->rawComp, &raw_cp->rawBitDepth, &signo) == 5) { + if (signo == 's') { + raw_cp->rawSigned = true; + fprintf(stdout,"\nRaw file parameters: %d,%d,%d,%d Signed\n", raw_cp->rawWidth, raw_cp->rawHeight, raw_cp->rawComp, raw_cp->rawBitDepth); + } + else if (signo == 'u') { + raw_cp->rawSigned = false; + fprintf(stdout,"\nRaw file parameters: %d,%d,%d,%d Unsigned\n", raw_cp->rawWidth, raw_cp->rawHeight, raw_cp->rawComp, raw_cp->rawBitDepth); + } + else { + fprintf(stderr,"\nError: invalid raw image parameters: Unknown sign of raw file\n"); + fprintf(stderr,"Please use the Format option -F:\n"); + fprintf(stderr,"-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n"); + fprintf(stderr,"Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n"); + fprintf(stderr,"Aborting\n"); + } + } + else { + fprintf(stderr,"\nError: invalid raw image parameters\n"); + fprintf(stderr,"Please use the Format option -F:\n"); + fprintf(stderr,"-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n"); + fprintf(stderr,"Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n"); + fprintf(stderr,"Aborting\n"); + return 1; + } + } + break; + + /* ----------------------------------------------------- */ + + case 'q': /* add fixed_quality */ + { + char *s = optarg; + while (sscanf(s, "%f", ¶meters->tcp_distoratio[parameters->tcp_numlayers]) == 1) { + parameters->tcp_numlayers++; + while (*s && *s != ',') { + s++; + } + if (!*s) + break; + s++; + } + parameters->cp_fixed_quality = 1; + } + break; + + /* dda */ + /* ----------------------------------------------------- */ + + case 'f': /* mod fixed_quality (before : -q) */ + { + int *row = NULL, *col = NULL; + int numlayers = 0, numresolution = 0, matrix_width = 0; + + char *s = optarg; + sscanf(s, "%d", &numlayers); + s++; + if (numlayers > 9) + s++; + + parameters->tcp_numlayers = numlayers; + numresolution = parameters->numresolution; + matrix_width = numresolution * 3; + parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int)); + s = s + 2; + + for (i = 0; i < numlayers; i++) { + row = ¶meters->cp_matrice[i * matrix_width]; + col = row; + parameters->tcp_rates[i] = 1; + sscanf(s, "%d,", &col[0]); + s += 2; + if (col[0] > 9) + s++; + col[1] = 0; + col[2] = 0; + for (j = 1; j < numresolution; j++) { + col += 3; + sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]); + s += 6; + if (col[0] > 9) + s++; + if (col[1] > 9) + s++; + if (col[2] > 9) + s++; + } + if (i < numlayers - 1) + s++; + } + parameters->cp_fixed_alloc = 1; + } + break; + + /* ----------------------------------------------------- */ + + case 't': /* tiles */ + { + sscanf(optarg, "%d,%d", ¶meters->cp_tdx, ¶meters->cp_tdy); + parameters->tile_size_on = true; + } + break; + + /* ----------------------------------------------------- */ + + case 'n': /* resolution */ + { + sscanf(optarg, "%d", ¶meters->numresolution); + } + break; + + /* ----------------------------------------------------- */ + case 'c': /* precinct dimension */ + { + char sep; + int res_spec = 0; + + char *s = optarg; + do { + sep = 0; + sscanf(s, "[%d,%d]%c", ¶meters->prcw_init[res_spec], + ¶meters->prch_init[res_spec], &sep); + parameters->csty |= 0x01; + res_spec++; + s = strpbrk(s, "]") + 2; + } + while (sep == ','); + parameters->res_spec = res_spec; + } + break; + + /* ----------------------------------------------------- */ + + case 'b': /* code-block dimension */ + { + int cblockw_init = 0, cblockh_init = 0; + sscanf(optarg, "%d,%d", &cblockw_init, &cblockh_init); + if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024 + || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) { + fprintf(stderr, + "!! Size of code_block error (option -b) !!\n\nRestriction :\n" + " * width*height<=4096\n * 4<=width,height<= 1024\n\n"); + return 1; + } + parameters->cblockw_init = cblockw_init; + parameters->cblockh_init = cblockh_init; + } + break; + + /* ----------------------------------------------------- */ + + case 'x': /* creation of index file */ + { + char *index = optarg; + strncpy(indexfilename, index, OPJ_PATH_LEN); + } + break; + + /* ----------------------------------------------------- */ + + case 'p': /* progression order */ + { + char progression[4]; + + strncpy(progression, optarg, 4); + parameters->prog_order = give_progression(progression); + if (parameters->prog_order == -1) { + fprintf(stderr, "Unrecognized progression order " + "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n"); + return 1; + } + } + break; + + /* ----------------------------------------------------- */ + + case 's': /* subsampling factor */ + { + if (sscanf(optarg, "%d,%d", ¶meters->subsampling_dx, + ¶meters->subsampling_dy) != 2) { + fprintf(stderr, "'-s' sub-sampling argument error ! [-s dx,dy]\n"); + return 1; + } + } + break; + + /* ----------------------------------------------------- */ + + case 'd': /* coordonnate of the reference grid */ + { + if (sscanf(optarg, "%d,%d", ¶meters->image_offset_x0, + ¶meters->image_offset_y0) != 2) { + fprintf(stderr, "-d 'coordonnate of the reference grid' argument " + "error !! [-d x0,y0]\n"); + return 1; + } + } + break; + + /* ----------------------------------------------------- */ + + case 'h': /* display an help description */ + encode_help_display(); + return 1; + + /* ----------------------------------------------------- */ + + case 'P': /* POC */ + { + int numpocs = 0; /* number of progression order change (POC) default 0 */ + opj_poc_t *POC = NULL; /* POC : used in case of Progression order change */ + + char *s = optarg; + POC = parameters->POC; + + while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile, + &POC[numpocs].resno0, &POC[numpocs].compno0, + &POC[numpocs].layno1, &POC[numpocs].resno1, + &POC[numpocs].compno1, POC[numpocs].progorder) == 7) { + POC[numpocs].prg1 = give_progression(POC[numpocs].progorder); + numpocs++; + while (*s && *s != '/') { + s++; + } + if (!*s) { + break; + } + s++; + } + parameters->numpocs = numpocs; + } + break; + + /* ------------------------------------------------------ */ + + case 'S': /* SOP marker */ + { + parameters->csty |= 0x02; + } + break; + + /* ------------------------------------------------------ */ + + case 'E': /* EPH marker */ + { + parameters->csty |= 0x04; + } + break; + + /* ------------------------------------------------------ */ + + case 'M': /* Mode switch pas tous au point !! */ + { + int value = 0; + if (sscanf(optarg, "%d", &value) == 1) { + for (i = 0; i <= 5; i++) { + int cache = value & (1 << i); + if (cache) + parameters->mode |= (1 << i); + } + } + } + break; + + /* ------------------------------------------------------ */ + + case 'R': /* ROI */ + { + if (sscanf(optarg, "c=%d,U=%d", ¶meters->roi_compno, + ¶meters->roi_shift) != 2) { + fprintf(stderr, "ROI error !! [-ROI c='compno',U='shift']\n"); + return 1; + } + } + break; + + /* ------------------------------------------------------ */ + + case 'T': /* Tile offset */ + { + if (sscanf(optarg, "%d,%d", ¶meters->cp_tx0, ¶meters->cp_ty0) != 2) { + fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]"); + return 1; + } + } + break; + + /* ------------------------------------------------------ */ + + case 'C': /* add a comment */ + { + parameters->cp_comment = (char*)malloc(strlen(optarg) + 1); + if(parameters->cp_comment) { + strcpy(parameters->cp_comment, optarg); + } + } + break; + + + /* ------------------------------------------------------ */ + + case 'I': /* reversible or not */ + { + parameters->irreversible = 1; + } + break; + + /* ------------------------------------------------------ */ + + case 'v': /* Tile part generation*/ + { + parameters->tp_flag = optarg[0]; + parameters->tp_on = 1; + } + break; + + /* ------------------------------------------------------ */ + + case 'z': /* Image Directory path */ + { + img_fol->imgdirpath = (char*)malloc(strlen(optarg) + 1); + strcpy(img_fol->imgdirpath,optarg); + img_fol->set_imgdir=1; + } + break; + + /* ------------------------------------------------------ */ + + case 'w': /* Digital Cinema 2K profile compliance*/ + { + int fps=0; + sscanf(optarg,"%d",&fps); + if(fps == 24){ + parameters->cp_cinema = CINEMA2K_24; + }else if(fps == 48 ){ + parameters->cp_cinema = CINEMA2K_48; + }else { + fprintf(stderr,"Incorrect value!! must be 24 or 48\n"); + return 1; + } + fprintf(stdout,"CINEMA 2K compliant codestream\n"); + parameters->cp_rsiz = CINEMA2K; + + } + break; + + /* ------------------------------------------------------ */ + + case 'y': /* Digital Cinema 4K profile compliance*/ + { + parameters->cp_cinema = CINEMA4K_24; + fprintf(stdout,"CINEMA 4K compliant codestream\n"); + parameters->cp_rsiz = CINEMA4K; + } + break; + + /* ------------------------------------------------------ */ + +/* UniPG>> */ +#ifdef USE_JPWL + /* ------------------------------------------------------ */ + + case 'W': /* JPWL capabilities switched on */ + { + char *token = NULL; + int hprot, pprot, sens, addr, size, range; + + /* we need to enable indexing */ + if (!indexfilename || !*indexfilename) { + strncpy(indexfilename, JPWL_PRIVATEINDEX_NAME, OPJ_PATH_LEN); + } + + /* search for different protection methods */ + + /* break the option in comma points and parse the result */ + token = strtok(optarg, ","); + while(token != NULL) { + + /* search header error protection method */ + if (*token == 'h') { + + static int tile = 0, tilespec = 0, lasttileno = 0; + + hprot = 1; /* predefined method */ + + if(sscanf(token, "h=%d", &hprot) == 1) { + /* Main header, specified */ + if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) || + ((hprot >= 37) && (hprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid main header protection method h = %d\n", hprot); + return 1; + } + parameters->jpwl_hprot_MH = hprot; + + } else if(sscanf(token, "h%d=%d", &tile, &hprot) == 2) { + /* Tile part header, specified */ + if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) || + ((hprot >= 37) && (hprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid tile part header protection method h = %d\n", hprot); + return 1; + } + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method t = %d\n", tile); + return 1; + } + if (tilespec < JPWL_MAX_NO_TILESPECS) { + parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile; + parameters->jpwl_hprot_TPH[tilespec++] = hprot; + } + + } else if(sscanf(token, "h%d", &tile) == 1) { + /* Tile part header, unspecified */ + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method t = %d\n", tile); + return 1; + } + if (tilespec < JPWL_MAX_NO_TILESPECS) { + parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile; + parameters->jpwl_hprot_TPH[tilespec++] = hprot; + } + + + } else if (!strcmp(token, "h")) { + /* Main header, unspecified */ + parameters->jpwl_hprot_MH = hprot; + + } else { + fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token); + return 1; + }; + + } + + /* search packet error protection method */ + if (*token == 'p') { + + static int pack = 0, tile = 0, packspec = 0; + + pprot = 1; /* predefined method */ + + if (sscanf(token, "p=%d", &pprot) == 1) { + /* Method for all tiles and all packets */ + if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) || + ((pprot >= 37) && (pprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid default packet protection method p = %d\n", pprot); + return 1; + } + parameters->jpwl_pprot_tileno[0] = 0; + parameters->jpwl_pprot_packno[0] = 0; + parameters->jpwl_pprot[0] = pprot; + + } else if (sscanf(token, "p%d=%d", &tile, &pprot) == 2) { + /* method specified from that tile on */ + if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) || + ((pprot >= 37) && (pprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot); + return 1; + } + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile); + return 1; + } + if (packspec < JPWL_MAX_NO_PACKSPECS) { + parameters->jpwl_pprot_tileno[packspec] = tile; + parameters->jpwl_pprot_packno[packspec] = 0; + parameters->jpwl_pprot[packspec++] = pprot; + } + + } else if (sscanf(token, "p%d:%d=%d", &tile, &pack, &pprot) == 3) { + /* method fully specified from that tile and that packet on */ + if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) || + ((pprot >= 37) && (pprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot); + return 1; + } + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile); + return 1; + } + if (pack < 0) { + fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n", pack); + return 1; + } + if (packspec < JPWL_MAX_NO_PACKSPECS) { + parameters->jpwl_pprot_tileno[packspec] = tile; + parameters->jpwl_pprot_packno[packspec] = pack; + parameters->jpwl_pprot[packspec++] = pprot; + } + + } else if (sscanf(token, "p%d:%d", &tile, &pack) == 2) { + /* default method from that tile and that packet on */ + if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) || + ((pprot >= 37) && (pprot <= 128)))) { + fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot); + return 1; + } + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile); + return 1; + } + if (pack < 0) { + fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n", pack); + return 1; + } + if (packspec < JPWL_MAX_NO_PACKSPECS) { + parameters->jpwl_pprot_tileno[packspec] = tile; + parameters->jpwl_pprot_packno[packspec] = pack; + parameters->jpwl_pprot[packspec++] = pprot; + } + + } else if (sscanf(token, "p%d", &tile) == 1) { + /* default from a tile on */ + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile); + return 1; + } + if (packspec < JPWL_MAX_NO_PACKSPECS) { + parameters->jpwl_pprot_tileno[packspec] = tile; + parameters->jpwl_pprot_packno[packspec] = 0; + parameters->jpwl_pprot[packspec++] = pprot; + } + + + } else if (!strcmp(token, "p")) { + /* all default */ + parameters->jpwl_pprot_tileno[0] = 0; + parameters->jpwl_pprot_packno[0] = 0; + parameters->jpwl_pprot[0] = pprot; + + } else { + fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token); + return 1; + }; + + } + + /* search sensitivity method */ + if (*token == 's') { + + static int tile = 0, tilespec = 0, lasttileno = 0; + + sens = 0; /* predefined: relative error */ + + if(sscanf(token, "s=%d", &sens) == 1) { + /* Main header, specified */ + if ((sens < -1) || (sens > 7)) { + fprintf(stderr, "ERROR -> invalid main header sensitivity method s = %d\n", sens); + return 1; + } + parameters->jpwl_sens_MH = sens; + + } else if(sscanf(token, "s%d=%d", &tile, &sens) == 2) { + /* Tile part header, specified */ + if ((sens < -1) || (sens > 7)) { + fprintf(stderr, "ERROR -> invalid tile part header sensitivity method s = %d\n", sens); + return 1; + } + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile); + return 1; + } + if (tilespec < JPWL_MAX_NO_TILESPECS) { + parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile; + parameters->jpwl_sens_TPH[tilespec++] = sens; + } + + } else if(sscanf(token, "s%d", &tile) == 1) { + /* Tile part header, unspecified */ + if (tile < 0) { + fprintf(stderr, "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile); + return 1; + } + if (tilespec < JPWL_MAX_NO_TILESPECS) { + parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile; + parameters->jpwl_sens_TPH[tilespec++] = hprot; + } + + } else if (!strcmp(token, "s")) { + /* Main header, unspecified */ + parameters->jpwl_sens_MH = sens; + + } else { + fprintf(stderr, "ERROR -> invalid sensitivity method selection = %s\n", token); + return 1; + }; + + parameters->jpwl_sens_size = 2; /* 2 bytes for default size */ + } + + /* search addressing size */ + if (*token == 'a') { + + + addr = 0; /* predefined: auto */ + + if(sscanf(token, "a=%d", &addr) == 1) { + /* Specified */ + if ((addr != 0) && (addr != 2) && (addr != 4)) { + fprintf(stderr, "ERROR -> invalid addressing size a = %d\n", addr); + return 1; + } + parameters->jpwl_sens_addr = addr; + + } else if (!strcmp(token, "a")) { + /* default */ + parameters->jpwl_sens_addr = addr; /* auto for default size */ + + } else { + fprintf(stderr, "ERROR -> invalid addressing selection = %s\n", token); + return 1; + }; + + } + + /* search sensitivity size */ + if (*token == 'z') { + + + size = 1; /* predefined: 1 byte */ + + if(sscanf(token, "z=%d", &size) == 1) { + /* Specified */ + if ((size != 0) && (size != 1) && (size != 2)) { + fprintf(stderr, "ERROR -> invalid sensitivity size z = %d\n", size); + return 1; + } + parameters->jpwl_sens_size = size; + + } else if (!strcmp(token, "a")) { + /* default */ + parameters->jpwl_sens_size = size; /* 1 for default size */ + + } else { + fprintf(stderr, "ERROR -> invalid size selection = %s\n", token); + return 1; + }; + + } + + /* search range method */ + if (*token == 'g') { + + + range = 0; /* predefined: 0 (packet) */ + + if(sscanf(token, "g=%d", &range) == 1) { + /* Specified */ + if ((range < 0) || (range > 3)) { + fprintf(stderr, "ERROR -> invalid sensitivity range method g = %d\n", range); + return 1; + } + parameters->jpwl_sens_range = range; + + } else if (!strcmp(token, "g")) { + /* default */ + parameters->jpwl_sens_range = range; + + } else { + fprintf(stderr, "ERROR -> invalid range selection = %s\n", token); + return 1; + }; + + } + + /* next token or bust */ + token = strtok(NULL, ","); + }; + + + /* some info */ + fprintf(stdout, "Info: JPWL capabilities enabled\n"); + parameters->jpwl_epc_on = true; + + } + break; +#endif /* USE_JPWL */ +/* < Command line not valid\n"); + return 1; + } + } + + /* check for possible errors */ + if (parameters->cp_cinema){ + if(parameters->tcp_numlayers > 1){ + parameters->cp_rsiz = STD_RSIZ; + fprintf(stdout,"Warning: DC profiles do not allow more than one quality layer. The codestream created will not be compliant with the DC profile\n"); + } + } + if(img_fol->set_imgdir == 1){ + if(!(parameters->infile[0] == 0)){ + fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n"); + return 1; + } + if(img_fol->set_out_format == 0){ + fprintf(stderr, "Error: When -ImgDir is used, -OutFor must be used !!\n"); + fprintf(stderr, "Only one format allowed! Valid formats are j2k and jp2!!\n"); + return 1; + } + if(!((parameters->outfile[0] == 0))){ + fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n"); + fprintf(stderr, "Specify OutputFormat using -OutFor !!\n"); + return 1; + } + }else{ + if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) { + fprintf(stderr, "Example: %s -i image.ppm -o image.j2k\n",argv[0]); + fprintf(stderr, " Try: %s -h\n",argv[0]); + return 1; + } + } + + if (parameters->decod_format == RAW_DFMT && raw_cp->rawWidth == 0) { + fprintf(stderr,"\nError: invalid raw image parameters\n"); + fprintf(stderr,"Please use the Format option -F:\n"); + fprintf(stderr,"-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n"); + fprintf(stderr,"Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n"); + fprintf(stderr,"Aborting\n"); + return 1; + } + + if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc || parameters->cp_fixed_quality) + && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_alloc ^ parameters->cp_fixed_quality))) { + fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n"); + return 1; + } /* mod fixed_quality */ + + /* if no rate entered, lossless by default */ + if (parameters->tcp_numlayers == 0) { + parameters->tcp_rates[0] = 0; /* MOD antonin : losslessbug */ + parameters->tcp_numlayers++; + parameters->cp_disto_alloc = 1; + } + + if((parameters->cp_tx0 > parameters->image_offset_x0) || (parameters->cp_ty0 > parameters->image_offset_y0)) { + fprintf(stderr, + "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n", + parameters->cp_tx0, parameters->image_offset_x0, parameters->cp_ty0, parameters->image_offset_y0); + return 1; + } + + for (i = 0; i < parameters->numpocs; i++) { + if (parameters->POC[i].prg == -1) { + fprintf(stderr, + "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n", + i + 1); + } + } + + return 0; +} + +/* -------------------------------------------------------------------------- */ + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting a FILE* client object +*/ +void info_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[INFO] %s", msg); +} + +/* -------------------------------------------------------------------------- */ + +int main(int argc, char **argv) { + bool bSuccess; + opj_cparameters_t parameters; /* compression parameters */ + img_fol_t img_fol; + opj_event_mgr_t event_mgr; /* event manager */ + opj_image_t *image = NULL; + int i,num_images; + int imageno; + dircnt_t *dirptr; + raw_cparameters_t raw_cp; + opj_codestream_info_t cstr_info; /* Codestream information structure */ + char indexfilename[OPJ_PATH_LEN]; /* index file name */ + + /* + configure the event callbacks (not required) + setting of each callback is optionnal + */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = info_callback; + + /* set encoding parameters to default values */ + opj_set_default_encoder_parameters(¶meters); + + /* Initialize indexfilename and img_fol */ + *indexfilename = 0; + memset(&img_fol,0,sizeof(img_fol_t)); + + /* parse input and get user encoding parameters */ + if(parse_cmdline_encoder(argc, argv, ¶meters,&img_fol, &raw_cp, indexfilename) == 1) { + return 1; + } + + if (parameters.cp_cinema){ + img_fol.rates = (float*)malloc(parameters.tcp_numlayers * sizeof(float)); + for(i=0; i< parameters.tcp_numlayers; i++){ + img_fol.rates[i] = parameters.tcp_rates[i]; + } + cinema_parameters(¶meters); + } + + /* Create comment for codestream */ + if(parameters.cp_comment == NULL) { + const char comment[] = "Created by OpenJPEG version "; + const size_t clen = strlen(comment); + const char *version = opj_version(); +/* UniPG>> */ +#ifdef USE_JPWL + parameters.cp_comment = (char*)malloc(clen+strlen(version)+11); + sprintf(parameters.cp_comment,"%s%s with JPWL", comment, version); +#else + parameters.cp_comment = (char*)malloc(clen+strlen(version)+1); + sprintf(parameters.cp_comment,"%s%s", comment, version); +#endif +/* <filename_buf = (char*)malloc(num_images*OPJ_PATH_LEN*sizeof(char)); // Stores at max 10 image file names + dirptr->filename = (char**) malloc(num_images*sizeof(char*)); + if(!dirptr->filename_buf){ + return 0; + } + for(i=0;ifilename[i] = dirptr->filename_buf + i*OPJ_PATH_LEN; + } + } + if(load_images(dirptr,img_fol.imgdirpath)==1){ + return 0; + } + if (num_images==0){ + fprintf(stdout,"Folder is empty\n"); + return 0; + } + }else{ + num_images=1; + } + /*Encoding image one by one*/ + for(imageno=0;imagenonumcomps == 3 ? 1 : 0; + + if(parameters.cp_cinema){ + cinema_setup_encoder(¶meters,image,&img_fol); + } + + /* encode the destination image */ + /* ---------------------------- */ + + if (parameters.cod_format == J2K_CFMT) { /* J2K format output */ + int codestream_length; + opj_cio_t *cio = NULL; + FILE *f = NULL; + + /* get a J2K compressor handle */ + opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr); + + /* setup the encoder parameters using the current image and user parameters */ + opj_setup_encoder(cinfo, ¶meters, image); + + /* open a byte stream for writing */ + /* allocate memory for all tiles */ + cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0); + + /* encode the image */ + if (*indexfilename) // If need to extract codestream information + bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info); + else + bSuccess = opj_encode(cinfo, cio, image, NULL); + if (!bSuccess) { + opj_cio_close(cio); + fprintf(stderr, "failed to encode image\n"); + return 1; + } + codestream_length = cio_tell(cio); + + /* write the buffer to disk */ + f = fopen(parameters.outfile, "wb"); + if (!f) { + fprintf(stderr, "failed to open %s for writing\n", parameters.outfile); + return 1; + } + fwrite(cio->buffer, 1, codestream_length, f); + fclose(f); + + fprintf(stderr,"Generated outfile %s\n",parameters.outfile); + /* close and free the byte stream */ + opj_cio_close(cio); + + /* Write the index to disk */ + if (*indexfilename) { + bSuccess = write_index_file(&cstr_info, indexfilename); + if (bSuccess) { + fprintf(stderr, "Failed to output index file into [%s]\n", indexfilename); + } + } + + /* free remaining compression structures */ + opj_destroy_compress(cinfo); + if (*indexfilename) + opj_destroy_cstr_info(&cstr_info); + } else { /* JP2 format output */ + int codestream_length; + opj_cio_t *cio = NULL; + FILE *f = NULL; + + /* get a JP2 compressor handle */ + opj_cinfo_t* cinfo = opj_create_compress(CODEC_JP2); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr); + + /* setup the encoder parameters using the current image and using user parameters */ + opj_setup_encoder(cinfo, ¶meters, image); + + /* open a byte stream for writing */ + /* allocate memory for all tiles */ + cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0); + + /* encode the image */ + if (*indexfilename) // If need to extract codestream information + bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info); + else + bSuccess = opj_encode(cinfo, cio, image, NULL); + if (!bSuccess) { + opj_cio_close(cio); + fprintf(stderr, "failed to encode image\n"); + return 1; + } + codestream_length = cio_tell(cio); + + /* write the buffer to disk */ + f = fopen(parameters.outfile, "wb"); + if (!f) { + fprintf(stderr, "failed to open %s for writing\n", parameters.outfile); + return 1; + } + fwrite(cio->buffer, 1, codestream_length, f); + fclose(f); + fprintf(stderr,"Generated outfile %s\n",parameters.outfile); + /* close and free the byte stream */ + opj_cio_close(cio); + + /* Write the index to disk */ + if (*indexfilename) { + bSuccess = write_index_file(&cstr_info, indexfilename); + if (bSuccess) { + fprintf(stderr, "Failed to output index file\n"); + } + } + + /* free remaining compression structures */ + opj_destroy_compress(cinfo); + if (*indexfilename) + opj_destroy_cstr_info(&cstr_info); + } + + /* free image data */ + opj_image_destroy(image); + } + + /* free user parameters structure */ + if(parameters.cp_comment) free(parameters.cp_comment); + if(parameters.cp_matrice) free(parameters.cp_matrice); + + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/codec/image_to_j2k.dsp b/contrib/menuetlibc/openjpeg/codec/image_to_j2k.dsp new file mode 100644 index 0000000000..3e1b0f665e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/image_to_j2k.dsp @@ -0,0 +1,118 @@ +# Microsoft Developer Studio Project File - Name="image_to_j2k" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=image_to_j2k - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "image_to_j2k.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "image_to_j2k.mak" CFG="image_to_j2k - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "image_to_j2k - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "image_to_j2k - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "image_to_j2k - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"LIBC" +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "image_to_j2k - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"LIBC" /nodefaultlib:"LIBCMT" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "image_to_j2k - Win32 Release" +# Name "image_to_j2k - Win32 Debug" +# Begin Source File + +SOURCE=.\convert.c +# End Source File +# Begin Source File + +SOURCE=.\convert.h +# End Source File +# Begin Source File + +SOURCE=.\compat\getopt.c +# End Source File +# Begin Source File + +SOURCE=.\compat\getopt.h +# End Source File +# Begin Source File + +SOURCE=.\image_to_j2k.c +# End Source File +# Begin Source File + +SOURCE=.\index.c +# End Source File +# Begin Source File + +SOURCE=.\index.h +# End Source File +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/codec/image_to_j2k.dsw b/contrib/menuetlibc/openjpeg/codec/image_to_j2k.dsw new file mode 100644 index 0000000000..fd19c2603b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/image_to_j2k.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "LibOpenJPEG"=..\LibOpenJPEG.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "image_to_j2k"=.\image_to_j2k.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/codec/image_to_j2k.sln b/contrib/menuetlibc/openjpeg/codec/image_to_j2k.sln new file mode 100644 index 0000000000000000000000000000000000000000..de773c8d50dde46e6a463af8a5d1d4928eae6336 GIT binary patch literal 1506 zcmbW1$!^;)5QcNL0KJ2tTv8wuNG&aW=z&_8qDUGe2AWHOK(=UusUjL$a!K-JJ@k?K z3K`XsEjB@__@?1(-~1fv&#&L6aUqwbs?@5szRRjfb8B8VnN-$XDWajz5Fs%}G$sUL%y2X%;Pu@n z`-An_vd`t>awCebv*gS^wQR@vF*tGVmm4VBIv#xPeqt=}kWVNJhX>El<+Y57;!{m9s-re0f+<$(|~ZAxUn0+ zkft%|aOR*5NO;njv4F8NQ7omXS|v8Bs(0X%$+&qTZ(JZ??1kw_bgj;EwMcV_+kW)4 z{W?UdSjlx$rtJ)~Jgrx-7+dgC^g)n4iN&H>KVHkibAfJPwazP%i?k9uw`Ok{we~M? zI)&b#0U3ul1B3L|OMg0sSp~k=gETeN&l$ RCF1OSp1j&%*U~hOo&g;;wgmtH literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/codec/image_to_j2k.vcproj b/contrib/menuetlibc/openjpeg/codec/image_to_j2k.vcproj new file mode 100644 index 0000000000..8968eb4b63 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/image_to_j2k.vcproj @@ -0,0 +1,292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/codec/index.c b/contrib/menuetlibc/openjpeg/codec/index.c new file mode 100644 index 0000000000..873b3403eb --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/index.c @@ -0,0 +1,391 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2003-2007, Francois-Olivier Devaux + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include +#include +#include +#include "openjpeg.h" +#include "index.h" + +/* ------------------------------------------------------------------------------------ */ + +/** +Write a structured index to a file +@param cstr_info Codestream information +@param index Index filename +@return Returns 0 if successful, returns 1 otherwise +*/ +int write_index_file(opj_codestream_info_t *cstr_info, char *index) { + int tileno, compno, layno, resno, precno, pack_nb, x, y; + FILE *stream = NULL; + double total_disto = 0; +/* UniPG>> */ + int tilepartno; + char disto_on, numpix_on; + +#ifdef USE_JPWL + if (!strcmp(index, JPWL_PRIVATEINDEX_NAME)) + return 0; +#endif /* USE_JPWL */ +/* <tile[0].distotile) + disto_on = 1; + else + disto_on = 0; + + if (cstr_info->tile[0].numpix) + numpix_on = 1; + else + numpix_on = 0; + + fprintf(stream, "%d %d\n", cstr_info->image_w, cstr_info->image_h); + fprintf(stream, "%d\n", cstr_info->prog); + fprintf(stream, "%d %d\n", cstr_info->tile_x, cstr_info->tile_y); + fprintf(stream, "%d %d\n", cstr_info->tw, cstr_info->th); + fprintf(stream, "%d\n", cstr_info->numcomps); + fprintf(stream, "%d\n", cstr_info->numlayers); + fprintf(stream, "%d\n", cstr_info->numdecompos[0]); /* based on component 0 */ + + for (resno = cstr_info->numdecompos[0]; resno >= 0; resno--) { + fprintf(stream, "[%d,%d] ", + (1 << cstr_info->tile[0].pdx[resno]), (1 << cstr_info->tile[0].pdx[resno])); /* based on tile 0 and component 0 */ + } + + fprintf(stream, "\n"); +/* UniPG>> */ + fprintf(stream, "%d\n", cstr_info->main_head_start); +/* <main_head_end); + fprintf(stream, "%d\n", cstr_info->codestream_size); + + fprintf(stream, "\nINFO ON TILES\n"); + fprintf(stream, "tileno start_pos end_hd end_tile nbparts"); + if (disto_on) + fprintf(stream," disto"); + if (numpix_on) + fprintf(stream," nbpix"); + if (disto_on && numpix_on) + fprintf(stream," disto/nbpix"); + fprintf(stream, "\n"); + + for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) { + fprintf(stream, "%4d %9d %9d %9d %9d", + cstr_info->tile[tileno].tileno, + cstr_info->tile[tileno].start_pos, + cstr_info->tile[tileno].end_header, + cstr_info->tile[tileno].end_pos, + cstr_info->tile[tileno].num_tps); + if (disto_on) + fprintf(stream," %9e", cstr_info->tile[tileno].distotile); + if (numpix_on) + fprintf(stream," %9d", cstr_info->tile[tileno].numpix); + if (disto_on && numpix_on) + fprintf(stream," %9e", cstr_info->tile[tileno].distotile / cstr_info->tile[tileno].numpix); + fprintf(stream, "\n"); + } + + for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) { + int start_pos, end_ph_pos, end_pos; + double disto = 0; + int max_numdecompos = 0; + pack_nb = 0; + + for (compno = 0; compno < cstr_info->numcomps; compno++) { + if (max_numdecompos < cstr_info->numdecompos[compno]) + max_numdecompos = cstr_info->numdecompos[compno]; + } + + fprintf(stream, "\nTILE %d DETAILS\n", tileno); + fprintf(stream, "part_nb tileno start_pack num_packs start_pos end_tph_pos end_pos\n"); + for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++) + fprintf(stream, "%4d %9d %9d %9d %9d %11d %9d\n", + tilepartno, tileno, + cstr_info->tile[tileno].tp[tilepartno].tp_start_pack, + cstr_info->tile[tileno].tp[tilepartno].tp_numpacks, + cstr_info->tile[tileno].tp[tilepartno].tp_start_pos, + cstr_info->tile[tileno].tp[tilepartno].tp_end_header, + cstr_info->tile[tileno].tp[tilepartno].tp_end_pos + ); + + if (cstr_info->prog == LRCP) { /* LRCP */ + fprintf(stream, "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos"); + if (disto_on) + fprintf(stream, " disto"); + fprintf(stream,"\n"); + + for (layno = 0; layno < cstr_info->numlayers; layno++) { + for (resno = 0; resno < max_numdecompos + 1; resno++) { + for (compno = 0; compno < cstr_info->numcomps; compno++) { + int prec_max; + if (resno > cstr_info->numdecompos[compno]) + break; + prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + for (precno = 0; precno < prec_max; precno++) { + start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos; + end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos; + end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos; + disto = cstr_info->tile[tileno].packet[pack_nb].disto; + fprintf(stream, "%4d %6d %7d %5d %6d %6d %6d %6d %7d", + pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos); + if (disto_on) + fprintf(stream, " %8e", disto); + fprintf(stream, "\n"); + total_disto += disto; + pack_nb++; + } + } + } + } + } /* LRCP */ + + else if (cstr_info->prog == RLCP) { /* RLCP */ + fprintf(stream, "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos\n"); + if (disto_on) + fprintf(stream, " disto"); + fprintf(stream,"\n"); + + for (resno = 0; resno < max_numdecompos + 1; resno++) { + for (layno = 0; layno < cstr_info->numlayers; layno++) { + for (compno = 0; compno < cstr_info->numcomps; compno++) { + int prec_max; + if (resno > cstr_info->numdecompos[compno]) + break; + prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + for (precno = 0; precno < prec_max; precno++) { + start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos; + end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos; + end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos; + disto = cstr_info->tile[tileno].packet[pack_nb].disto; + fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %7d", + pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos); + if (disto_on) + fprintf(stream, " %8e", disto); + fprintf(stream, "\n"); + total_disto += disto; + pack_nb++; + } + } + } + } + } /* RLCP */ + + else if (cstr_info->prog == RPCL) { /* RPCL */ + + fprintf(stream, "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos"); + if (disto_on) + fprintf(stream, " disto"); + fprintf(stream,"\n"); + + for (resno = 0; resno < max_numdecompos + 1; resno++) { + int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + for (precno = 0; precno < numprec; precno++) { + /* I suppose components have same XRsiz, YRsiz */ + int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x; + int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y; + int x1 = x0 + cstr_info->tile_x; + int y1 = y0 + cstr_info->tile_y; + for (compno = 0; compno < cstr_info->numcomps; compno++) { + int pcnx = cstr_info->tile[tileno].pw[resno]; + int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno ); + int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno ); + int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx; + int precno_y = (int) floor( (float)precno/(float)pcnx ); + if (resno > cstr_info->numdecompos[compno]) + break; + for(y = y0; y < y1; y++) { + if (precno_y*pcy == y ) { + for (x = x0; x < x1; x++) { + if (precno_x*pcx == x ) { + for (layno = 0; layno < cstr_info->numlayers; layno++) { + start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos; + end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos; + end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos; + disto = cstr_info->tile[tileno].packet[pack_nb].disto; + fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %7d", + pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos); + if (disto_on) + fprintf(stream, " %8e", disto); + fprintf(stream, "\n"); + total_disto += disto; + pack_nb++; + } + } + }/* x = x0..x1 */ + } + } /* y = y0..y1 */ + } /* precno */ + } /* compno */ + } /* resno */ + } /* RPCL */ + + else if (cstr_info->prog == PCRL) { /* PCRL */ + /* I suppose components have same XRsiz, YRsiz */ + int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x; + int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y; + int x1 = x0 + cstr_info->tile_x; + int y1 = y0 + cstr_info->tile_y; + + // Count the maximum number of precincts + int max_numprec = 0; + for (resno = 0; resno < max_numdecompos + 1; resno++) { + int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + if (numprec > max_numprec) + max_numprec = numprec; + } + + fprintf(stream, "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos"); + if (disto_on) + fprintf(stream, " disto"); + fprintf(stream,"\n"); + + for (precno = 0; precno < max_numprec; precno++) { + for (compno = 0; compno < cstr_info->numcomps; compno++) { + for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) { + int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + int pcnx = cstr_info->tile[tileno].pw[resno]; + int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno ); + int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno ); + int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx; + int precno_y = (int) floor( (float)precno/(float)pcnx ); + if (precno >= numprec) + continue; + for(y = y0; y < y1; y++) { + if (precno_y*pcy == y ) { + for (x = x0; x < x1; x++) { + if (precno_x*pcx == x ) { + for (layno = 0; layno < cstr_info->numlayers; layno++) { + start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos; + end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos; + end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos; + disto = cstr_info->tile[tileno].packet[pack_nb].disto; + fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d", + pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos); + if (disto_on) + fprintf(stream, " %8e", disto); + fprintf(stream, "\n"); + total_disto += disto; + pack_nb++; + } + } + }/* x = x0..x1 */ + } + } /* y = y0..y1 */ + } /* resno */ + } /* compno */ + } /* precno */ + } /* PCRL */ + + else { /* CPRL */ + // Count the maximum number of precincts + int max_numprec = 0; + for (resno = 0; resno < max_numdecompos + 1; resno++) { + int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + if (numprec > max_numprec) + max_numprec = numprec; + } + + fprintf(stream, "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos"); + if (disto_on) + fprintf(stream, " disto"); + fprintf(stream,"\n"); + + for (compno = 0; compno < cstr_info->numcomps; compno++) { + /* I suppose components have same XRsiz, YRsiz */ + int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x; + int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y; + int x1 = x0 + cstr_info->tile_x; + int y1 = y0 + cstr_info->tile_y; + + for (precno = 0; precno < max_numprec; precno++) { + for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) { + int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno]; + int pcnx = cstr_info->tile[tileno].pw[resno]; + int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno ); + int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno ); + int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx; + int precno_y = (int) floor( (float)precno/(float)pcnx ); + if (precno >= numprec) + continue; + + for(y = y0; y < y1; y++) { + if (precno_y*pcy == y ) { + for (x = x0; x < x1; x++) { + if (precno_x*pcx == x ) { + for (layno = 0; layno < cstr_info->numlayers; layno++) { + start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos; + end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos; + end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos; + disto = cstr_info->tile[tileno].packet[pack_nb].disto; + fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d", + pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos); + if (disto_on) + fprintf(stream, " %8e", disto); + fprintf(stream, "\n"); + total_disto += disto; + pack_nb++; + } + } + }/* x = x0..x1 */ + } + } /* y = y0..y1 */ + } /* resno */ + } /* precno */ + } /* compno */ + } /* CPRL */ + } /* tileno */ + + if (disto_on) { + fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */ + fprintf(stream, "%.8e\n", total_disto); /* SE totale */ + } +/* UniPG>> */ + /* print the markers' list */ + if (cstr_info->marknum) { + fprintf(stream, "\nMARKER LIST\n"); + fprintf(stream, "%d\n", cstr_info->marknum); + fprintf(stream, "type\tstart_pos length\n"); + for (x = 0; x < cstr_info->marknum; x++) + fprintf(stream, "%X\t%9d %9d\n", cstr_info->marker[x].type, cstr_info->marker[x].pos, cstr_info->marker[x].len); + } +/* < +#include +#include +#include + +#ifdef _WIN32 +#include "windirent.h" +#else +#include +#endif /* _WIN32 */ + +#ifdef _WIN32 +#include +#else +#include +#define _stricmp strcasecmp +#define _strnicmp strncasecmp +#endif /* _WIN32 */ + +#include "opj_config.h" +#include "openjpeg.h" +#include "../libopenjpeg/j2k.h" +#include "../libopenjpeg/jp2.h" +#include "getopt.h" +#include "convert.h" +#include "index.h" + +#include "format_defs.h" + +typedef struct dircnt{ + /** Buffer for holding images read from Directory*/ + char *filename_buf; + /** Pointer to the buffer*/ + char **filename; +}dircnt_t; + + +typedef struct img_folder{ + /** The directory path of the folder containing input images*/ + char *imgdirpath; + /** Output format*/ + const char *out_format; + /** Enable option*/ + char set_imgdir; + /** Enable Cod Format for output*/ + char set_out_format; + +}img_fol_t; + +void decode_help_display() { + fprintf(stdout,"HELP for j2k_dump\n----\n\n"); + fprintf(stdout,"- the -h option displays this help information on screen\n\n"); + +/* UniPG>> */ + fprintf(stdout,"List of parameters for the JPEG 2000 " +#ifdef USE_JPWL + "+ JPWL " +#endif /* USE_JPWL */ + "decoder:\n"); +/* <\n"); + fprintf(stdout," REQUIRED only if an Input image directory not specified\n"); + fprintf(stdout," Currently accepts J2K-files, JP2-files and JPT-files. The file type\n"); + fprintf(stdout," is identified based on its suffix.\n"); + fprintf(stdout,"\n"); +} + +/* -------------------------------------------------------------------------- */ +static void j2k_dump_image(FILE *fd, opj_image_t * img); +static void j2k_dump_cp(FILE *fd, opj_image_t * img, opj_cp_t * cp); + +int get_num_images(char *imgdirpath){ + DIR *dir; + struct dirent* content; + int num_images = 0; + + /*Reading the input images from given input directory*/ + + dir= opendir(imgdirpath); + if(!dir){ + fprintf(stderr,"Could not open Folder %s\n",imgdirpath); + return 0; + } + + while((content=readdir(dir))!=NULL){ + if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 ) + continue; + num_images++; + } + return num_images; +} + +int load_images(dircnt_t *dirptr, char *imgdirpath){ + DIR *dir; + struct dirent* content; + int i = 0; + + /*Reading the input images from given input directory*/ + + dir= opendir(imgdirpath); + if(!dir){ + fprintf(stderr,"Could not open Folder %s\n",imgdirpath); + return 1; + }else { + fprintf(stderr,"Folder opened successfully\n"); + } + + while((content=readdir(dir))!=NULL){ + if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 ) + continue; + + strcpy(dirptr->filename[i],content->d_name); + i++; + } + return 0; +} + +int get_file_format(char *filename) { + unsigned int i; + static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp","tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" }; + static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT }; + char * ext = strrchr(filename, '.'); + if (ext == NULL) + return -1; + ext++; + if(ext) { + for(i = 0; i < sizeof(format)/sizeof(*format); i++) { + if(_strnicmp(ext, extension[i], 3) == 0) { + return format[i]; + } + } + } + + return -1; +} + +char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_dparameters_t *parameters){ + char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],outfilename[OPJ_PATH_LEN],temp_ofname[OPJ_PATH_LEN]; + char *temp_p, temp1[OPJ_PATH_LEN]=""; + + strcpy(image_filename,dirptr->filename[imageno]); + fprintf(stderr,"File Number %d \"%s\"\n",imageno,image_filename); + parameters->decod_format = get_file_format(image_filename); + if (parameters->decod_format == -1) + return 1; + sprintf(infilename,"%s/%s",img_fol->imgdirpath,image_filename); + strncpy(parameters->infile, infilename, sizeof(infilename)); + + //Set output file + strcpy(temp_ofname,strtok(image_filename,".")); + while((temp_p = strtok(NULL,".")) != NULL){ + strcat(temp_ofname,temp1); + sprintf(temp1,".%s",temp_p); + } + if(img_fol->set_out_format==1){ + sprintf(outfilename,"%s/%s.%s",img_fol->imgdirpath,temp_ofname,img_fol->out_format); + strncpy(parameters->outfile, outfilename, sizeof(outfilename)); + } + return 0; +} + +/* -------------------------------------------------------------------------- */ +int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,img_fol_t *img_fol, char *indexfilename) { + /* parse the command line */ + int totlen; + option_t long_option[]={ + {"ImgDir",REQ_ARG, NULL ,'y'}, + }; + + const char optlist[] = "i:h"; + totlen=sizeof(long_option); + img_fol->set_out_format = 0; + while (1) { + int c = getopt_long(argc, argv,optlist,long_option,totlen); + if (c == -1) + break; + switch (c) { + case 'i': /* input file */ + { + char *infile = optarg; + parameters->decod_format = get_file_format(infile); + switch(parameters->decod_format) { + case J2K_CFMT: + case JP2_CFMT: + case JPT_CFMT: + break; + default: + fprintf(stderr, + "!! Unrecognized format for infile : %s [accept only *.j2k, *.jp2, *.jpc or *.jpt] !!\n\n", + infile); + return 1; + } + strncpy(parameters->infile, infile, sizeof(parameters->infile)-1); + } + break; + + /* ----------------------------------------------------- */ + + case 'h': /* display an help description */ + decode_help_display(); + return 1; + + /* ------------------------------------------------------ */ + + case 'y': /* Image Directory path */ + { + img_fol->imgdirpath = (char*)malloc(strlen(optarg) + 1); + strcpy(img_fol->imgdirpath,optarg); + img_fol->set_imgdir=1; + } + break; + + /* ----------------------------------------------------- */ + + default: + fprintf(stderr,"WARNING -> this option is not valid \"-%c %s\"\n",c, optarg); + break; + } + } + + /* check for possible errors */ + if(img_fol->set_imgdir==1){ + if(!(parameters->infile[0]==0)){ + fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n"); + return 1; + } + if(img_fol->set_out_format == 0){ + fprintf(stderr, "Error: When -ImgDir is used, -OutFor must be used !!\n"); + fprintf(stderr, "Only one format allowed! Valid format PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA!!\n"); + return 1; + } + if(!((parameters->outfile[0] == 0))){ + fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n"); + return 1; + } + }else{ + if((parameters->infile[0] == 0) ) { + fprintf(stderr, "Example: %s -i image.j2k\n",argv[0]); + fprintf(stderr, " Try: %s -h\n",argv[0]); + return 1; + } + } + + return 0; +} + +/* -------------------------------------------------------------------------- */ + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting no client object +*/ +void info_callback(const char *msg, void *client_data) { + (void)client_data; + fprintf(stdout, "[INFO] %s", msg); +} + +/* -------------------------------------------------------------------------- */ + +int main(int argc, char *argv[]) +{ + opj_dparameters_t parameters; /* decompression parameters */ + img_fol_t img_fol; + opj_event_mgr_t event_mgr; /* event manager */ + opj_image_t *image = NULL; + FILE *fsrc = NULL; + unsigned char *src = NULL; + int file_length; + int num_images; + int i,imageno; + dircnt_t *dirptr = NULL; + opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */ + opj_cio_t *cio = NULL; + opj_codestream_info_t cstr_info; /* Codestream information structure */ + char indexfilename[OPJ_PATH_LEN]; /* index file name */ + + /* configure the event callbacks (not required) */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = info_callback; + + /* set decoding parameters to default values */ + opj_set_default_decoder_parameters(¶meters); + + /* Initialize indexfilename and img_fol */ + *indexfilename = 0; + memset(&img_fol,0,sizeof(img_fol_t)); + + /* parse input and get user encoding parameters */ + if(parse_cmdline_decoder(argc, argv, ¶meters,&img_fol, indexfilename) == 1) { + return 1; + } + + /* Initialize reading of directory */ + if(img_fol.set_imgdir==1){ + num_images=get_num_images(img_fol.imgdirpath); + + dirptr=(dircnt_t*)malloc(sizeof(dircnt_t)); + if(dirptr){ + dirptr->filename_buf = (char*)malloc(num_images*OPJ_PATH_LEN*sizeof(char)); // Stores at max 10 image file names + dirptr->filename = (char**) malloc(num_images*sizeof(char*)); + + if(!dirptr->filename_buf){ + return 1; + } + for(i=0;ifilename[i] = dirptr->filename_buf + i*OPJ_PATH_LEN; + } + } + if(load_images(dirptr,img_fol.imgdirpath)==1){ + return 1; + } + if (num_images==0){ + fprintf(stdout,"Folder is empty\n"); + return 1; + } + }else{ + num_images=1; + } + + /*Encoding image one by one*/ + for(imageno = 0; imageno < num_images ; imageno++) + { + image = NULL; + fprintf(stderr,"\n"); + + if(img_fol.set_imgdir==1){ + if (get_next_file(imageno, dirptr,&img_fol, ¶meters)) { + fprintf(stderr,"skipping file...\n"); + continue; + } + } + + /* read the input file and put it in memory */ + /* ---------------------------------------- */ + fsrc = fopen(parameters.infile, "rb"); + if (!fsrc) { + fprintf(stderr, "ERROR -> failed to open %s for reading\n", parameters.infile); + return 1; + } + fseek(fsrc, 0, SEEK_END); + file_length = ftell(fsrc); + fseek(fsrc, 0, SEEK_SET); + src = (unsigned char *) malloc(file_length); + fread(src, 1, file_length, fsrc); + fclose(fsrc); + + /* decode the code-stream */ + /* ---------------------- */ + + switch(parameters.decod_format) { + case J2K_CFMT: + { + /* JPEG-2000 codestream */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_J2K); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + + /* decode the stream and fill the image structure */ + if (*indexfilename) // If need to extract codestream information + image = opj_decode_with_info(dinfo, cio, &cstr_info); + else + image = opj_decode(dinfo, cio); + if(!image) { + fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + /* dump image */ + j2k_dump_image(stdout, image); + + /* dump cp */ + j2k_dump_cp(stdout, image, ((opj_j2k_t*)dinfo->j2k_handle)->cp); + + /* close the byte stream */ + opj_cio_close(cio); + + /* Write the index to disk */ + if (*indexfilename) { + char bSuccess; + bSuccess = write_index_file(&cstr_info, indexfilename); + if (bSuccess) { + fprintf(stderr, "Failed to output index file\n"); + } + } + } + break; + + case JP2_CFMT: + { + /* JPEG 2000 compressed image data */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_JP2); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using the current image and user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + + /* decode the stream and fill the image structure */ + if (*indexfilename) // If need to extract codestream information + image = opj_decode_with_info(dinfo, cio, &cstr_info); + else + image = opj_decode(dinfo, cio); + if(!image) { + fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + /* dump image */ + if(image->icc_profile_buf) + { + free(image->icc_profile_buf); image->icc_profile_buf = NULL; + } + j2k_dump_image(stdout, image); + + /* dump cp */ + j2k_dump_cp(stdout, image, ((opj_jp2_t*)dinfo->jp2_handle)->j2k->cp); + + /* close the byte stream */ + opj_cio_close(cio); + + /* Write the index to disk */ + if (*indexfilename) { + char bSuccess; + bSuccess = write_index_file(&cstr_info, indexfilename); + if (bSuccess) { + fprintf(stderr, "Failed to output index file\n"); + } + } + } + break; + + case JPT_CFMT: + { + /* JPEG 2000, JPIP */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_JPT); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + + /* decode the stream and fill the image structure */ + if (*indexfilename) // If need to extract codestream information + image = opj_decode_with_info(dinfo, cio, &cstr_info); + else + image = opj_decode(dinfo, cio); + if(!image) { + fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + + /* close the byte stream */ + opj_cio_close(cio); + + /* Write the index to disk */ + if (*indexfilename) { + char bSuccess; + bSuccess = write_index_file(&cstr_info, indexfilename); + if (bSuccess) { + fprintf(stderr, "Failed to output index file\n"); + } + } + } + break; + + default: + fprintf(stderr, "skipping file..\n"); + continue; + } + + /* free the memory containing the code-stream */ + free(src); + src = NULL; + + /* free remaining structures */ + if(dinfo) { + opj_destroy_decompress(dinfo); + } + /* free codestream information structure */ + if (*indexfilename) + opj_destroy_cstr_info(&cstr_info); + /* free image data structure */ + opj_image_destroy(image); + + } + + return EXIT_SUCCESS; +} + + +static void j2k_dump_image(FILE *fd, opj_image_t * img) { + int compno; + fprintf(fd, "image {\n"); + fprintf(fd, " x0=%d, y0=%d, x1=%d, y1=%d\n", img->x0, img->y0, img->x1, img->y1); + fprintf(fd, " numcomps=%d\n", img->numcomps); + for (compno = 0; compno < img->numcomps; compno++) { + opj_image_comp_t *comp = &img->comps[compno]; + fprintf(fd, " comp %d {\n", compno); + fprintf(fd, " dx=%d, dy=%d\n", comp->dx, comp->dy); + fprintf(fd, " prec=%d\n", comp->prec); + //fprintf(fd, " bpp=%d\n", comp->bpp); + fprintf(fd, " sgnd=%d\n", comp->sgnd); + fprintf(fd, " }\n"); + } + fprintf(fd, "}\n"); +} + +static void j2k_dump_cp(FILE *fd, opj_image_t * img, opj_cp_t * cp) { + int tileno, compno, layno, bandno, resno, numbands; + fprintf(fd, "coding parameters {\n"); + fprintf(fd, " tx0=%d, ty0=%d\n", cp->tx0, cp->ty0); + fprintf(fd, " tdx=%d, tdy=%d\n", cp->tdx, cp->tdy); + fprintf(fd, " tw=%d, th=%d\n", cp->tw, cp->th); + for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { + opj_tcp_t *tcp = &cp->tcps[tileno]; + fprintf(fd, " tile %d {\n", tileno); + fprintf(fd, " csty=%x\n", tcp->csty); + fprintf(fd, " prg=%d\n", tcp->prg); + fprintf(fd, " numlayers=%d\n", tcp->numlayers); + fprintf(fd, " mct=%d\n", tcp->mct); + fprintf(fd, " rates="); + for (layno = 0; layno < tcp->numlayers; layno++) { + fprintf(fd, "%.1f ", tcp->rates[layno]); + } + fprintf(fd, "\n"); + for (compno = 0; compno < img->numcomps; compno++) { + opj_tccp_t *tccp = &tcp->tccps[compno]; + fprintf(fd, " comp %d {\n", compno); + fprintf(fd, " csty=%x\n", tccp->csty); + fprintf(fd, " numresolutions=%d\n", tccp->numresolutions); + fprintf(fd, " cblkw=%d\n", tccp->cblkw); + fprintf(fd, " cblkh=%d\n", tccp->cblkh); + fprintf(fd, " cblksty=%x\n", tccp->cblksty); + fprintf(fd, " qmfbid=%d\n", tccp->qmfbid); + fprintf(fd, " qntsty=%d\n", tccp->qntsty); + fprintf(fd, " numgbits=%d\n", tccp->numgbits); + fprintf(fd, " roishift=%d\n", tccp->roishift); + fprintf(fd, " stepsizes="); + numbands = tccp->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolutions * 3 - 2; + for (bandno = 0; bandno < numbands; bandno++) { + fprintf(fd, "(%d,%d) ", tccp->stepsizes[bandno].mant, + tccp->stepsizes[bandno].expn); + } + fprintf(fd, "\n"); + + if (tccp->csty & J2K_CCP_CSTY_PRT) { + fprintf(fd, " prcw="); + for (resno = 0; resno < tccp->numresolutions; resno++) { + fprintf(fd, "%d ", tccp->prcw[resno]); + } + fprintf(fd, "\n"); + fprintf(fd, " prch="); + for (resno = 0; resno < tccp->numresolutions; resno++) { + fprintf(fd, "%d ", tccp->prch[resno]); + } + fprintf(fd, "\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, "}\n"); +} + diff --git a/contrib/menuetlibc/openjpeg/codec/j2k_to_image.c b/contrib/menuetlibc/openjpeg/codec/j2k_to_image.c new file mode 100644 index 0000000000..ff6141ee37 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/j2k_to_image.c @@ -0,0 +1,845 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2006-2007, Parvatha Elangovan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include +#include +#include +#include + +#ifdef _WIN32 +#include "windirent.h" +#else +#include +#endif /* _WIN32 */ + +#ifdef _WIN32 +#include +#else +#include +#define _stricmp strcasecmp +#define _strnicmp strncasecmp +#endif /* _WIN32 */ + +#include "opj_config.h" +#include "openjpeg.h" +#include "getopt.h" +#include "convert.h" +#include "index.h" + +#ifdef HAVE_LIBLCMS2 +#include +#endif +#ifdef HAVE_LIBLCMS1 +#include +#endif +#include "color.h" + +#include "format_defs.h" + +typedef struct dircnt{ + /** Buffer for holding images read from Directory*/ + char *filename_buf; + /** Pointer to the buffer*/ + char **filename; +}dircnt_t; + + +typedef struct img_folder{ + /** The directory path of the folder containing input images*/ + char *imgdirpath; + /** Output format*/ + const char *out_format; + /** Enable option*/ + char set_imgdir; + /** Enable Cod Format for output*/ + char set_out_format; + +}img_fol_t; + +void decode_help_display() { + fprintf(stdout,"HELP for j2k_to_image\n----\n\n"); + fprintf(stdout,"- the -h option displays this help information on screen\n\n"); + +/* UniPG>> */ + fprintf(stdout,"List of parameters for the JPEG 2000 " +#ifdef USE_JPWL + "+ JPWL " +#endif /* USE_JPWL */ + "decoder:\n"); +/* < \n"); + fprintf(stdout," Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA formats\n"); + fprintf(stdout," -i \n"); + fprintf(stdout," REQUIRED only if an Input image directory not specified\n"); + fprintf(stdout," Currently accepts J2K-files, JP2-files and JPT-files. The file type\n"); + fprintf(stdout," is identified based on its suffix.\n"); + fprintf(stdout," -o \n"); + fprintf(stdout," REQUIRED\n"); + fprintf(stdout," Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA files\n"); + fprintf(stdout," Binary data is written to the file (not ascii). If a PGX\n"); + fprintf(stdout," filename is given, there will be as many output files as there are\n"); + fprintf(stdout," components: an indice starting from 0 will then be appended to the\n"); + fprintf(stdout," output filename, just before the \"pgx\" extension. If a PGM filename\n"); + fprintf(stdout," is given and there are more than one component, only the first component\n"); + fprintf(stdout," will be written to the file.\n"); + fprintf(stdout," -r \n"); + fprintf(stdout," Set the number of highest resolution levels to be discarded. The\n"); + fprintf(stdout," image resolution is effectively divided by 2 to the power of the\n"); + fprintf(stdout," number of discarded levels. The reduce factor is limited by the\n"); + fprintf(stdout," smallest total number of decomposition levels among tiles.\n"); + fprintf(stdout," -l \n"); + fprintf(stdout," Set the maximum number of quality layers to decode. If there are\n"); + fprintf(stdout," less quality layers than the specified number, all the quality layers\n"); + fprintf(stdout," are decoded.\n"); + fprintf(stdout," -x \n"); + fprintf(stdout," Create an index file *.Idx (-x index_name.Idx) \n"); + fprintf(stdout,"\n"); +/* UniPG>> */ +#ifdef USE_JPWL + fprintf(stdout," -W \n"); + fprintf(stdout," Activates the JPWL correction capability, if the codestream complies.\n"); + fprintf(stdout," Options can be a comma separated list of tokens:\n"); + fprintf(stdout," c, c=numcomps\n"); + fprintf(stdout," numcomps is the number of expected components in the codestream\n"); + fprintf(stdout," (search of first EPB rely upon this, default is %d)\n", JPWL_EXPECTED_COMPONENTS); +#endif /* USE_JPWL */ +/* <d_name)==0 || strcmp("..",content->d_name)==0 ) + continue; + num_images++; + } + return num_images; +} + +int load_images(dircnt_t *dirptr, char *imgdirpath){ + DIR *dir; + struct dirent* content; + int i = 0; + + /*Reading the input images from given input directory*/ + + dir= opendir(imgdirpath); + if(!dir){ + fprintf(stderr,"Could not open Folder %s\n",imgdirpath); + return 1; + }else { + fprintf(stderr,"Folder opened successfully\n"); + } + + while((content=readdir(dir))!=NULL){ + if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 ) + continue; + + strcpy(dirptr->filename[i],content->d_name); + i++; + } + return 0; +} + +int get_file_format(char *filename) { + unsigned int i; + static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp","tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" }; + static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT }; + char * ext = strrchr(filename, '.'); + if (ext == NULL) + return -1; + ext++; + if(ext) { + for(i = 0; i < sizeof(format)/sizeof(*format); i++) { + if(_strnicmp(ext, extension[i], 3) == 0) { + return format[i]; + } + } + } + + return -1; +} + +char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_dparameters_t *parameters){ + char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],outfilename[OPJ_PATH_LEN],temp_ofname[OPJ_PATH_LEN]; + char *temp_p, temp1[OPJ_PATH_LEN]=""; + + strcpy(image_filename,dirptr->filename[imageno]); + fprintf(stderr,"File Number %d \"%s\"\n",imageno,image_filename); + parameters->decod_format = get_file_format(image_filename); + if (parameters->decod_format == -1) + return 1; + sprintf(infilename,"%s/%s",img_fol->imgdirpath,image_filename); + strncpy(parameters->infile, infilename, sizeof(infilename)); + + //Set output file + strcpy(temp_ofname,strtok(image_filename,".")); + while((temp_p = strtok(NULL,".")) != NULL){ + strcat(temp_ofname,temp1); + sprintf(temp1,".%s",temp_p); + } + if(img_fol->set_out_format==1){ + sprintf(outfilename,"%s/%s.%s",img_fol->imgdirpath,temp_ofname,img_fol->out_format); + strncpy(parameters->outfile, outfilename, sizeof(outfilename)); + } + return 0; +} + +/* -------------------------------------------------------------------------- */ +int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,img_fol_t *img_fol, char *indexfilename) { + /* parse the command line */ + int totlen; + option_t long_option[]={ + {"ImgDir",REQ_ARG, NULL ,'y'}, + {"OutFor",REQ_ARG, NULL ,'O'}, + }; + + const char optlist[] = "i:o:r:l:x:" + +/* UniPG>> */ +#ifdef USE_JPWL + "W:" +#endif /* USE_JPWL */ +/* <set_out_format = 0; + while (1) { + int c = getopt_long(argc, argv,optlist,long_option,totlen); + if (c == -1) + break; + switch (c) { + case 'i': /* input file */ + { + char *infile = optarg; + parameters->decod_format = get_file_format(infile); + switch(parameters->decod_format) { + case J2K_CFMT: + case JP2_CFMT: + case JPT_CFMT: + break; + default: + fprintf(stderr, + "!! Unrecognized format for infile : %s [accept only *.j2k, *.jp2, *.jpc or *.jpt] !!\n\n", + infile); + return 1; + } + strncpy(parameters->infile, infile, sizeof(parameters->infile)-1); + } + break; + + /* ----------------------------------------------------- */ + + case 'o': /* output file */ + { + char *outfile = optarg; + parameters->cod_format = get_file_format(outfile); + switch(parameters->cod_format) { + case PGX_DFMT: + case PXM_DFMT: + case BMP_DFMT: + case TIF_DFMT: + case RAW_DFMT: + case TGA_DFMT: + case PNG_DFMT: + break; + default: + fprintf(stderr, "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n", outfile); + return 1; + } + strncpy(parameters->outfile, outfile, sizeof(parameters->outfile)-1); + } + break; + + /* ----------------------------------------------------- */ + + case 'O': /* output format */ + { + char outformat[50]; + char *of = optarg; + sprintf(outformat,".%s",of); + img_fol->set_out_format = 1; + parameters->cod_format = get_file_format(outformat); + switch(parameters->cod_format) { + case PGX_DFMT: + img_fol->out_format = "pgx"; + break; + case PXM_DFMT: + img_fol->out_format = "ppm"; + break; + case BMP_DFMT: + img_fol->out_format = "bmp"; + break; + case TIF_DFMT: + img_fol->out_format = "tif"; + break; + case RAW_DFMT: + img_fol->out_format = "raw"; + break; + case TGA_DFMT: + img_fol->out_format = "raw"; + break; + case PNG_DFMT: + img_fol->out_format = "png"; + break; + default: + fprintf(stderr, "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n", outformat); + return 1; + break; + } + } + break; + + /* ----------------------------------------------------- */ + + + case 'r': /* reduce option */ + { + sscanf(optarg, "%d", ¶meters->cp_reduce); + } + break; + + /* ----------------------------------------------------- */ + + + case 'l': /* layering option */ + { + sscanf(optarg, "%d", ¶meters->cp_layer); + } + break; + + /* ----------------------------------------------------- */ + + case 'h': /* display an help description */ + decode_help_display(); + return 1; + + /* ------------------------------------------------------ */ + + case 'y': /* Image Directory path */ + { + img_fol->imgdirpath = (char*)malloc(strlen(optarg) + 1); + strcpy(img_fol->imgdirpath,optarg); + img_fol->set_imgdir=1; + } + break; + /* ----------------------------------------------------- */ + case 'x': /* Creation of index file */ + { + char *index = optarg; + strncpy(indexfilename, index, OPJ_PATH_LEN); + } + break; + /* ----------------------------------------------------- */ + /* UniPG>> */ +#ifdef USE_JPWL + + case 'W': /* activate JPWL correction */ + { + char *token = NULL; + + token = strtok(optarg, ","); + while(token != NULL) { + + /* search expected number of components */ + if (*token == 'c') { + + static int compno; + + compno = JPWL_EXPECTED_COMPONENTS; /* predefined no. of components */ + + if(sscanf(token, "c=%d", &compno) == 1) { + /* Specified */ + if ((compno < 1) || (compno > 256)) { + fprintf(stderr, "ERROR -> invalid number of components c = %d\n", compno); + return 1; + } + parameters->jpwl_exp_comps = compno; + + } else if (!strcmp(token, "c")) { + /* default */ + parameters->jpwl_exp_comps = compno; /* auto for default size */ + + } else { + fprintf(stderr, "ERROR -> invalid components specified = %s\n", token); + return 1; + }; + } + + /* search maximum number of tiles */ + if (*token == 't') { + + static int tileno; + + tileno = JPWL_MAXIMUM_TILES; /* maximum no. of tiles */ + + if(sscanf(token, "t=%d", &tileno) == 1) { + /* Specified */ + if ((tileno < 1) || (tileno > JPWL_MAXIMUM_TILES)) { + fprintf(stderr, "ERROR -> invalid number of tiles t = %d\n", tileno); + return 1; + } + parameters->jpwl_max_tiles = tileno; + + } else if (!strcmp(token, "t")) { + /* default */ + parameters->jpwl_max_tiles = tileno; /* auto for default size */ + + } else { + fprintf(stderr, "ERROR -> invalid tiles specified = %s\n", token); + return 1; + }; + } + + /* next token or bust */ + token = strtok(NULL, ","); + }; + parameters->jpwl_correct = true; + fprintf(stdout, "JPWL correction capability activated\n"); + fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps); + } + break; +#endif /* USE_JPWL */ +/* < this option is not valid \"-%c %s\"\n",c, optarg); + break; + } + } + + /* check for possible errors */ + if(img_fol->set_imgdir==1){ + if(!(parameters->infile[0]==0)){ + fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n"); + return 1; + } + if(img_fol->set_out_format == 0){ + fprintf(stderr, "Error: When -ImgDir is used, -OutFor must be used !!\n"); + fprintf(stderr, "Only one format allowed! Valid format PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA!!\n"); + return 1; + } + if(!((parameters->outfile[0] == 0))){ + fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n"); + return 1; + } + }else{ + if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) { + fprintf(stderr, "Example: %s -i image.j2k -o image.pgm\n",argv[0]); + fprintf(stderr, " Try: %s -h\n",argv[0]); + return 1; + } + } + + return 0; +} + +/* -------------------------------------------------------------------------- */ + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting no client object +*/ +void info_callback(const char *msg, void *client_data) { + (void)client_data; + fprintf(stdout, "[INFO] %s", msg); +} + +/* -------------------------------------------------------------------------- */ + +int main(int argc, char **argv) { + opj_dparameters_t parameters; /* decompression parameters */ + img_fol_t img_fol; + opj_event_mgr_t event_mgr; /* event manager */ + opj_image_t *image = NULL; + FILE *fsrc = NULL; + unsigned char *src = NULL; + int file_length; + int num_images; + int i,imageno; + dircnt_t *dirptr; + opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */ + opj_cio_t *cio = NULL; + opj_codestream_info_t cstr_info; /* Codestream information structure */ + char indexfilename[OPJ_PATH_LEN]; /* index file name */ + + /* configure the event callbacks (not required) */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = info_callback; + + /* set decoding parameters to default values */ + opj_set_default_decoder_parameters(¶meters); + + /* Initialize indexfilename and img_fol */ + *indexfilename = 0; + memset(&img_fol,0,sizeof(img_fol_t)); + + /* parse input and get user encoding parameters */ + if(parse_cmdline_decoder(argc, argv, ¶meters,&img_fol, indexfilename) == 1) { + return 1; + } + + /* Initialize reading of directory */ + if(img_fol.set_imgdir==1){ + num_images=get_num_images(img_fol.imgdirpath); + + dirptr=(dircnt_t*)malloc(sizeof(dircnt_t)); + if(dirptr){ + dirptr->filename_buf = (char*)malloc(num_images*OPJ_PATH_LEN*sizeof(char)); // Stores at max 10 image file names + dirptr->filename = (char**) malloc(num_images*sizeof(char*)); + + if(!dirptr->filename_buf){ + return 1; + } + for(i=0;ifilename[i] = dirptr->filename_buf + i*OPJ_PATH_LEN; + } + } + if(load_images(dirptr,img_fol.imgdirpath)==1){ + return 1; + } + if (num_images==0){ + fprintf(stdout,"Folder is empty\n"); + return 1; + } + }else{ + num_images=1; + } + + /*Encoding image one by one*/ + for(imageno = 0; imageno < num_images ; imageno++) { + image = NULL; + fprintf(stderr,"\n"); + + if(img_fol.set_imgdir==1){ + if (get_next_file(imageno, dirptr,&img_fol, ¶meters)) { + fprintf(stderr,"skipping file...\n"); + continue; + } + } + + /* read the input file and put it in memory */ + /* ---------------------------------------- */ + fsrc = fopen(parameters.infile, "rb"); + if (!fsrc) { + fprintf(stderr, "ERROR -> failed to open %s for reading\n", parameters.infile); + return 1; + } + fseek(fsrc, 0, SEEK_END); + file_length = ftell(fsrc); + fseek(fsrc, 0, SEEK_SET); + src = (unsigned char *) malloc(file_length); + fread(src, 1, file_length, fsrc); + fclose(fsrc); + + /* decode the code-stream */ + /* ---------------------- */ + + switch(parameters.decod_format) { + case J2K_CFMT: + { + /* JPEG-2000 codestream */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_J2K); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + + /* decode the stream and fill the image structure */ + if (*indexfilename) // If need to extract codestream information + image = opj_decode_with_info(dinfo, cio, &cstr_info); + else + image = opj_decode(dinfo, cio); + if(!image) { + fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + + /* close the byte stream */ + opj_cio_close(cio); + + /* Write the index to disk */ + if (*indexfilename) { + char bSuccess; + bSuccess = write_index_file(&cstr_info, indexfilename); + if (bSuccess) { + fprintf(stderr, "Failed to output index file\n"); + } + } + } + break; + + case JP2_CFMT: + { + /* JPEG 2000 compressed image data */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_JP2); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using the current image and user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + + /* decode the stream and fill the image structure */ + if (*indexfilename) // If need to extract codestream information + image = opj_decode_with_info(dinfo, cio, &cstr_info); + else + image = opj_decode(dinfo, cio); + if(!image) { + fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + + /* close the byte stream */ + opj_cio_close(cio); + + /* Write the index to disk */ + if (*indexfilename) { + char bSuccess; + bSuccess = write_index_file(&cstr_info, indexfilename); + if (bSuccess) { + fprintf(stderr, "Failed to output index file\n"); + } + } + } + break; + + case JPT_CFMT: + { + /* JPEG 2000, JPIP */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_JPT); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + + /* decode the stream and fill the image structure */ + if (*indexfilename) // If need to extract codestream information + image = opj_decode_with_info(dinfo, cio, &cstr_info); + else + image = opj_decode(dinfo, cio); + if(!image) { + fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + + /* close the byte stream */ + opj_cio_close(cio); + + /* Write the index to disk */ + if (*indexfilename) { + char bSuccess; + bSuccess = write_index_file(&cstr_info, indexfilename); + if (bSuccess) { + fprintf(stderr, "Failed to output index file\n"); + } + } + } + break; + + default: + fprintf(stderr, "skipping file..\n"); + continue; + } + + /* free the memory containing the code-stream */ + free(src); + src = NULL; + + if(image->color_space == CLRSPC_SYCC) + { + color_sycc_to_rgb(image); + } + + if(image->icc_profile_buf) + { +#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) + color_apply_icc_profile(image); +#endif + + free(image->icc_profile_buf); + image->icc_profile_buf = NULL; image->icc_profile_len = 0; + } + + /* create output image */ + /* ------------------- */ + switch (parameters.cod_format) { + case PXM_DFMT: /* PNM PGM PPM */ + if (imagetopnm(image, parameters.outfile)) { + fprintf(stdout,"Outfile %s not generated\n",parameters.outfile); + } + else { + fprintf(stdout,"Generated Outfile %s\n",parameters.outfile); + } + break; + + case PGX_DFMT: /* PGX */ + if(imagetopgx(image, parameters.outfile)){ + fprintf(stdout,"Outfile %s not generated\n",parameters.outfile); + } + else { + fprintf(stdout,"Generated Outfile %s\n",parameters.outfile); + } + break; + + case BMP_DFMT: /* BMP */ + if(imagetobmp(image, parameters.outfile)){ + fprintf(stdout,"Outfile %s not generated\n",parameters.outfile); + } + else { + fprintf(stdout,"Generated Outfile %s\n",parameters.outfile); + } + break; +#ifdef HAVE_LIBTIFF + case TIF_DFMT: /* TIFF */ + if(imagetotif(image, parameters.outfile)){ + fprintf(stdout,"Outfile %s not generated\n",parameters.outfile); + } + else { + fprintf(stdout,"Generated Outfile %s\n",parameters.outfile); + } + break; +#endif /* HAVE_LIBTIFF */ + case RAW_DFMT: /* RAW */ + if(imagetoraw(image, parameters.outfile)){ + fprintf(stdout,"Error generating raw file. Outfile %s not generated\n",parameters.outfile); + } + else { + fprintf(stdout,"Successfully generated Outfile %s\n",parameters.outfile); + } + break; + + case TGA_DFMT: /* TGA */ + if(imagetotga(image, parameters.outfile)){ + fprintf(stdout,"Error generating tga file. Outfile %s not generated\n",parameters.outfile); + } + else { + fprintf(stdout,"Successfully generated Outfile %s\n",parameters.outfile); + } + break; +#ifdef HAVE_LIBPNG + case PNG_DFMT: /* PNG */ + if(imagetopng(image, parameters.outfile)){ + fprintf(stdout,"Error generating png file. Outfile %s not generated\n",parameters.outfile); + } + else { + fprintf(stdout,"Successfully generated Outfile %s\n",parameters.outfile); + } + break; +#endif /* HAVE_LIBPNG */ +/* Can happen if output file is TIFF or PNG + * and HAVE_LIBTIF or HAVE_LIBPNG is undefined +*/ + default: + fprintf(stderr,"Outfile %s not generated\n",parameters.outfile); + } + + /* free remaining structures */ + if(dinfo) { + opj_destroy_decompress(dinfo); + } + /* free codestream information structure */ + if (*indexfilename) + opj_destroy_cstr_info(&cstr_info); + /* free image data structure */ + opj_image_destroy(image); + + } + return 0; +} +//end main + + + + diff --git a/contrib/menuetlibc/openjpeg/codec/j2k_to_image.dsp b/contrib/menuetlibc/openjpeg/codec/j2k_to_image.dsp new file mode 100644 index 0000000000..927f1a5909 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/j2k_to_image.dsp @@ -0,0 +1,117 @@ +# Microsoft Developer Studio Project File - Name="j2k_to_image" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=j2k_to_image - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "j2k_to_image.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "j2k_to_image.mak" CFG="j2k_to_image - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "j2k_to_image - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "j2k_to_image - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "j2k_to_image - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libc" +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "j2k_to_image - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /YX /FD /GZ /c +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"libcmt" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "j2k_to_image - Win32 Release" +# Name "j2k_to_image - Win32 Debug" +# Begin Source File + +SOURCE=.\convert.c +# End Source File +# Begin Source File + +SOURCE=.\convert.h +# End Source File +# Begin Source File + +SOURCE=.\compat\getopt.c +# End Source File +# Begin Source File + +SOURCE=.\compat\getopt.h +# End Source File +# Begin Source File + +SOURCE=.\index.c +# End Source File +# Begin Source File + +SOURCE=.\index.h +# End Source File +# Begin Source File + +SOURCE=.\j2k_to_image.c +# End Source File +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/codec/j2k_to_image.dsw b/contrib/menuetlibc/openjpeg/codec/j2k_to_image.dsw new file mode 100644 index 0000000000..5a01ee0a28 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/j2k_to_image.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "LibOpenJPEG"=..\LibOpenJPEG.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "j2k_to_image"=.\j2k_to_image.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/codec/j2k_to_image.sln b/contrib/menuetlibc/openjpeg/codec/j2k_to_image.sln new file mode 100644 index 0000000000000000000000000000000000000000..22103f55caa4e479ba87b749e95a7ac11e4f12a2 GIT binary patch literal 1506 zcmbW1OK#gR5Qek00Np`QHYpGaq{P_Nq6_Nb6h)dEHPCJf1hPdNOcl}4BO50t>mom=E%IZq0+?vWvoLf^> z+$9hrin2NM9gI!m^sgKj;|tT673x+jt22Acg3u4+fFTx8jtGe`Vi6$-V~#_gfS0TaY7(ZrxuumAa94$yzj>`*t75Wzcy%_7Nl8MKthXNFUI`Xo4ppjVI%H z+yISQoH=L%5}vhYBw*}R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/codec/windirent.h b/contrib/menuetlibc/openjpeg/codec/windirent.h new file mode 100644 index 0000000000..037569df97 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/codec/windirent.h @@ -0,0 +1,677 @@ + +/* + * uce-dirent.h - operating system independent dirent implementation + * + * Copyright (C) 1998-2002 Toni Ronkko + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * ``Software''), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * 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 TONI RONKKO 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. + * + * + * May 28 1998, Toni Ronkko + * + * $Id: uce-dirent.h,v 1.7 2002/05/13 10:48:35 tr Exp $ + * + * $Log: uce-dirent.h,v $ + * Revision 1.7 2002/05/13 10:48:35 tr + * embedded some source code directly to the header so that no source + * modules need to be included in the MS Visual C project using the + * interface, removed all the dependencies to other headers of the `uce' + * library so that the header can be made public + * + * Revision 1.6 2002/04/12 16:22:04 tr + * Unified Compiling Environment (UCE) replaced `std' library + * + * Revision 1.5 2001/07/20 16:33:40 tr + * moved to `std' library and re-named defines accordingly + * + * Revision 1.4 2001/07/10 16:47:18 tronkko + * revised comments + * + * Revision 1.3 2001/01/11 13:16:43 tr + * using ``uce-machine.h'' for finding out defines such as `FREEBSD' + * + * Revision 1.2 2000/10/08 16:00:41 tr + * copy of FreeBSD man page + * + * Revision 1.1 2000/07/10 05:53:16 tr + * Initial revision + * + * Revision 1.2 1998/07/19 18:29:14 tr + * Added error reporting capabilities and some asserts. + * + * Revision 1.1 1998/07/04 16:27:51 tr + * Initial revision + * + * + * MSVC 1.0 scans automatic dependencies incorrectly when your project + * contains this very header. The problem is that MSVC cannot handle + * include directives inside #if..#endif block those are never entered. + * Since this header ought to compile in many different operating systems, + * there had to be several conditional blocks that are compiled only in + * operating systems for what they were designed for. MSVC 1.0 cannot + * handle inclusion of sys/dir.h in a part that is compiled only in Apollo + * operating system. To fix the problem you need to insert DIR.H into + * SYSINCL.DAT located in MSVC\BIN directory and restart visual C++. + * Consult manuals for more informaton about the problem. + * + * Since many UNIX systems have dirent.h we assume to have one also. + * However, if your UNIX system does not have dirent.h you can download one + * for example at: http://ftp.uni-mannheim.de/ftp/GNU/dirent/dirent.tar.gz. + * You can also see if you have one of dirent.h, direct.h, dir.h, ndir.h, + * sys/dir.h and sys/ndir.h somewhere. Try defining HAVE_DIRENT_H, + * HAVE_DIRECT_H, HAVE_DIR_H, HAVE_NDIR_H, HAVE_SYS_DIR_H and + * HAVE_SYS_NDIR_H according to the files found. + */ +#ifndef DIRENT_H +#define DIRENT_H +#define DIRENT_H_INCLUDED + +/* find out platform */ +#if defined(MSDOS) /* MS-DOS */ +#elif defined(__MSDOS__) /* Turbo C/Borland */ +# define MSDOS +#elif defined(__DOS__) /* Watcom */ +# define MSDOS +#endif + +#if defined(WIN32) /* MS-Windows */ +#elif defined(__NT__) /* Watcom */ +# define WIN32 +#elif defined(_WIN32) /* Microsoft */ +# define WIN32 +#elif defined(__WIN32__) /* Borland */ +# define WIN32 +#endif + +/* + * See what kind of dirent interface we have unless autoconf has already + * determinated that. + */ +#if !defined(HAVE_DIRENT_H) && !defined(HAVE_DIRECT_H) && !defined(HAVE_SYS_DIR_H) && !defined(HAVE_NDIR_H) && !defined(HAVE_SYS_NDIR_H) && !defined(HAVE_DIR_H) +# if defined(_MSC_VER) /* Microsoft C/C++ */ + /* no dirent.h */ +# elif defined(__BORLANDC__) /* Borland C/C++ */ +# define HAVE_DIRENT_H +# define VOID_CLOSEDIR +# elif defined(__TURBOC__) /* Borland Turbo C */ + /* no dirent.h */ +# elif defined(__WATCOMC__) /* Watcom C/C++ */ +# define HAVE_DIRECT_H +# elif defined(__apollo) /* Apollo */ +# define HAVE_SYS_DIR_H +# elif defined(__hpux) /* HP-UX */ +# define HAVE_DIRENT_H +# elif (defined(__alpha) || defined(__alpha__)) && !defined(__linux__) /* Alpha OSF1 */ +# error "not implemented" +# elif defined(__sgi) /* Silicon Graphics */ +# define HAVE_DIRENT_H +# elif defined(sun) || defined(_sun) /* Sun Solaris */ +# define HAVE_DIRENT_H +# elif defined(__FreeBSD__) /* FreeBSD */ +# define HAVE_DIRENT_H +# elif defined(__linux__) /* Linux */ +# define HAVE_DIRENT_H +# elif defined(__GNUC__) /* GNU C/C++ */ +# define HAVE_DIRENT_H +# else +# error "not implemented" +# endif +#endif + +/* include proper interface headers */ +#if defined(HAVE_DIRENT_H) +# include +# ifdef FREEBSD +# define NAMLEN(dp) ((int)((dp)->d_namlen)) +# else +# define NAMLEN(dp) ((int)(strlen((dp)->d_name))) +# endif + +#elif defined(HAVE_NDIR_H) +# include +# define NAMLEN(dp) ((int)((dp)->d_namlen)) + +#elif defined(HAVE_SYS_NDIR_H) +# include +# define NAMLEN(dp) ((int)((dp)->d_namlen)) + +#elif defined(HAVE_DIRECT_H) +# include +# define NAMLEN(dp) ((int)((dp)->d_namlen)) + +#elif defined(HAVE_DIR_H) +# include +# define NAMLEN(dp) ((int)((dp)->d_namlen)) + +#elif defined(HAVE_SYS_DIR_H) +# include +# include +# ifndef dirent +# define dirent direct +# endif +# define NAMLEN(dp) ((int)((dp)->d_namlen)) + +#elif defined(MSDOS) || defined(WIN32) + + /* figure out type of underlaying directory interface to be used */ +# if defined(WIN32) +# define DIRENT_WIN32_INTERFACE +# elif defined(MSDOS) +# define DIRENT_MSDOS_INTERFACE +# else +# error "missing native dirent interface" +# endif + + /*** WIN32 specifics ***/ +# if defined(DIRENT_WIN32_INTERFACE) +# include +# if !defined(DIRENT_MAXNAMLEN) +# define DIRENT_MAXNAMLEN (MAX_PATH) +# endif + + + /*** MS-DOS specifics ***/ +# elif defined(DIRENT_MSDOS_INTERFACE) +# include + + /* Borland defines file length macros in dir.h */ +# if defined(__BORLANDC__) +# include +# if !defined(DIRENT_MAXNAMLEN) +# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT)) +# endif +# if !defined(_find_t) +# define _find_t find_t +# endif + + /* Turbo C defines ffblk structure in dir.h */ +# elif defined(__TURBOC__) +# include +# if !defined(DIRENT_MAXNAMLEN) +# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT)) +# endif +# define DIRENT_USE_FFBLK + + /* MSVC */ +# elif defined(_MSC_VER) +# if !defined(DIRENT_MAXNAMLEN) +# define DIRENT_MAXNAMLEN (12) +# endif + + /* Watcom */ +# elif defined(__WATCOMC__) +# if !defined(DIRENT_MAXNAMLEN) +# if defined(__OS2__) || defined(__NT__) +# define DIRENT_MAXNAMLEN (255) +# else +# define DIRENT_MAXNAMLEN (12) +# endif +# endif + +# endif +# endif + + /*** generic MS-DOS and MS-Windows stuff ***/ +# if !defined(NAME_MAX) && defined(DIRENT_MAXNAMLEN) +# define NAME_MAX DIRENT_MAXNAMLEN +# endif +# if NAME_MAX < DIRENT_MAXNAMLEN +# error "assertion failed: NAME_MAX >= DIRENT_MAXNAMLEN" +# endif + + + /* + * Substitute for real dirent structure. Note that `d_name' field is a + * true character array although we have it copied in the implementation + * dependent data. We could save some memory if we had declared `d_name' + * as a pointer refering the name within implementation dependent data. + * We have not done that since some code may rely on sizeof(d_name) to be + * something other than four. Besides, directory entries are typically so + * small that it takes virtually no time to copy them from place to place. + */ + typedef struct dirent { + char d_name[NAME_MAX + 1]; + + /*** Operating system specific part ***/ +# if defined(DIRENT_WIN32_INTERFACE) /*WIN32*/ + WIN32_FIND_DATA data; +# elif defined(DIRENT_MSDOS_INTERFACE) /*MSDOS*/ +# if defined(DIRENT_USE_FFBLK) + struct ffblk data; +# else + struct _find_t data; +# endif +# endif + } dirent; + + /* DIR substitute structure containing directory name. The name is + * essential for the operation of ``rewinndir'' function. */ + typedef struct DIR { + char *dirname; /* directory being scanned */ + dirent current; /* current entry */ + int dirent_filled; /* is current un-processed? */ + + /*** Operating system specific part ***/ +# if defined(DIRENT_WIN32_INTERFACE) + HANDLE search_handle; +# elif defined(DIRENT_MSDOS_INTERFACE) +# endif + } DIR; + +# ifdef __cplusplus +extern "C" { +# endif + +/* supply prototypes for dirent functions */ +static DIR *opendir (const char *dirname); +static struct dirent *readdir (DIR *dirp); +static int closedir (DIR *dirp); +static void rewinddir (DIR *dirp); + +/* + * Implement dirent interface as static functions so that the user does not + * need to change his project in any way to use dirent function. With this + * it is sufficient to include this very header from source modules using + * dirent functions and the functions will be pulled in automatically. + */ +#include +#include +#include +#include +#include + +/* use ffblk instead of _find_t if requested */ +#if defined(DIRENT_USE_FFBLK) +# define _A_ARCH (FA_ARCH) +# define _A_HIDDEN (FA_HIDDEN) +# define _A_NORMAL (0) +# define _A_RDONLY (FA_RDONLY) +# define _A_SUBDIR (FA_DIREC) +# define _A_SYSTEM (FA_SYSTEM) +# define _A_VOLID (FA_LABEL) +# define _dos_findnext(dest) findnext(dest) +# define _dos_findfirst(name,flags,dest) findfirst(name,dest,flags) +#endif + +static int _initdir (DIR *p); +static const char *_getdirname (const struct dirent *dp); +static void _setdirname (struct DIR *dirp); + +/* + * + * open directory stream for reading + * DIR *opendir (const char *dirname); + * + * Open named directory stream for read and return pointer to the + * internal working area that is used for retrieving individual directory + * entries. The internal working area has no fields of your interest. + * + * Returns a pointer to the internal working area or NULL in case the + * directory stream could not be opened. Global `errno' variable will set + * in case of error as follows: + * + * + * [EACESS |Permission denied. + * [EMFILE |Too many open files used by the process. + * [ENFILE |Too many open files in system. + * [ENOENT |Directory does not exist. + * [ENOMEM |Insufficient memory. + * [ENOTDIR |dirname does not refer to directory. This value is not + * reliable on MS-DOS and MS-Windows platforms. Many + * implementations return ENOENT even when the name refers to a + * file.] + *
+ *
+ */ +static DIR *opendir(const char *dirname) +{ + DIR *dirp; + assert (dirname != NULL); + + dirp = (DIR*)malloc (sizeof (struct DIR)); + if (dirp != NULL) { + char *p; + + /* allocate room for directory name */ + dirp->dirname = (char*) malloc (strlen (dirname) + 1 + strlen ("\\*.*")); + if (dirp->dirname == NULL) { + /* failed to duplicate directory name. errno set by malloc() */ + free (dirp); + return NULL; + } + /* Copy directory name while appending directory separator and "*.*". + * Directory separator is not appended if the name already ends with + * drive or directory separator. Directory separator is assumed to be + * '/' or '\' and drive separator is assumed to be ':'. */ + strcpy (dirp->dirname, dirname); + p = strchr (dirp->dirname, '\0'); + if (dirp->dirname < p && + *(p - 1) != '\\' && *(p - 1) != '/' && *(p - 1) != ':') + { + strcpy (p++, "\\"); + } +# ifdef DIRENT_WIN32_INTERFACE + strcpy (p, "*"); /*scan files with and without extension in win32*/ +# else + strcpy (p, "*.*"); /*scan files with and without extension in DOS*/ +# endif + + /* open stream */ + if (_initdir (dirp) == 0) { + /* initialization failed */ + free (dirp->dirname); + free (dirp); + return NULL; + } + } + return dirp; +} + + +/* + * + * read a directory entry + * struct dirent *readdir (DIR *dirp); + * + * Read individual directory entry and return pointer to a structure + * containing the name of the entry. Individual directory entries returned + * include normal files, sub-directories, pseudo-directories "." and ".." + * and also volume labels, hidden files and system files in MS-DOS and + * MS-Windows. You might want to use stat(2) function to determinate which + * one are you dealing with. Many dirent implementations already contain + * equivalent information in dirent structure but you cannot depend on + * this. + * + * The dirent structure contains several system dependent fields that + * generally have no interest to you. The only interesting one is char + * d_name[] that is also portable across different systems. The d_name + * field contains the name of the directory entry without leading path. + * While d_name is portable across different systems the actual storage + * capacity of d_name varies from system to system and there is no portable + * way to find out it at compile time as different systems define the + * capacity of d_name with different macros and some systems do not define + * capacity at all (besides actual declaration of the field). If you really + * need to find out storage capacity of d_name then you might want to try + * NAME_MAX macro. The NAME_MAX is defined in POSIX standard althought + * there are many MS-DOS and MS-Windows implementations those do not define + * it. There are also systems that declare d_name as "char d_name[1]" and + * then allocate suitable amount of memory at run-time. Thanks to Alain + * Decamps (Alain.Decamps@advalvas.be) for pointing it out to me. + * + * This all leads to the fact that it is difficult to allocate space + * for the directory names when the very same program is being compiled on + * number of operating systems. Therefore I suggest that you always + * allocate space for directory names dynamically. + * + * + * Returns a pointer to a structure containing name of the directory entry + * in `d_name' field or NULL if there was an error. In case of an error the + * global `errno' variable will set as follows: + * + * + * [EBADF |dir parameter refers to an invalid directory stream. This value + * is not set reliably on all implementations.] + *
+ *
+ */ +static struct dirent * +readdir (DIR *dirp) +{ + assert(dirp != NULL); + if (dirp == NULL) { + errno = EBADF; + return NULL; + } + +#if defined(DIRENT_WIN32_INTERFACE) + if (dirp->search_handle == INVALID_HANDLE_VALUE) { + /* directory stream was opened/rewound incorrectly or it ended normally */ + errno = EBADF; + return NULL; + } +#endif + + if (dirp->dirent_filled != 0) { + /* + * Directory entry has already been retrieved and there is no need to + * retrieve a new one. Directory entry will be retrieved in advance + * when the user calls readdir function for the first time. This is so + * because real dirent has separate functions for opening and reading + * the stream whereas Win32 and DOS dirents open the stream + * automatically when we retrieve the first file. Therefore, we have to + * save the first file when opening the stream and later we have to + * return the saved entry when the user tries to read the first entry. + */ + dirp->dirent_filled = 0; + } else { + /* fill in entry and return that */ +#if defined(DIRENT_WIN32_INTERFACE) + if (FindNextFile (dirp->search_handle, &dirp->current.data) == FALSE) { + /* Last file has been processed or an error occured */ + FindClose (dirp->search_handle); + dirp->search_handle = INVALID_HANDLE_VALUE; + errno = ENOENT; + return NULL; + } + +# elif defined(DIRENT_MSDOS_INTERFACE) + if (_dos_findnext (&dirp->current.data) != 0) { + /* _dos_findnext and findnext will set errno to ENOENT when no + * more entries could be retrieved. */ + return NULL; + } +# endif + + _setdirname (dirp); + assert (dirp->dirent_filled == 0); + } + return &dirp->current; +} + + +/* + * + * close directory stream. + * int closedir (DIR *dirp); + * + * Close directory stream opened by the `opendir' function. Close of + * directory stream invalidates the DIR structure as well as previously read + * dirent entry. + * + * The function typically returns 0 on success and -1 on failure but + * the function may be declared to return void on same systems. At least + * Borland C/C++ and some UNIX implementations use void as a return type. + * The dirent wrapper tries to define VOID_CLOSEDIR whenever closedir is + * known to return nothing. The very same definition is made by the GNU + * autoconf if you happen to use it. + * + * The global `errno' variable will set to EBADF in case of error. + * + */ +static int +closedir (DIR *dirp) +{ + int retcode = 0; + + /* make sure that dirp points to legal structure */ + assert (dirp != NULL); + if (dirp == NULL) { + errno = EBADF; + return -1; + } + + /* free directory name and search handles */ + if (dirp->dirname != NULL) free (dirp->dirname); + +#if defined(DIRENT_WIN32_INTERFACE) + if (dirp->search_handle != INVALID_HANDLE_VALUE) { + if (FindClose (dirp->search_handle) == FALSE) { + /* Unknown error */ + retcode = -1; + errno = EBADF; + } + } +#endif + + /* clear dirp structure to make sure that it cannot be used anymore*/ + memset (dirp, 0, sizeof (*dirp)); +# if defined(DIRENT_WIN32_INTERFACE) + dirp->search_handle = INVALID_HANDLE_VALUE; +# endif + + free (dirp); + return retcode; +} + + +/* + * + * rewind directory stream to the beginning + * void rewinddir (DIR *dirp); + * + * Rewind directory stream to the beginning so that the next call of + * readdir() returns the very first directory entry again. However, note + * that next call of readdir() may not return the same directory entry as it + * did in first time. The directory stream may have been affected by newly + * created files. + * + * Almost every dirent implementation ensure that rewinddir will update + * the directory stream to reflect any changes made to the directory entries + * since the previous ``opendir'' or ``rewinddir'' call. Keep an eye on + * this if your program depends on the feature. I know at least one dirent + * implementation where you are required to close and re-open the stream to + * see the changes. + * + * Returns nothing. If something went wrong while rewinding, you will + * notice it later when you try to retrieve the first directory entry. + */ +static void +rewinddir (DIR *dirp) +{ + /* make sure that dirp is legal */ + assert (dirp != NULL); + if (dirp == NULL) { + errno = EBADF; + return; + } + assert (dirp->dirname != NULL); + + /* close previous stream */ +#if defined(DIRENT_WIN32_INTERFACE) + if (dirp->search_handle != INVALID_HANDLE_VALUE) { + if (FindClose (dirp->search_handle) == FALSE) { + /* Unknown error */ + errno = EBADF; + } + } +#endif + + /* re-open previous stream */ + if (_initdir (dirp) == 0) { + /* initialization failed but we cannot deal with error. User will notice + * error later when she tries to retrieve first directory enty. */ + /*EMPTY*/; + } +} + + +/* + * Open native directory stream object and retrieve first file. + * Be sure to close previous stream before opening new one. + */ +static int +_initdir (DIR *dirp) +{ + assert (dirp != NULL); + assert (dirp->dirname != NULL); + dirp->dirent_filled = 0; + +# if defined(DIRENT_WIN32_INTERFACE) + /* Open stream and retrieve first file */ + dirp->search_handle = FindFirstFile (dirp->dirname, &dirp->current.data); + if (dirp->search_handle == INVALID_HANDLE_VALUE) { + /* something went wrong but we don't know what. GetLastError() could + * give us more information about the error, but then we should map + * the error code into errno. */ + errno = ENOENT; + return 0; + } + +# elif defined(DIRENT_MSDOS_INTERFACE) + if (_dos_findfirst (dirp->dirname, + _A_SUBDIR | _A_RDONLY | _A_ARCH | _A_SYSTEM | _A_HIDDEN, + &dirp->current.data) != 0) + { + /* _dos_findfirst and findfirst will set errno to ENOENT when no + * more entries could be retrieved. */ + return 0; + } +# endif + + /* initialize DIR and it's first entry */ + _setdirname (dirp); + dirp->dirent_filled = 1; + return 1; +} + + +/* + * Return implementation dependent name of the current directory entry. + */ +static const char * +_getdirname (const struct dirent *dp) +{ +#if defined(DIRENT_WIN32_INTERFACE) + return dp->data.cFileName; + +#elif defined(DIRENT_USE_FFBLK) + return dp->data.ff_name; + +#else + return dp->data.name; +#endif +} + + +/* + * Copy name of implementation dependent directory entry to the d_name field. + */ +static void +_setdirname (struct DIR *dirp) { + /* make sure that d_name is long enough */ + assert (strlen (_getdirname (&dirp->current)) <= NAME_MAX); + + strncpy (dirp->current.d_name, + _getdirname (&dirp->current), + NAME_MAX); + dirp->current.d_name[NAME_MAX] = '\0'; /*char d_name[NAME_MAX+1]*/ +} + +# ifdef __cplusplus +} +# endif +# define NAMLEN(dp) ((int)(strlen((dp)->d_name))) + +#else +# error "missing dirent interface" +#endif + + +#endif /*DIRENT_H*/ diff --git a/contrib/menuetlibc/openjpeg/common/color.c b/contrib/menuetlibc/openjpeg/common/color.c new file mode 100644 index 0000000000..ac0921a05e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/common/color.c @@ -0,0 +1,463 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include +#include +#include +#include + +#include "opj_config.h" +#include "openjpeg.h" +#include "color.h" + +#ifdef HAVE_LIBLCMS2 +#include +#endif +#ifdef HAVE_LIBLCMS1 +#include +#endif + +/*-------------------------------------------------------- +Matrix für sYCC, Amendment 1 to IEC 61966-2-1 + +Y : 0.299 0.587 0.114 :R +Cb: -0.1687 -0.3312 0.5 :G +Cr: 0.5 -0.4187 -0.0812 :B + +Inverse: + +R: 1 -3.68213e-05 1.40199 :Y +G: 1.00003 -0.344125 -0.714128 :Cb - 2^(prec - 1) +B: 0.999823 1.77204 -8.04142e-06 :Cr - 2^(prec - 1) + +-----------------------------------------------------------*/ +static void sycc_to_rgb(int offset, int upb, int y, int cb, int cr, + int *out_r, int *out_g, int *out_b) +{ + int r, g, b; + + cb -= offset; cr -= offset; + r = y + (int)(1.402 * (float)cr); + if(r < 0) r = 0; else if(r > upb) r = upb; *out_r = r; + + g = y - (int)(0.344 * (float)cb + 0.714 * (float)cr); + if(g < 0) g = 0; else if(g > upb) g = upb; *out_g = g; + + b = y + (int)(1.772 * (float)cb); + if(b < 0) b = 0; else if(b > upb) b = upb; *out_b = b; +} + +static void sycc444_to_rgb(opj_image_t *img) +{ + int *d0, *d1, *d2, *r, *g, *b; + const int *y, *cb, *cr; + int maxw, maxh, max, i, offset, upb; + + i = img->comps[0].prec; + offset = 1<<(i - 1); upb = (1<comps[0].w; maxh = img->comps[0].h; + max = maxw * maxh; + + y = img->comps[0].data; + cb = img->comps[1].data; + cr = img->comps[2].data; + + d0 = r = (int*)malloc(sizeof(int) * max); + d1 = g = (int*)malloc(sizeof(int) * max); + d2 = b = (int*)malloc(sizeof(int) * max); + + for(i = 0; i < max; ++i) + { + sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b); + + ++y; ++cb; ++cr; ++r; ++g; ++b; + } + free(img->comps[0].data); img->comps[0].data = d0; + free(img->comps[1].data); img->comps[1].data = d1; + free(img->comps[2].data); img->comps[2].data = d2; + +}/* sycc444_to_rgb() */ + +static void sycc422_to_rgb(opj_image_t *img) +{ + int *d0, *d1, *d2, *r, *g, *b; + const int *y, *cb, *cr; + int maxw, maxh, max, offset, upb; + int i, j; + + i = img->comps[0].prec; + offset = 1<<(i - 1); upb = (1<comps[0].w; maxh = img->comps[0].h; + max = maxw * maxh; + + y = img->comps[0].data; + cb = img->comps[1].data; + cr = img->comps[2].data; + + d0 = r = (int*)malloc(sizeof(int) * max); + d1 = g = (int*)malloc(sizeof(int) * max); + d2 = b = (int*)malloc(sizeof(int) * max); + + for(i=0; i < maxh; ++i) + { + for(j=0; j < maxw; j += 2) + { + sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b); + + ++y; ++r; ++g; ++b; + + sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b); + + ++y; ++r; ++g; ++b; ++cb; ++cr; + } + } + free(img->comps[0].data); img->comps[0].data = d0; + free(img->comps[1].data); img->comps[1].data = d1; + free(img->comps[2].data); img->comps[2].data = d2; + + img->comps[1].w = maxw; img->comps[1].h = maxh; + img->comps[2].w = maxw; img->comps[2].h = maxh; + img->comps[1].dx = img->comps[0].dx; + img->comps[2].dx = img->comps[0].dx; + img->comps[1].dy = img->comps[0].dy; + img->comps[2].dy = img->comps[0].dy; + +}/* sycc422_to_rgb() */ + +static void sycc420_to_rgb(opj_image_t *img) +{ + int *d0, *d1, *d2, *r, *g, *b, *nr, *ng, *nb; + const int *y, *cb, *cr, *ny; + int maxw, maxh, max, offset, upb; + int i, j; + + i = img->comps[0].prec; + offset = 1<<(i - 1); upb = (1<comps[0].w; maxh = img->comps[0].h; + max = maxw * maxh; + + y = img->comps[0].data; + cb = img->comps[1].data; + cr = img->comps[2].data; + + d0 = r = (int*)malloc(sizeof(int) * max); + d1 = g = (int*)malloc(sizeof(int) * max); + d2 = b = (int*)malloc(sizeof(int) * max); + + for(i=0; i < maxh; i += 2) + { + ny = y + maxw; + nr = r + maxw; ng = g + maxw; nb = b + maxw; + + for(j=0; j < maxw; j += 2) + { + sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b); + + ++y; ++r; ++g; ++b; + + sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b); + + ++y; ++r; ++g; ++b; + + sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb); + + ++ny; ++nr; ++ng; ++nb; + + sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb); + + ++ny; ++nr; ++ng; ++nb; ++cb; ++cr; + } + y += maxw; r += maxw; g += maxw; b += maxw; + } + free(img->comps[0].data); img->comps[0].data = d0; + free(img->comps[1].data); img->comps[1].data = d1; + free(img->comps[2].data); img->comps[2].data = d2; + + img->comps[1].w = maxw; img->comps[1].h = maxh; + img->comps[2].w = maxw; img->comps[2].h = maxh; + img->comps[1].dx = img->comps[0].dx; + img->comps[2].dx = img->comps[0].dx; + img->comps[1].dy = img->comps[0].dy; + img->comps[2].dy = img->comps[0].dy; + +}/* sycc420_to_rgb() */ + +void color_sycc_to_rgb(opj_image_t *img) +{ + if(img->numcomps < 3) + { + img->color_space = CLRSPC_GRAY; + return; + } + + if((img->comps[0].dx == 1) + && (img->comps[1].dx == 2) + && (img->comps[2].dx == 2) + && (img->comps[0].dy == 1) + && (img->comps[1].dy == 2) + && (img->comps[2].dy == 2))/* horizontal and vertical sub-sample */ + { + sycc420_to_rgb(img); + } + else + if((img->comps[0].dx == 1) + && (img->comps[1].dx == 2) + && (img->comps[2].dx == 2) + && (img->comps[0].dy == 1) + && (img->comps[1].dy == 1) + && (img->comps[2].dy == 1))/* horizontal sub-sample only */ + { + sycc422_to_rgb(img); + } + else + if((img->comps[0].dx == 1) + && (img->comps[1].dx == 1) + && (img->comps[2].dx == 1) + && (img->comps[0].dy == 1) + && (img->comps[1].dy == 1) + && (img->comps[2].dy == 1))/* no sub-sample */ + { + sycc444_to_rgb(img); + } + else + { + fprintf(stderr,"%s:%d:color_sycc_to_rgb\n\tCAN NOT CONVERT\n", + __FILE__,__LINE__); + return; + } + img->color_space = CLRSPC_SRGB; + +}/* color_sycc_to_rgb() */ + +#if defined(HAVE_LIBLCMS2) || defined(HAVE_LIBLCMS1) +#ifdef HAVE_LIBLCMS1 +/* Bob Friesenhahn proposed:*/ +#define cmsSigXYZData icSigXYZData +#define cmsSigLabData icSigLabData +#define cmsSigCmykData icSigCmykData +#define cmsSigYCbCrData icSigYCbCrData +#define cmsSigLuvData icSigLuvData +#define cmsSigGrayData icSigGrayData +#define cmsSigRgbData icSigRgbData +#define cmsUInt32Number DWORD + +#define cmsColorSpaceSignature icColorSpaceSignature +#define cmsGetHeaderRenderingIntent cmsTakeRenderingIntent + +#endif /* HAVE_LIBLCMS1 */ + +void color_apply_icc_profile(opj_image_t *image) +{ + cmsHPROFILE in_prof, out_prof; + cmsHTRANSFORM transform; + cmsColorSpaceSignature in_space, out_space; + cmsUInt32Number intent, in_type, out_type, nr_samples; + int *r, *g, *b; + int prec, i, max, max_w, max_h; + OPJ_COLOR_SPACE oldspace; + + in_prof = + cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len); + in_space = cmsGetPCS(in_prof); + out_space = cmsGetColorSpace(in_prof); + intent = cmsGetHeaderRenderingIntent(in_prof); + + + max_w = image->comps[0].w; max_h = image->comps[0].h; + prec = image->comps[0].prec; + oldspace = image->color_space; + + if(out_space == cmsSigRgbData) /* enumCS 16 */ + { + in_type = TYPE_RGB_16; + out_type = TYPE_RGB_16; + out_prof = cmsCreate_sRGBProfile(); + image->color_space = CLRSPC_SRGB; + } + else + if(out_space == cmsSigGrayData) /* enumCS 17 */ + { + in_type = TYPE_GRAY_8; + out_type = TYPE_RGB_8; + out_prof = cmsCreate_sRGBProfile(); + image->color_space = CLRSPC_SRGB; + } + else + if(out_space == cmsSigYCbCrData) /* enumCS 18 */ + { + in_type = TYPE_YCbCr_16; + out_type = TYPE_RGB_16; + out_prof = cmsCreate_sRGBProfile(); + image->color_space = CLRSPC_SRGB; + } + else + { +#ifdef DEBUG_PROFILE +fprintf(stderr,"%s:%d: color_apply_icc_profile\n\tICC Profile has unknown " +"output colorspace(%#x)(%c%c%c%c)\n\tICC Profile ignored.\n", +__FILE__,__LINE__,out_space, +(out_space>>24) & 0xff,(out_space>>16) & 0xff, +(out_space>>8) & 0xff, out_space & 0xff); +#endif + return; + } + +#ifdef DEBUG_PROFILE +fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tchannels(%d) prec(%d) w(%d) h(%d)" +"\n\tprofile: in(%p) out(%p)\n",__FILE__,__LINE__,image->numcomps,prec, +max_w,max_h, (void*)in_prof,(void*)out_prof); + +fprintf(stderr,"\trender_intent (%u)\n\t" +"color_space: in(%#x)(%c%c%c%c) out:(%#x)(%c%c%c%c)\n\t" +" type: in(%u) out:(%u)\n", +intent, +in_space, +(in_space>>24) & 0xff,(in_space>>16) & 0xff, +(in_space>>8) & 0xff, in_space & 0xff, + +out_space, +(out_space>>24) & 0xff,(out_space>>16) & 0xff, +(out_space>>8) & 0xff, out_space & 0xff, + +in_type,out_type + ); +#endif /* DEBUG_PROFILE */ + + transform = cmsCreateTransform(in_prof, in_type, + out_prof, out_type, intent, 0); + +#ifdef HAVE_LIBLCMS2 +/* Possible for: LCMS_VERSION >= 2000 :*/ + cmsCloseProfile(in_prof); + cmsCloseProfile(out_prof); +#endif + + if(transform == NULL) + { +#ifdef DEBUG_PROFILE +fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tcmsCreateTransform failed. " +"ICC Profile ignored.\n",__FILE__,__LINE__); +#endif + image->color_space = oldspace; +#ifdef HAVE_LIBLCMS1 + cmsCloseProfile(in_prof); + cmsCloseProfile(out_prof); +#endif + return; + } + + if(image->numcomps > 2)/* RGB, RGBA */ + { + unsigned short *inbuf, *outbuf, *in, *out; + max = max_w * max_h; nr_samples = max * 3 * sizeof(unsigned short); + in = inbuf = (unsigned short*)malloc(nr_samples); + out = outbuf = (unsigned short*)malloc(nr_samples); + + r = image->comps[0].data; + g = image->comps[1].data; + b = image->comps[2].data; + + for(i = 0; i < max; ++i) + { + *in++ = (unsigned short)*r++; + *in++ = (unsigned short)*g++; + *in++ = (unsigned short)*b++; + } + + cmsDoTransform(transform, inbuf, outbuf, max); + + r = image->comps[0].data; + g = image->comps[1].data; + b = image->comps[2].data; + + for(i = 0; i < max; ++i) + { + *r++ = (int)*out++; + *g++ = (int)*out++; + *b++ = (int)*out++; + } + free(inbuf); free(outbuf); + } + else /* GRAY, GRAYA */ + { + unsigned char *in, *inbuf, *out, *outbuf; + + max = max_w * max_h; nr_samples = max * 3 * sizeof(unsigned char); + in = inbuf = (unsigned char*)malloc(nr_samples); + out = outbuf = (unsigned char*)malloc(nr_samples); + + image->comps = (opj_image_comp_t*) + realloc(image->comps, (image->numcomps+2)*sizeof(opj_image_comp_t)); + + if(image->numcomps == 2) + image->comps[3] = image->comps[1]; + + image->comps[1] = image->comps[0]; + image->comps[2] = image->comps[0]; + + image->comps[1].data = (int*)calloc(max, sizeof(int)); + image->comps[2].data = (int*)calloc(max, sizeof(int)); + + image->numcomps += 2; + + r = image->comps[0].data; + + for(i = 0; i < max; ++i) + { + *in++ = (unsigned char)*r++; + } + cmsDoTransform(transform, inbuf, outbuf, max); + + r = image->comps[0].data; + g = image->comps[1].data; + b = image->comps[2].data; + + for(i = 0; i < max; ++i) + { + *r++ = (int)*out++; *g++ = (int)*out++; *b++ = (int)*out++; + } + free(inbuf); free(outbuf); + + }/* if(image->numcomps */ + + cmsDeleteTransform(transform); + +#ifdef HAVE_LIBLCMS1 + cmsCloseProfile(in_prof); + cmsCloseProfile(out_prof); +#endif +}/* color_apply_icc_profile() */ + +#endif /* HAVE_LIBLCMS2 || HAVE_LIBLCMS1 */ + diff --git a/contrib/menuetlibc/openjpeg/common/color.h b/contrib/menuetlibc/openjpeg/common/color.h new file mode 100644 index 0000000000..26117b0285 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/common/color.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef _OPJ_COLOR_H_ +#define _OPJ_COLOR_H_ + +extern void color_sycc_to_rgb(opj_image_t *img); +extern void color_apply_icc_profile(opj_image_t *image); + +#endif /* _OPJ_COLOR_H_ */ diff --git a/contrib/menuetlibc/openjpeg/common/format_defs.h b/contrib/menuetlibc/openjpeg/common/format_defs.h new file mode 100644 index 0000000000..d4be93b5da --- /dev/null +++ b/contrib/menuetlibc/openjpeg/common/format_defs.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef _OPJ_FORMAT_DEFS_H_ +#define _OPJ_FORMAT_DEFS_H_ + +#define J2K_CFMT 0 +#define JP2_CFMT 1 +#define JPT_CFMT 2 + +#define PXM_DFMT 10 +#define PGX_DFMT 11 +#define BMP_DFMT 12 +#define YUV_DFMT 13 +#define TIF_DFMT 14 +#define RAW_DFMT 15 +#define TGA_DFMT 16 +#define PNG_DFMT 17 + +#endif /* _OPJ_FORMAT_DEFS_H_ */ \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/common/getopt.c b/contrib/menuetlibc/openjpeg/common/getopt.c new file mode 100644 index 0000000000..5e444d399e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/common/getopt.c @@ -0,0 +1,261 @@ +/* + * Copyright (c) 1987, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University 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 THE REGENTS AND CONTRIBUTORS ``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 THE REGENTS OR CONTRIBUTORS 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. + */ + +/* last review : october 29th, 2002 */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95"; +#endif /* LIBC_SCCS and not lint */ + +#include +#include +#include + +int opterr = 1, /* if error message should be printed */ + optind = 1, /* index into parent argv vector */ + optopt, /* character checked for validity */ + optreset; /* reset getopt */ +const char *optarg; /* argument associated with option */ + +typedef struct option +{ + const char *name; + int has_arg; + int *flag; + int val; +}option_t; + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG "" + +/* As this class remembers its values from one Java call to the other, reset the values before each use */ +void reset_options_reading() { + opterr = 1; + optind = 1; +} + +/* + * getopt -- + * Parse argc/argv argument vector. + */ +int getopt(int nargc, char *const *nargv, const char *ostr) { +# define __progname nargv[0] + static const char *place = EMSG; /* option letter processing */ + char *oli; /* option letter list index */ + + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return (-1); + } + if (place[1] && *++place == '-') { /* found "--" */ + ++optind; + place = EMSG; + return (-1); + } + } /* option letter okay? */ + if ((optopt = (int) *place++) == (int) ':' || + !(oli = strchr(ostr, optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (optopt == (int) '-') + return (-1); + if (!*place) + ++optind; + if (opterr && *ostr != ':') { + fprintf(stderr, + "%s: illegal option -- %c\n", __progname, optopt); + return (BADCH); + } + } + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if (*ostr == ':') + return (BADARG); + if (opterr) { + fprintf(stderr, + "%s: option requires an argument -- %c\n", + __progname, optopt); + return (BADCH); + } + } else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + return (optopt); /* dump back option letter */ +} + + +int getopt_long(int argc, char * const argv[], const char *optstring, +struct option *longopts, int totlen) { + static int lastidx,lastofs; + char *tmp; + int i,len; + char param = 1; + +again: + if (optind >= argc || !argv[optind] || *argv[optind]!='-') + return -1; + + if (argv[optind][0]=='-' && argv[optind][1]==0) { + if(optind >= (argc - 1)){ /* no more input parameters */ + param = 0; + } + else{ /* more input parameters */ + if(argv[optind + 1][0] == '-'){ + param = 0; /* Missing parameter after '-' */ + } + else{ + param = 2; + } + } + } + + if (param == 0) { + ++optind; + return (BADCH); + } + + if (argv[optind][0]=='-') { /* long option */ + char* arg=argv[optind]+1; + const struct option* o; + o=longopts; + len=sizeof(longopts[0]); + + if (param > 1){ + arg = argv[optind+1]; + optind++; + } + else + arg = argv[optind]+1; + + if(strlen(arg)>1){ + for (i=0;iname,arg)) { /* match */ + if (o->has_arg == 0) { + if ((argv[optind+1])&&(!(argv[optind+1][0]=='-'))){ + fprintf(stderr,"%s: option does not require an argument. Ignoring %s\n",arg,argv[optind+1]); + ++optind; + } + }else{ + optarg=argv[optind+1]; + if(optarg){ + if (optarg[0] == '-'){ /* Has read next input parameter: No arg for current parameter */ + if (opterr) { + fprintf(stderr,"%s: option requires an argument\n",arg); + return (BADCH); + } + } + } + if (!optarg && o->has_arg==1) { /* no argument there */ + if (opterr) { + fprintf(stderr,"%s: option requires an argument \n",arg); + return (BADCH); + } + } + ++optind; + } + ++optind; + if (o->flag) + *(o->flag)=o->val; + else + return o->val; + return 0; + } + }//(end for)String not found in the list + fprintf(stderr,"Invalid option %s\n",arg); + ++optind; + return (BADCH); + }else{ /*Single character input parameter*/ + if (*optstring==':') return ':'; + if (lastidx!=optind) { + lastidx=optind; lastofs=0; + } + optopt=argv[optind][lastofs+1]; + if ((tmp=strchr(optstring,optopt))) {/*Found input parameter in list*/ + if (*tmp==0) { /* apparently, we looked for \0, i.e. end of argument */ + ++optind; + goto again; + } + if (tmp[1]==':') { /* argument expected */ + if (tmp[2]==':' || argv[optind][lastofs+2]) { /* "-foo", return "oo" as optarg */ + if (!*(optarg=argv[optind]+lastofs+2)) optarg=0; + goto found; + } + optarg=argv[optind+1]; + if(optarg){ + if (optarg[0] == '-'){ /* Has read next input parameter: No arg for current parameter */ + if (opterr) { + fprintf(stderr,"%s: option requires an argument\n",arg); + return (BADCH); + } + } + } + if (!optarg) { /* missing argument */ + if (opterr) { + fprintf(stderr,"%s: option requires an argument\n",arg); + return (BADCH); + } + } + ++optind; + }else {/*Argument not expected*/ + ++lastofs; + return optopt; + } +found: + ++optind; + return optopt; + } else { /* not found */ + fprintf(stderr,"Invalid option %s\n",arg); + ++optind; + return (BADCH); + }//end of not found + + }// end of single character + }//end '-' + fprintf(stderr,"Invalid option\n"); + ++optind; + return (BADCH);; +}//end function diff --git a/contrib/menuetlibc/openjpeg/common/getopt.h b/contrib/menuetlibc/openjpeg/common/getopt.h new file mode 100644 index 0000000000..779fe470b3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/common/getopt.h @@ -0,0 +1,29 @@ +/* last review : october 29th, 2002 */ + +#ifndef _GETOPT_H_ +#define _GETOPT_H_ + +typedef struct option +{ + const char *name; + int has_arg; + int *flag; + int val; +}option_t; + +#define NO_ARG 0 +#define REQ_ARG 1 +#define OPT_ARG 2 + +extern int opterr; +extern int optind; +extern int optopt; +extern int optreset; +extern char *optarg; + +extern int getopt(int nargc, char *const *nargv, const char *ostr); +extern int getopt_long(int argc, char * const argv[], const char *optstring, + const struct option *longopts, int totlen); +extern void reset_options_reading(); + +#endif /* _GETOPT_H_ */ diff --git a/contrib/menuetlibc/openjpeg/config.guess b/contrib/menuetlibc/openjpeg/config.guess new file mode 100755 index 0000000000..dc84c68ef7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/config.guess @@ -0,0 +1,1501 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-11-20' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/contrib/menuetlibc/openjpeg/config.log b/contrib/menuetlibc/openjpeg/config.log new file mode 100644 index 0000000000..31dbc82105 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/config.log @@ -0,0 +1,1199 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by OpenJPEG configure 1.4.0, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ ./configure --no-create --no-recursion + +## --------- ## +## Platform. ## +## --------- ## + +hostname = a-HP-Pavilion-g6-Notebook-PC +uname -m = x86_64 +uname -r = 3.8.0-37-generic +uname -s = Linux +uname -v = #53~precise1-Ubuntu SMP Wed Feb 19 21:37:54 UTC 2014 + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = unknown +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /usr/local/sbin +PATH: /usr/local/bin +PATH: /usr/sbin +PATH: /usr/bin +PATH: /sbin +PATH: /bin +PATH: /usr/games + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:2415: checking build system type +configure:2429: result: x86_64-unknown-linux-gnu +configure:2449: checking host system type +configure:2462: result: x86_64-unknown-linux-gnu +configure:2482: checking target system type +configure:2495: result: x86_64-unknown-linux-gnu +configure:2539: checking for a BSD-compatible install +configure:2607: result: /usr/bin/install -c +configure:2618: checking whether build environment is sane +configure:2668: result: yes +configure:2809: checking for a thread-safe mkdir -p +configure:2848: result: /bin/mkdir -p +configure:2861: checking for gawk +configure:2891: result: no +configure:2861: checking for mawk +configure:2877: found /usr/bin/mawk +configure:2888: result: mawk +configure:2899: checking whether make sets $(MAKE) +configure:2921: result: yes +configure:3065: checking for gcc +configure:3081: found /usr/bin/gcc +configure:3092: result: gcc +configure:3321: checking for C compiler version +configure:3330: gcc --version >&5 +gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 +Copyright (C) 2011 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:3341: $? = 0 +configure:3330: gcc -v >&5 +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) +configure:3341: $? = 0 +configure:3330: gcc -V >&5 +gcc: error: unrecognized option '-V' +gcc: fatal error: no input files +compilation terminated. +configure:3341: $? = 4 +configure:3330: gcc -qversion >&5 +gcc: error: unrecognized option '-qversion' +gcc: fatal error: no input files +compilation terminated. +configure:3341: $? = 4 +configure:3361: checking whether the C compiler works +configure:3383: gcc conftest.c >&5 +configure:3387: $? = 0 +configure:3435: result: yes +configure:3438: checking for C compiler default output file name +configure:3440: result: a.out +configure:3446: checking for suffix of executables +configure:3453: gcc -o conftest conftest.c >&5 +configure:3457: $? = 0 +configure:3479: result: +configure:3501: checking whether we are cross compiling +configure:3509: gcc -o conftest conftest.c >&5 +configure:3513: $? = 0 +configure:3520: ./conftest +configure:3524: $? = 0 +configure:3539: result: no +configure:3544: checking for suffix of object files +configure:3566: gcc -c conftest.c >&5 +configure:3570: $? = 0 +configure:3591: result: o +configure:3595: checking whether we are using the GNU C compiler +configure:3614: gcc -c conftest.c >&5 +configure:3614: $? = 0 +configure:3623: result: yes +configure:3632: checking whether gcc accepts -g +configure:3652: gcc -c -g conftest.c >&5 +configure:3652: $? = 0 +configure:3693: result: yes +configure:3710: checking for gcc option to accept ISO C89 +configure:3774: gcc -c -g -O2 conftest.c >&5 +configure:3774: $? = 0 +configure:3787: result: none needed +configure:3818: checking for style of include used by make +configure:3846: result: GNU +configure:3871: checking dependency style of gcc +configure:3981: result: gcc3 +configure:4054: checking for g++ +configure:4070: found /usr/bin/g++ +configure:4081: result: g++ +configure:4108: checking for C++ compiler version +configure:4117: g++ --version >&5 +g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 +Copyright (C) 2011 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:4128: $? = 0 +configure:4117: g++ -v >&5 +Using built-in specs. +COLLECT_GCC=g++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) +configure:4128: $? = 0 +configure:4117: g++ -V >&5 +g++: error: unrecognized option '-V' +g++: fatal error: no input files +compilation terminated. +configure:4128: $? = 4 +configure:4117: g++ -qversion >&5 +g++: error: unrecognized option '-qversion' +g++: fatal error: no input files +compilation terminated. +configure:4128: $? = 4 +configure:4132: checking whether we are using the GNU C++ compiler +configure:4151: g++ -c conftest.cpp >&5 +configure:4151: $? = 0 +configure:4160: result: yes +configure:4169: checking whether g++ accepts -g +configure:4189: g++ -c -g conftest.cpp >&5 +configure:4189: $? = 0 +configure:4230: result: yes +configure:4255: checking dependency style of g++ +configure:4365: result: gcc3 +configure:4381: checking whether ln -s works +configure:4385: result: yes +configure:4392: checking for a sed that does not truncate output +configure:4456: result: /bin/sed +configure:4469: checking for special C compiler options needed for large files +configure:4514: result: no +configure:4520: checking for _FILE_OFFSET_BITS value needed for large files +configure:4545: gcc -c -g -O2 conftest.c >&5 +configure:4545: $? = 0 +configure:4577: result: no +configure:4660: checking for _LARGEFILE_SOURCE value needed for large files +configure:4679: gcc -o conftest -g -O2 conftest.c >&5 +configure:4679: $? = 0 +configure:4707: result: no +configure:4728: checking whether make sets $(MAKE) +configure:4750: result: yes +configure:5148: checking how to print strings +configure:5175: result: printf +configure:5196: checking for a sed that does not truncate output +configure:5260: result: /bin/sed +configure:5278: checking for grep that handles long lines and -e +configure:5336: result: /bin/grep +configure:5341: checking for egrep +configure:5403: result: /bin/grep -E +configure:5408: checking for fgrep +configure:5470: result: /bin/grep -F +configure:5505: checking for ld used by gcc +configure:5572: result: /usr/bin/ld +configure:5579: checking if the linker (/usr/bin/ld) is GNU ld +configure:5594: result: yes +configure:5606: checking for BSD- or MS-compatible name lister (nm) +configure:5655: result: /usr/bin/nm -B +configure:5785: checking the name lister (/usr/bin/nm -B) interface +configure:5792: gcc -c -g -O2 conftest.c >&5 +configure:5795: /usr/bin/nm -B "conftest.o" +configure:5798: output +0000000000000000 B some_variable +configure:5805: result: BSD nm +configure:5809: checking the maximum length of command line arguments +configure:5934: result: 3458764513820540925 +configure:5951: checking whether the shell understands some XSI constructs +configure:5961: result: yes +configure:5965: checking whether the shell understands "+=" +configure:5971: result: yes +configure:6006: checking for /usr/bin/ld option to reload object files +configure:6013: result: -r +configure:6082: checking for objdump +configure:6109: result: objdump +configure:6138: checking how to recognize dependent libraries +configure:6340: result: pass_all +configure:6400: checking for ar +configure:6416: found /usr/bin/ar +configure:6427: result: ar +configure:6505: checking for strip +configure:6521: found /usr/bin/strip +configure:6532: result: strip +configure:6604: checking for ranlib +configure:6620: found /usr/bin/ranlib +configure:6631: result: ranlib +configure:6733: checking command to parse /usr/bin/nm -B output from gcc object +configure:6851: gcc -c -g -O2 conftest.c >&5 +configure:6854: $? = 0 +configure:6858: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' \> conftest.nm +configure:6861: $? = 0 +configure:6915: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 +configure:6918: $? = 0 +configure:6956: result: ok +configure:7051: gcc -c -g -O2 conftest.c >&5 +configure:7054: $? = 0 +configure:7796: checking how to run the C preprocessor +configure:7827: gcc -E conftest.c +configure:7827: $? = 0 +configure:7841: gcc -E conftest.c +conftest.c:12:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:7841: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include +configure:7866: result: gcc -E +configure:7886: gcc -E conftest.c +configure:7886: $? = 0 +configure:7900: gcc -E conftest.c +conftest.c:12:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:7900: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include +configure:7929: checking for ANSI C header files +configure:7949: gcc -c -g -O2 conftest.c >&5 +configure:7949: $? = 0 +configure:8022: gcc -o conftest -g -O2 conftest.c >&5 +configure:8022: $? = 0 +configure:8022: ./conftest +configure:8022: $? = 0 +configure:8033: result: yes +configure:8046: checking for sys/types.h +configure:8046: gcc -c -g -O2 conftest.c >&5 +configure:8046: $? = 0 +configure:8046: result: yes +configure:8046: checking for sys/stat.h +configure:8046: gcc -c -g -O2 conftest.c >&5 +configure:8046: $? = 0 +configure:8046: result: yes +configure:8046: checking for stdlib.h +configure:8046: gcc -c -g -O2 conftest.c >&5 +configure:8046: $? = 0 +configure:8046: result: yes +configure:8046: checking for string.h +configure:8046: gcc -c -g -O2 conftest.c >&5 +configure:8046: $? = 0 +configure:8046: result: yes +configure:8046: checking for memory.h +configure:8046: gcc -c -g -O2 conftest.c >&5 +configure:8046: $? = 0 +configure:8046: result: yes +configure:8046: checking for strings.h +configure:8046: gcc -c -g -O2 conftest.c >&5 +configure:8046: $? = 0 +configure:8046: result: yes +configure:8046: checking for inttypes.h +configure:8046: gcc -c -g -O2 conftest.c >&5 +configure:8046: $? = 0 +configure:8046: result: yes +configure:8046: checking for stdint.h +configure:8046: gcc -c -g -O2 conftest.c >&5 +configure:8046: $? = 0 +configure:8046: result: yes +configure:8046: checking for unistd.h +configure:8046: gcc -c -g -O2 conftest.c >&5 +configure:8046: $? = 0 +configure:8046: result: yes +configure:8060: checking for dlfcn.h +configure:8060: gcc -c -g -O2 conftest.c >&5 +configure:8060: $? = 0 +configure:8060: result: yes +configure:8216: checking for objdir +configure:8231: result: .libs +configure:8498: checking if gcc supports -fno-rtti -fno-exceptions +configure:8516: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 +cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C [enabled by default] +configure:8520: $? = 0 +configure:8533: result: no +configure:8553: checking for gcc option to produce PIC +configure:8838: result: -fPIC -DPIC +configure:8850: checking if gcc PIC flag -fPIC -DPIC works +configure:8868: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 +configure:8872: $? = 0 +configure:8885: result: yes +configure:8909: checking if gcc static flag -static works +configure:8937: result: yes +configure:8952: checking if gcc supports -c -o file.o +configure:8973: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 +configure:8977: $? = 0 +configure:8999: result: yes +configure:9007: checking if gcc supports -c -o file.o +configure:9054: result: yes +configure:9087: checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +configure:10162: result: yes +configure:10199: checking whether -lc should be explicitly linked in +configure:10207: gcc -c -g -O2 conftest.c >&5 +configure:10210: $? = 0 +configure:10225: gcc -shared conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep -lc \>/dev/null 2\>\&1 +configure:10228: $? = 0 +configure:10242: result: no +configure:10407: checking dynamic linker characteristics +configure:10862: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 +configure:10862: $? = 0 +configure:11084: result: GNU/Linux ld.so +configure:11191: checking how to hardcode library paths into programs +configure:11216: result: immediate +configure:11756: checking whether stripping libraries is possible +configure:11761: result: yes +configure:11796: checking if libtool supports shared libraries +configure:11798: result: yes +configure:11801: checking whether to build shared libraries +configure:11822: result: yes +configure:11825: checking whether to build static libraries +configure:11829: result: yes +configure:11852: checking how to run the C++ preprocessor +configure:11879: g++ -E conftest.cpp +configure:11879: $? = 0 +configure:11893: g++ -E conftest.cpp +conftest.cpp:24:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:11893: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| /* end confdefs.h. */ +| #include +configure:11918: result: g++ -E +configure:11938: g++ -E conftest.cpp +configure:11938: $? = 0 +configure:11952: g++ -E conftest.cpp +conftest.cpp:24:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:11952: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| /* end confdefs.h. */ +| #include +configure:12120: checking for ld used by g++ +configure:12187: result: /usr/bin/ld -m elf_x86_64 +configure:12194: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld +configure:12209: result: yes +configure:12264: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +configure:13196: result: yes +configure:13224: g++ -c -g -O2 conftest.cpp >&5 +configure:13227: $? = 0 +configure:13409: checking for g++ option to produce PIC +configure:13731: result: -fPIC -DPIC +configure:13740: checking if g++ PIC flag -fPIC -DPIC works +configure:13758: g++ -c -g -O2 -fPIC -DPIC -DPIC conftest.cpp >&5 +configure:13762: $? = 0 +configure:13775: result: yes +configure:13796: checking if g++ static flag -static works +configure:13824: result: yes +configure:13836: checking if g++ supports -c -o file.o +configure:13857: g++ -c -g -O2 -o out/conftest2.o conftest.cpp >&5 +configure:13861: $? = 0 +configure:13883: result: yes +configure:13888: checking if g++ supports -c -o file.o +configure:13935: result: yes +configure:13965: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +configure:13993: result: yes +configure:14136: checking dynamic linker characteristics +configure:14747: result: GNU/Linux ld.so +configure:14800: checking how to hardcode library paths into programs +configure:14825: result: immediate +configure:14884: checking whether byte ordering is bigendian +configure:14899: gcc -c -g -O2 conftest.c >&5 +conftest.c:25:9: error: unknown type name 'not' +conftest.c:25:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal' +conftest.c:25:15: error: unknown type name 'universal' +configure:14899: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| /* end confdefs.h. */ +| #ifndef __APPLE_CC__ +| not a universal capable compiler +| #endif +| typedef int dummy; +| +configure:14944: gcc -c -g -O2 conftest.c >&5 +configure:14944: $? = 0 +configure:14962: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:31:4: error: unknown type name 'not' +conftest.c:31:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'endian' +configure:14962: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| /* end confdefs.h. */ +| #include +| #include +| +| int +| main () +| { +| #if BYTE_ORDER != BIG_ENDIAN +| not big endian +| #endif +| +| ; +| return 0; +| } +configure:15090: result: no +configure:15110: checking for sqrt in -lm +configure:15135: gcc -o conftest -g -O2 conftest.c -lm >&5 +conftest.c:31:6: warning: conflicting types for built-in function 'sqrt' [enabled by default] +configure:15135: $? = 0 +configure:15144: result: yes +configure:15151: checking for inflate in -lz +configure:15176: gcc -o conftest -g -O2 conftest.c -lz >&5 +configure:15176: $? = 0 +configure:15185: result: yes +configure:15196: checking for pkg-config +configure:15214: found /usr/bin/pkg-config +configure:15226: result: /usr/bin/pkg-config +configure:15238: checking whether to build with PNG support +configure:15255: checking for libpng-config +configure:15273: found /usr/bin/libpng-config +configure:15285: result: /usr/bin/libpng-config +configure:15325: checking /usr/include/libpng12/png.h usability +configure:15325: gcc -c -g -O2 conftest.c >&5 +configure:15325: $? = 0 +configure:15325: result: yes +configure:15325: checking /usr/include/libpng12/png.h presence +configure:15325: gcc -E conftest.c +configure:15325: $? = 0 +configure:15325: result: yes +configure:15325: checking for /usr/include/libpng12/png.h +configure:15325: result: yes +configure:15352: checking for png_create_read_struct in -lpng +configure:15377: gcc -o conftest -g -O2 conftest.c -lpng -L/usr/lib/x86_64-linux-gnu -lpng12 -lz -lm >&5 +configure:15377: $? = 0 +configure:15386: result: yes +configure:15413: result: png is usable:yes +configure:15428: checking whether to build with TIFF support +configure:15444: checking for jpeg_read_header in -ljpeg +configure:15469: gcc -o conftest -g -O2 conftest.c -ljpeg -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 >&5 +configure:15469: $? = 0 +configure:15478: result: yes +configure:15485: checking for jbg_enc_init in -ljbig +configure:15510: gcc -o conftest -g -O2 conftest.c -ljbig -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 >&5 +/usr/bin/ld: cannot find -ljbig +collect2: ld returned 1 exit status +configure:15510: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_LIBPNG 1 +| #define HAVE_LIBPNG 1 +| /* end confdefs.h. */ +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char jbg_enc_init (); +| int +| main () +| { +| return jbg_enc_init (); +| ; +| return 0; +| } +configure:15519: result: no +configure:15526: checking for jbg85_enc_init in -ljbig85 +configure:15551: gcc -o conftest -g -O2 conftest.c -ljbig85 -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 >&5 +/usr/bin/ld: cannot find -ljbig85 +collect2: ld returned 1 exit status +configure:15551: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_LIBPNG 1 +| #define HAVE_LIBPNG 1 +| /* end confdefs.h. */ +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char jbg85_enc_init (); +| int +| main () +| { +| return jbg85_enc_init (); +| ; +| return 0; +| } +configure:15560: result: no +configure:15570: checking for TIFFOpen in -ltiff +configure:15595: gcc -o conftest -g -O2 conftest.c -ltiff -ltiff -ljpeg -lz -lm >&5 +configure:15595: $? = 0 +configure:15604: result: yes +configure:15612: checking tiff.h usability +configure:15612: gcc -c -g -O2 conftest.c >&5 +configure:15612: $? = 0 +configure:15612: result: yes +configure:15612: checking tiff.h presence +configure:15612: gcc -E conftest.c +configure:15612: $? = 0 +configure:15612: result: yes +configure:15612: checking for tiff.h +configure:15612: result: yes +configure:15722: result: tiff is usable:yes +configure:15737: checking whether to build with LCMS support +configure:15783: checking lcms2.h usability +configure:15783: gcc -c -g -O2 conftest.c >&5 +conftest.c:60:19: fatal error: lcms2.h: No such file or directory +compilation terminated. +configure:15783: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_LIBPNG 1 +| #define HAVE_LIBPNG 1 +| #define HAVE_LIBTIFF 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef STDC_HEADERS +| # include +| # include +| #else +| # ifdef HAVE_STDLIB_H +| # include +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| #include +configure:15783: result: no +configure:15783: checking lcms2.h presence +configure:15783: gcc -E conftest.c +conftest.c:27:19: fatal error: lcms2.h: No such file or directory +compilation terminated. +configure:15783: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_LIBPNG 1 +| #define HAVE_LIBPNG 1 +| #define HAVE_LIBTIFF 1 +| /* end confdefs.h. */ +| #include +configure:15783: result: no +configure:15783: checking for lcms2.h +configure:15783: result: no +configure:15811: checking for cmsOpenProfileFromFile in -llcms2 +configure:15836: gcc -o conftest -g -O2 conftest.c -llcms2 -llcms2 -lm >&5 +/usr/bin/ld: cannot find -llcms2 +/usr/bin/ld: cannot find -llcms2 +collect2: ld returned 1 exit status +configure:15836: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "OpenJPEG" +| #define PACKAGE_TARNAME "openjpeg-1.4.0" +| #define PACKAGE_VERSION "1.4.0" +| #define PACKAGE_STRING "OpenJPEG 1.4.0" +| #define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +| #define PACKAGE_URL "http://www.openjpeg.org/" +| #define PACKAGE "openjpeg-1.4.0" +| #define VERSION "1.4.0" +| #define HAVE_FSEEKO 1 +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_LIBPNG 1 +| #define HAVE_LIBPNG 1 +| #define HAVE_LIBTIFF 1 +| /* end confdefs.h. */ +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char cmsOpenProfileFromFile (); +| int +| main () +| { +| return cmsOpenProfileFromFile (); +| ; +| return 0; +| } +configure:15845: result: no +configure:15878: result: lcms2 is usable:no +configure:15890: result: lcms2libs: +configure:15930: checking /usr/include/lcms.h usability +configure:15930: gcc -c -g -O2 conftest.c >&5 +configure:15930: $? = 0 +configure:15930: result: yes +configure:15930: checking /usr/include/lcms.h presence +configure:15930: gcc -E conftest.c +configure:15930: $? = 0 +configure:15930: result: yes +configure:15930: checking for /usr/include/lcms.h +configure:15930: result: yes +configure:15958: checking for cmsOpenProfileFromFile in -llcms +configure:15983: gcc -o conftest -g -O2 conftest.c -llcms -llcms -lm >&5 +configure:15983: $? = 0 +configure:15992: result: yes +configure:16024: result: lcms is usable:yes +configure:16042: checking whether to build with JPWL support +configure:16052: result: no +configure:16072: checking whether to build shared libraries +configure:16080: result: yes +configure:16096: checking whether to build the JP3D library +configure:16104: result: no +configure:16113: checking for doxygen +configure:16141: result: no +configure:16341: creating ./config.status + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_build=x86_64-unknown-linux-gnu +ac_cv_c_bigendian=no +ac_cv_c_compiler_gnu=yes +ac_cv_cxx_compiler_gnu=yes +ac_cv_env_CCC_set= +ac_cv_env_CCC_value= +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_CXXCPP_set= +ac_cv_env_CXXCPP_value= +ac_cv_env_CXXFLAGS_set= +ac_cv_env_CXXFLAGS_value= +ac_cv_env_CXX_set= +ac_cv_env_CXX_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_header__usr_include_lcms_h=yes +ac_cv_header__usr_include_libpng12_png_h=yes +ac_cv_header_dlfcn_h=yes +ac_cv_header_inttypes_h=yes +ac_cv_header_lcms2_h=no +ac_cv_header_memory_h=yes +ac_cv_header_stdc=yes +ac_cv_header_stdint_h=yes +ac_cv_header_stdlib_h=yes +ac_cv_header_string_h=yes +ac_cv_header_strings_h=yes +ac_cv_header_sys_stat_h=yes +ac_cv_header_sys_types_h=yes +ac_cv_header_tiff_h=yes +ac_cv_header_unistd_h=yes +ac_cv_host=x86_64-unknown-linux-gnu +ac_cv_lib_jbig85_jbg85_enc_init=no +ac_cv_lib_jbig_jbg_enc_init=no +ac_cv_lib_jpeg_jpeg_read_header=yes +ac_cv_lib_lcms2_cmsOpenProfileFromFile=no +ac_cv_lib_lcms_cmsOpenProfileFromFile=yes +ac_cv_lib_m_sqrt=yes +ac_cv_lib_png_png_create_read_struct=yes +ac_cv_lib_tiff_TIFFOpen=yes +ac_cv_lib_z_inflate=yes +ac_cv_objext=o +ac_cv_path_EGREP='/bin/grep -E' +ac_cv_path_FGREP='/bin/grep -F' +ac_cv_path_GREP=/bin/grep +ac_cv_path_LIBPNG_CONFIG=/usr/bin/libpng-config +ac_cv_path_PKGCONFIG=/usr/bin/pkg-config +ac_cv_path_SED=/bin/sed +ac_cv_path_install='/usr/bin/install -c' +ac_cv_path_mkdir=/bin/mkdir +ac_cv_prog_AWK=mawk +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_CXXCPP='g++ -E' +ac_cv_prog_ac_ct_AR=ar +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_ac_ct_CXX=g++ +ac_cv_prog_ac_ct_OBJDUMP=objdump +ac_cv_prog_ac_ct_RANLIB=ranlib +ac_cv_prog_ac_ct_STRIP=strip +ac_cv_prog_cc_c89= +ac_cv_prog_cc_g=yes +ac_cv_prog_cxx_g=yes +ac_cv_prog_make_make_set=yes +ac_cv_prog_with_doxygen=no +ac_cv_sys_file_offset_bits=no +ac_cv_sys_largefile_CC=no +ac_cv_sys_largefile_source=no +ac_cv_target=x86_64-unknown-linux-gnu +am_cv_CC_dependencies_compiler_type=gcc3 +am_cv_CXX_dependencies_compiler_type=gcc3 +lt_cv_archive_cmds_need_lc=no +lt_cv_deplibs_check_method=pass_all +lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_ld_reload_flag=-r +lt_cv_nm_interface='BSD nm' +lt_cv_objdir=.libs +lt_cv_path_LD=/usr/bin/ld +lt_cv_path_LDCXX='/usr/bin/ld -m elf_x86_64' +lt_cv_path_NM='/usr/bin/nm -B' +lt_cv_prog_compiler_c_o=yes +lt_cv_prog_compiler_c_o_CXX=yes +lt_cv_prog_compiler_pic_works=yes +lt_cv_prog_compiler_pic_works_CXX=yes +lt_cv_prog_compiler_rtti_exceptions=no +lt_cv_prog_compiler_static_works=yes +lt_cv_prog_compiler_static_works_CXX=yes +lt_cv_prog_gnu_ld=yes +lt_cv_prog_gnu_ldcxx=yes +lt_cv_shlibpath_overrides_runpath=no +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\''' +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +lt_cv_sys_max_cmd_len=3458764513820540925 + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +ACLOCAL='${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11' +AMDEPBACKSLASH='\' +AMDEP_FALSE='#' +AMDEP_TRUE='' +AMTAR='${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar' +AR='ar' +AS='as' +AUTOCONF='${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf' +AUTOHEADER='${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader' +AUTOMAKE='${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11' +AWK='mawk' +BUILD_NR='0' +CC='gcc' +CCDEPMODE='depmode=gcc3' +CFLAGS='-g -O2' +CPP='gcc -E' +CPPFLAGS='' +CXX='g++' +CXXCPP='g++ -E' +CXXDEPMODE='depmode=gcc3' +CXXFLAGS='-g -O2' +CYGPATH_W='echo' +DEFS='-DHAVE_CONFIG_H' +DEPDIR='.deps' +DLLTOOL='dlltool' +DSYMUTIL='' +DUMPBIN='' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='/bin/grep -E' +EXEEXT='' +FGREP='/bin/grep -F' +GREP='/bin/grep' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' +JP3D_BUILD_NR='0' +JP3D_MAJOR_NR='1' +JP3D_MINOR_NR='3' +LD='/usr/bin/ld -m elf_x86_64' +LDFLAGS='' +LIBOBJS='' +LIBPNG_CONFIG='/usr/bin/libpng-config' +LIBS=' -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms ' +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +LIPO='' +LN_S='ln -s' +LTLIBOBJS='' +MAJOR_NR='1' +MAKEINFO='${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo' +MINOR_NR='4' +MKDIR_P='/bin/mkdir -p' +NM='/usr/bin/nm -B' +NMEDIT='' +OBJDUMP='objdump' +OBJEXT='o' +OTOOL64='' +OTOOL='' +PACKAGE='openjpeg-1.4.0' +PACKAGE_BUGREPORT='http://code.google.com/p/openjpeg/' +PACKAGE_NAME='OpenJPEG' +PACKAGE_STRING='OpenJPEG 1.4.0' +PACKAGE_TARNAME='openjpeg-1.4.0' +PACKAGE_URL='http://www.openjpeg.org/' +PACKAGE_VERSION='1.4.0' +PATH_SEPARATOR=':' +PKGCONFIG='/usr/bin/pkg-config' +RANLIB='ranlib' +SED='/bin/sed' +SET_MAKE='' +SHELL='/bin/bash' +STRIP='strip' +VERSION='1.4.0' +ac_ct_CC='gcc' +ac_ct_CXX='g++' +ac_ct_DUMPBIN='' +am__EXEEXT_FALSE='' +am__EXEEXT_TRUE='#' +am__fastdepCC_FALSE='#' +am__fastdepCC_TRUE='' +am__fastdepCXX_FALSE='#' +am__fastdepCXX_TRUE='' +am__include='include' +am__isrc='' +am__leading_dot='.' +am__quote='' +am__tar='${AMTAR} chof - "$$tardir"' +am__untar='${AMTAR} xf -' +bindir='${exec_prefix}/bin' +build='x86_64-unknown-linux-gnu' +build_alias='' +build_cpu='x86_64' +build_os='linux-gnu' +build_vendor='unknown' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +dvidir='${docdir}' +exec_prefix='${prefix}' +host='x86_64-unknown-linux-gnu' +host_alias='' +host_cpu='x86_64' +host_os='linux-gnu' +host_vendor='unknown' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +install_sh='${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh' +jp3d_dir='' +jpwl_dir='' +lcms1includes='-I/usr/include' +lcms1libs='-llcms ' +lcms2includes='' +lcms2libs='' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +mkdir_p='/bin/mkdir -p' +oldincludedir='/usr/include' +pdfdir='${docdir}' +pngincludes='-I/usr/include/libpng12' +pnglibs='-L/usr/lib/x86_64-linux-gnu -lpng12' +prefix='/usr/local' +program_transform_name='s,x,x,' +psdir='${docdir}' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target='x86_64-unknown-linux-gnu' +target_alias='' +target_cpu='x86_64' +target_os='linux-gnu' +target_vendor='unknown' +tiffincludes='' +tifflibs='-ltiff' +with_doxygen='no' +with_doxygen_FALSE='' +with_doxygen_TRUE='#' +with_libjpwl_FALSE='' +with_libjpwl_TRUE='#' +with_liblcms1_FALSE='#' +with_liblcms1_TRUE='' +with_liblcms2_FALSE='' +with_liblcms2_TRUE='#' +with_libpng_FALSE='#' +with_libpng_TRUE='' +with_libtiff_FALSE='#' +with_libtiff_TRUE='' +with_sharedlibs_FALSE='#' +with_sharedlibs_TRUE='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +/* confdefs.h */ +#define PACKAGE_NAME "OpenJPEG" +#define PACKAGE_TARNAME "openjpeg-1.4.0" +#define PACKAGE_VERSION "1.4.0" +#define PACKAGE_STRING "OpenJPEG 1.4.0" +#define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" +#define PACKAGE_URL "http://www.openjpeg.org/" +#define PACKAGE "openjpeg-1.4.0" +#define VERSION "1.4.0" +#define HAVE_FSEEKO 1 +#define STDC_HEADERS 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_DLFCN_H 1 +#define LT_OBJDIR ".libs/" +#define HAVE_LIBPNG 1 +#define HAVE_LIBPNG 1 +#define HAVE_LIBTIFF 1 +#define HAVE_LIBLCMS 1 +#define HAVE_LIBLCMS1 1 + +configure: exit 0 + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by OpenJPEG config.status 1.4.0, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on a-HP-Pavilion-g6-Notebook-PC + +config.status:1195: creating Makefile +config.status:1195: creating libopenjpeg.pc +config.status:1195: creating libopenjpeg/Makefile +config.status:1195: creating jpwl/Makefile +config.status:1195: creating codec/Makefile +config.status:1195: creating mj2/Makefile +config.status:1195: creating doc/Makefile +config.status:1195: creating jp3d/Makefile +config.status:1195: creating jp3d/libjp3dvm/Makefile +config.status:1195: creating jp3d/codec/Makefile +config.status:1195: creating opj_config.h +config.status:1424: executing depfiles commands +config.status:1424: executing libtool commands diff --git a/contrib/menuetlibc/openjpeg/config.nix b/contrib/menuetlibc/openjpeg/config.nix new file mode 100644 index 0000000000..cca1cf665e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/config.nix @@ -0,0 +1,49 @@ +MAJOR = 1 +MINOR = 4 +BUILD = 0 + +JP3D_MAJOR = 1 +JP3D_MINOR = 3 +JP3D_BUILD = 0 + +prefix=/usr/local +CC = gcc +AR = ar +# +#Set this to no if you do no want to compile/install shared libs. +ENABLE_SHARED = yes +# +#Set to yes if you BOTH have the library AND the header +#Set to no if a file is missing or you hate it. +#Either lcms or lcms2 : not both +#==== HAVE YOU CREATED opj_config.h FROM opj_config.h.in.user ? ==== +#==== SHOULD BE IN SYNC WITH opj_config.h ==== +WITH_LCMS1 = no +WITH_LCMS2 = no +WITH_PNG = no +WITH_TIFF = no +# +# Set to yes if you want compile/install +# jpwl libraries/binaries +# jp3d libraries/binaries +WITH_JPWL = no +WITH_JP3D = no +# +#Set to yes if you have doxygen installed +#Set to no if doxygen is missing. +HAS_DOXYGEN = no + +#Check whether these paths are correct; change them appropiatly. +LCMS1_INCLUDE = -I/usr/include +LCMS2_INCLUDE = -I/usr/include +PNG_INCLUDE = -I/usr/include +TIFF_INCLUDE = -I/usr/include + +LCMS1_LIB = -L/usr/lib -llcms +LCMS2_LIB = -L/usr/lib -llcms2 +PNG_LIB = -L/usr/lib -lpng -lz +#tiff with jpeg/jbig support? +JBIG_LIB = -ljbig +JBIG85_LIB = -ljbig85 +JPEG_LIB = -ljpeg +TIFF_LIB = -L/usr/lib -ltiff $(JPEG_LIB) $(JBIG_LIB) $(JBIG85_LIB) diff --git a/contrib/menuetlibc/openjpeg/config.status b/contrib/menuetlibc/openjpeg/config.status new file mode 100755 index 0000000000..c77c1e6f66 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/config.status @@ -0,0 +1,2348 @@ +#! /bin/bash +# Generated by configure. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=${CONFIG_SHELL-/bin/bash} +export SHELL +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by OpenJPEG $as_me 1.4.0, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +# Files that config.status was made for. +config_files=" Makefile libopenjpeg.pc libopenjpeg/Makefile jpwl/Makefile codec/Makefile mj2/Makefile doc/Makefile jp3d/Makefile jp3d/libjp3dvm/Makefile jp3d/codec/Makefile" +config_headers=" opj_config.h" +config_commands=" depfiles libtool" + +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to . +OpenJPEG home page: ." + +ac_cs_config="" +ac_cs_version="\ +OpenJPEG config.status 1.4.0 +configured by ./configure, generated by GNU Autoconf 2.68, + with options \"$ac_cs_config\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='/home/a/svn/kolios/contrib/menuetlibc/openjpeg' +srcdir='.' +INSTALL='/usr/bin/install -c' +MKDIR_P='/bin/mkdir -p' +AWK='mawk' +test -n "$AWK" || AWK=awk +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + set X '/bin/bash' './configure' $ac_configure_extra_args --no-create --no-recursion + shift + $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 + CONFIG_SHELL='/bin/bash' + export CONFIG_SHELL + exec "$@" +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +# +# INIT-COMMANDS +# +AMDEP_TRUE="" ac_aux_dir="." + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +double_quote_subst='s/\(["`\\]\)/\\\1/g' +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' +enable_shared='yes' +AS='as' +DLLTOOL='dlltool' +OBJDUMP='objdump' +macro_version='2.2.8' +macro_revision='1.3169' +enable_static='yes' +pic_mode='default' +enable_fast_install='yes' +SHELL='/bin/bash' +ECHO='printf %s\n' +host_alias='' +host='x86_64-unknown-linux-gnu' +host_os='linux-gnu' +build_alias='' +build='x86_64-unknown-linux-gnu' +build_os='linux-gnu' +SED='/bin/sed' +Xsed='/bin/sed -e 1s/^X//' +GREP='/bin/grep' +EGREP='/bin/grep -E' +FGREP='/bin/grep -F' +LD='/usr/bin/ld -m elf_x86_64' +NM='/usr/bin/nm -B' +LN_S='ln -s' +max_cmd_len='3458764513820540925' +ac_objext='o' +exeext='' +lt_unset='unset' +lt_SP2NL='tr \040 \012' +lt_NL2SP='tr \015\012 \040\040' +reload_flag=' -r' +reload_cmds='$LD$reload_flag -o $output$reload_objs' +deplibs_check_method='pass_all' +file_magic_cmd='$MAGIC_CMD' +AR='ar' +AR_FLAGS='cru' +STRIP='strip' +RANLIB='ranlib' +old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $oldlib' +old_postuninstall_cmds='' +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $oldlib' +lock_old_archive_extraction='no' +CC='gcc' +CFLAGS='-g -O2' +compiler='g++' +GCC='yes' +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\''' +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' +objdir='.libs' +MAGIC_CMD='file' +lt_prog_compiler_no_builtin_flag=' -fno-builtin' +lt_prog_compiler_wl='-Wl,' +lt_prog_compiler_pic=' -fPIC -DPIC' +lt_prog_compiler_static='-static' +lt_cv_prog_compiler_c_o='yes' +need_locks='no' +DSYMUTIL='' +NMEDIT='' +LIPO='' +OTOOL='' +OTOOL64='' +libext='a' +shrext_cmds='.so' +extract_expsyms_cmds='' +archive_cmds_need_lc='no' +enable_shared_with_static_runtimes='no' +export_dynamic_flag_spec='${wl}--export-dynamic' +whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' +compiler_needs_object='no' +old_archive_from_new_cmds='' +old_archive_from_expsyms_cmds='' +archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' +module_cmds='' +module_expsym_cmds='' +with_gnu_ld='yes' +allow_undefined_flag='' +no_undefined_flag='' +hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' +hardcode_libdir_flag_spec_ld='' +hardcode_libdir_separator='' +hardcode_direct='no' +hardcode_direct_absolute='no' +hardcode_minus_L='no' +hardcode_shlibpath_var='unsupported' +hardcode_automatic='no' +inherit_rpath='no' +link_all_deplibs='unknown' +fix_srcfile_path='' +always_export_symbols='no' +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' +exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' +include_expsyms='' +prelink_cmds='' +file_list_spec='' +variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' +need_lib_prefix='no' +need_version='no' +version_type='linux' +runpath_var='LD_RUN_PATH' +shlibpath_var='LD_LIBRARY_PATH' +shlibpath_overrides_runpath='no' +libname_spec='lib$name' +library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +soname_spec='${libname}${release}${shared_ext}$major' +install_override_mode='' +postinstall_cmds='' +postuninstall_cmds='' +finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' +finish_eval='' +hardcode_into_libs='yes' +sys_lib_search_path_spec='/usr/lib/gcc/x86_64-linux-gnu/4.6 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib ' +sys_lib_dlsearch_path_spec='/lib /usr/lib /usr/lib/i386-linux-gnu/mesa /lib/i386-linux-gnu /usr/lib/i386-linux-gnu /lib/i686-linux-gnu /usr/lib/i686-linux-gnu /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/mesa /lib32 /usr/lib32 ' +hardcode_action='immediate' +enable_dlopen='unknown' +enable_dlopen_self='unknown' +enable_dlopen_self_static='unknown' +old_striplib='strip --strip-debug' +striplib='strip --strip-unneeded' +compiler_lib_search_dirs='' +predep_objects='' +postdep_objects='' +predeps='' +postdeps='' +compiler_lib_search_path='' +LD_CXX='/usr/bin/ld -m elf_x86_64' +reload_flag_CXX=' -r' +reload_cmds_CXX='$LD$reload_flag -o $output$reload_objs' +old_archive_cmds_CXX='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $oldlib' +compiler_CXX='g++' +GCC_CXX='yes' +lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +lt_prog_compiler_wl_CXX='-Wl,' +lt_prog_compiler_pic_CXX=' -fPIC -DPIC' +lt_prog_compiler_static_CXX='-static' +lt_cv_prog_compiler_c_o_CXX='yes' +archive_cmds_need_lc_CXX='no' +enable_shared_with_static_runtimes_CXX='no' +export_dynamic_flag_spec_CXX='${wl}--export-dynamic' +whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' +compiler_needs_object_CXX='no' +old_archive_from_new_cmds_CXX='' +old_archive_from_expsyms_cmds_CXX='' +archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' +archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' +module_cmds_CXX='' +module_expsym_cmds_CXX='' +with_gnu_ld_CXX='yes' +allow_undefined_flag_CXX='' +no_undefined_flag_CXX='' +hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' +hardcode_libdir_flag_spec_ld_CXX='' +hardcode_libdir_separator_CXX='' +hardcode_direct_CXX='no' +hardcode_direct_absolute_CXX='no' +hardcode_minus_L_CXX='no' +hardcode_shlibpath_var_CXX='unsupported' +hardcode_automatic_CXX='no' +inherit_rpath_CXX='no' +link_all_deplibs_CXX='unknown' +fix_srcfile_path_CXX='' +always_export_symbols_CXX='no' +export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' +exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' +include_expsyms_CXX='' +prelink_cmds_CXX='' +file_list_spec_CXX='' +hardcode_action_CXX='immediate' +compiler_lib_search_dirs_CXX='/usr/lib/gcc/x86_64-linux-gnu/4.6 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /usr/lib/gcc/x86_64-linux-gnu/4.6/../../..' +predep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbeginS.o' +postdep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/4.6/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o' +predeps_CXX='' +postdeps_CXX='-lstdc++ -lm -lgcc_s -lc -lgcc_s' +compiler_lib_search_path_CXX='-L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../..' + +LTCC='gcc' +LTCFLAGS='-g -O2' +compiler='gcc' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in AS DLLTOOL OBJDUMP SHELL ECHO SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag deplibs_check_method file_magic_cmd AR AR_FLAGS STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix lt_prog_compiler_no_builtin_flag lt_prog_compiler_wl lt_prog_compiler_pic lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_flag_spec_ld hardcode_libdir_separator fix_srcfile_path exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib compiler_lib_search_dirs predep_objects postdep_objects predeps postdeps compiler_lib_search_path LD_CXX reload_flag_CXX compiler_CXX lt_prog_compiler_no_builtin_flag_CXX lt_prog_compiler_wl_CXX lt_prog_compiler_pic_CXX lt_prog_compiler_static_CXX lt_cv_prog_compiler_c_o_CXX export_dynamic_flag_spec_CXX whole_archive_flag_spec_CXX compiler_needs_object_CXX with_gnu_ld_CXX allow_undefined_flag_CXX no_undefined_flag_CXX hardcode_libdir_flag_spec_CXX hardcode_libdir_flag_spec_ld_CXX hardcode_libdir_separator_CXX fix_srcfile_path_CXX exclude_expsyms_CXX include_expsyms_CXX file_list_spec_CXX compiler_lib_search_dirs_CXX predep_objects_CXX postdep_objects_CXX predeps_CXX postdeps_CXX compiler_lib_search_path_CXX; do + case `eval \\$ECHO \\""\\$$var"\\"` in + *[\\\`\"\$]*) + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\$$var\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec sys_lib_dlsearch_path_spec reload_cmds_CXX old_archive_cmds_CXX old_archive_from_new_cmds_CXX old_archive_from_expsyms_cmds_CXX archive_cmds_CXX archive_expsym_cmds_CXX module_cmds_CXX module_expsym_cmds_CXX export_symbols_cmds_CXX prelink_cmds_CXX; do + case `eval \\$ECHO \\""\\$$var"\\"` in + *[\\\`\"\$]*) + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\$$var\\\"" + ;; + esac +done + +ac_aux_dir='.' +xsi_shell='yes' +lt_shell_append='yes' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='openjpeg-1.4.0' + VERSION='1.4.0' + TIMESTAMP='' + RM='rm -f' + ofile='libtool' + + + + + + + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "opj_config.h") CONFIG_HEADERS="$CONFIG_HEADERS opj_config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "libopenjpeg.pc") CONFIG_FILES="$CONFIG_FILES libopenjpeg.pc" ;; + "libopenjpeg/Makefile") CONFIG_FILES="$CONFIG_FILES libopenjpeg/Makefile" ;; + "jpwl/Makefile") CONFIG_FILES="$CONFIG_FILES jpwl/Makefile" ;; + "codec/Makefile") CONFIG_FILES="$CONFIG_FILES codec/Makefile" ;; + "mj2/Makefile") CONFIG_FILES="$CONFIG_FILES mj2/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "jp3d/Makefile") CONFIG_FILES="$CONFIG_FILES jp3d/Makefile" ;; + "jp3d/libjp3dvm/Makefile") CONFIG_FILES="$CONFIG_FILES jp3d/libjp3dvm/Makefile" ;; + "jp3d/codec/Makefile") CONFIG_FILES="$CONFIG_FILES jp3d/codec/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && +S["am__EXEEXT_FALSE"]="" +S["am__EXEEXT_TRUE"]="#" +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["with_doxygen_FALSE"]="" +S["with_doxygen_TRUE"]="#" +S["with_doxygen"]="no" +S["jp3d_dir"]="" +S["with_sharedlibs_FALSE"]="#" +S["with_sharedlibs_TRUE"]="" +S["jpwl_dir"]="" +S["with_libjpwl_FALSE"]="" +S["with_libjpwl_TRUE"]="#" +S["lcms1libs"]="-llcms " +S["lcms1includes"]="-I/usr/include" +S["with_liblcms1_FALSE"]="#" +S["with_liblcms1_TRUE"]="" +S["lcms2libs"]="" +S["lcms2includes"]="" +S["with_liblcms2_FALSE"]="" +S["with_liblcms2_TRUE"]="#" +S["tifflibs"]="-ltiff" +S["tiffincludes"]="" +S["with_libtiff_FALSE"]="#" +S["with_libtiff_TRUE"]="" +S["pnglibs"]="-L/usr/lib/x86_64-linux-gnu -lpng12" +S["pngincludes"]="-I/usr/include/libpng12" +S["with_libpng_FALSE"]="#" +S["with_libpng_TRUE"]="" +S["LIBPNG_CONFIG"]="/usr/bin/libpng-config" +S["PKGCONFIG"]="/usr/bin/pkg-config" +S["CXXCPP"]="g++ -E" +S["CPP"]="gcc -E" +S["OTOOL64"]="" +S["OTOOL"]="" +S["LIPO"]="" +S["NMEDIT"]="" +S["DSYMUTIL"]="" +S["RANLIB"]="ranlib" +S["AR"]="ar" +S["NM"]="/usr/bin/nm -B" +S["ac_ct_DUMPBIN"]="" +S["DUMPBIN"]="" +S["LD"]="/usr/bin/ld -m elf_x86_64" +S["FGREP"]="/bin/grep -F" +S["EGREP"]="/bin/grep -E" +S["GREP"]="/bin/grep" +S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" +S["OBJDUMP"]="objdump" +S["DLLTOOL"]="dlltool" +S["AS"]="as" +S["SED"]="/bin/sed" +S["LN_S"]="ln -s" +S["am__fastdepCXX_FALSE"]="#" +S["am__fastdepCXX_TRUE"]="" +S["CXXDEPMODE"]="depmode=gcc3" +S["ac_ct_CXX"]="g++" +S["CXXFLAGS"]="-g -O2" +S["CXX"]="g++" +S["am__fastdepCC_FALSE"]="#" +S["am__fastdepCC_TRUE"]="" +S["CCDEPMODE"]="depmode=gcc3" +S["AMDEPBACKSLASH"]="\\" +S["AMDEP_FALSE"]="#" +S["AMDEP_TRUE"]="" +S["am__quote"]="" +S["am__include"]="include" +S["DEPDIR"]=".deps" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CFLAGS"]="-g -O2" +S["CC"]="gcc" +S["JP3D_BUILD_NR"]="0" +S["JP3D_MINOR_NR"]="3" +S["JP3D_MAJOR_NR"]="1" +S["BUILD_NR"]="0" +S["MINOR_NR"]="4" +S["MAJOR_NR"]="1" +S["am__untar"]="${AMTAR} xf -" +S["am__tar"]="${AMTAR} chof - \"$$tardir\"" +S["AMTAR"]="${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar" +S["am__leading_dot"]="." +S["SET_MAKE"]="" +S["AWK"]="mawk" +S["mkdir_p"]="/bin/mkdir -p" +S["MKDIR_P"]="/bin/mkdir -p" +S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" +S["STRIP"]="strip" +S["install_sh"]="${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh" +S["MAKEINFO"]="${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo" +S["AUTOHEADER"]="${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader" +S["AUTOMAKE"]="${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11" +S["AUTOCONF"]="${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf" +S["ACLOCAL"]="${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11" +S["VERSION"]="1.4.0" +S["PACKAGE"]="openjpeg-1.4.0" +S["CYGPATH_W"]="echo" +S["am__isrc"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["target_os"]="linux-gnu" +S["target_vendor"]="unknown" +S["target_cpu"]="x86_64" +S["target"]="x86_64-unknown-linux-gnu" +S["host_os"]="linux-gnu" +S["host_vendor"]="unknown" +S["host_cpu"]="x86_64" +S["host"]="x86_64-unknown-linux-gnu" +S["build_os"]="linux-gnu" +S["build_vendor"]="unknown" +S["build_cpu"]="x86_64" +S["build"]="x86_64-unknown-linux-gnu" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]=" -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms " +S["ECHO_T"]="" +S["ECHO_N"]="-n" +S["ECHO_C"]="" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="http://www.openjpeg.org/" +S["PACKAGE_BUGREPORT"]="http://code.google.com/p/openjpeg/" +S["PACKAGE_STRING"]="OpenJPEG 1.4.0" +S["PACKAGE_VERSION"]="1.4.0" +S["PACKAGE_TARNAME"]="openjpeg-1.4.0" +S["PACKAGE_NAME"]="OpenJPEG" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/bash" +_ACAWK +cat >>"$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +D["PACKAGE_NAME"]=" \"OpenJPEG\"" +D["PACKAGE_TARNAME"]=" \"openjpeg-1.4.0\"" +D["PACKAGE_VERSION"]=" \"1.4.0\"" +D["PACKAGE_STRING"]=" \"OpenJPEG 1.4.0\"" +D["PACKAGE_BUGREPORT"]=" \"http://code.google.com/p/openjpeg/\"" +D["PACKAGE_URL"]=" \"http://www.openjpeg.org/\"" +D["PACKAGE"]=" \"openjpeg-1.4.0\"" +D["VERSION"]=" \"1.4.0\"" +D["HAVE_FSEEKO"]=" 1" +D["STDC_HEADERS"]=" 1" +D["HAVE_SYS_TYPES_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_MEMORY_H"]=" 1" +D["HAVE_STRINGS_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["HAVE_DLFCN_H"]=" 1" +D["LT_OBJDIR"]=" \".libs/\"" +D["HAVE_LIBPNG"]=" 1" +D["HAVE_LIBPNG"]=" 1" +D["HAVE_LIBTIFF"]=" 1" +D["HAVE_LIBLCMS"]=" 1" +D["HAVE_LIBLCMS1"]=" 1" + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { + line = $ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +} + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 diff --git a/contrib/menuetlibc/openjpeg/config.sub b/contrib/menuetlibc/openjpeg/config.sub new file mode 100755 index 0000000000..2a55a50751 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/config.sub @@ -0,0 +1,1705 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-11-20' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/contrib/menuetlibc/openjpeg/configure b/contrib/menuetlibc/openjpeg/configure new file mode 100755 index 0000000000..9e0a5cfa40 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/configure @@ -0,0 +1,18880 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for OpenJPEG 1.4.0. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: http://code.google.com/p/openjpeg/ about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='OpenJPEG' +PACKAGE_TARNAME='openjpeg-1.4.0' +PACKAGE_VERSION='1.4.0' +PACKAGE_STRING='OpenJPEG 1.4.0' +PACKAGE_BUGREPORT='http://code.google.com/p/openjpeg/' +PACKAGE_URL='http://www.openjpeg.org/' + +ac_unique_file="libopenjpeg/openjpeg.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +with_doxygen_FALSE +with_doxygen_TRUE +with_doxygen +jp3d_dir +with_sharedlibs_FALSE +with_sharedlibs_TRUE +jpwl_dir +with_libjpwl_FALSE +with_libjpwl_TRUE +lcms1libs +lcms1includes +with_liblcms1_FALSE +with_liblcms1_TRUE +lcms2libs +lcms2includes +with_liblcms2_FALSE +with_liblcms2_TRUE +tifflibs +tiffincludes +with_libtiff_FALSE +with_libtiff_TRUE +pnglibs +pngincludes +with_libpng_FALSE +with_libpng_TRUE +LIBPNG_CONFIG +PKGCONFIG +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +RANLIB +AR +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +LIBTOOL +OBJDUMP +DLLTOOL +AS +SED +LN_S +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +JP3D_BUILD_NR +JP3D_MINOR_NR +JP3D_MAJOR_NR +BUILD_NR +MINOR_NR +MAJOR_NR +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_largefile +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_png +with_png_includes +with_png_libraries +enable_tiff +with_tiff_includes +with_tiff_libraries +enable_lcms2 +with_lcms2_includes +with_lcms2_libraries +enable_lcms1 +with_lcms1_includes +with_lcms1_libraries +enable_jpwl +enable_jp3d +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +CPP +CXXCPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures OpenJPEG 1.4.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/openjpeg-1.4.0] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of OpenJPEG 1.4.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --disable-largefile omit support for large files + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-png=[yes|no] Build with PNG support [default=yes] + --enable-tiff=[yes|no] Build with TIFF support [default=yes] + --enable-lcms2=[yes|no] Build with LCMS-2 support [default=yes] + --enable-lcms1=[yes|no] Build with LCMS-1 support [default=yes] + --enable-jpwl=[yes|no] Build with JPWL support [default=no] + --enable-shared=[yes|no] Build shared libs [default=yes] + --enable-jp3d=[yes|no] Build jp3d libs [default=no] + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-png-includes=DIR PNG includes in nonstandard DIR + --with-png-libraries=DIR PNG library in nonstandard DIR + --with-tiff-includes=DIR TIFF includes in nonstandard DIR + --with-tiff-libraries=DIR TIFF library in nonstandard DIR + --with-lcms2-includes=DIR LCMS-2 includes in nonstandard DIR + --with-lcms2-libraries=DIR LCMS-2 library in nonstandard DIR + --with-lcms1-includes=DIR LCMS-1 includes in nonstandard DIR + --with-lcms1-libraries=DIR LCMS-1 library in nonstandard DIR + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +OpenJPEG home page: . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +OpenJPEG configure 1.4.0 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ------------------------------------------------- ## +## Report this to http://code.google.com/p/openjpeg/ ## +## ------------------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by OpenJPEG $as_me 1.4.0, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_config_headers="$ac_config_headers opj_config.h" + +# +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +#foreign:package will not follow the GNU Standards +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='openjpeg-1.4.0' + VERSION='1.4.0' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +# +MAJOR_NR=1 +MINOR_NR=4 +BUILD_NR=0 + + + +# +JP3D_MAJOR_NR=1 +JP3D_MINOR_NR=3 +JP3D_BUILD_NR=0 + + + +# +# Checks for programs. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 +$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } +if ${ac_cv_sys_largefile_source+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include /* for off_t */ + #include +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_sys_largefile_source=no; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGEFILE_SOURCE 1 +#include /* for off_t */ + #include +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_sys_largefile_source=1; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_cv_sys_largefile_source=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 +$as_echo "$ac_cv_sys_largefile_source" >&6; } +case $ac_cv_sys_largefile_source in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source +_ACEOF +;; +esac +rm -rf conftest* + +# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug +# in glibc 2.1.3, but that breaks too many other things. +# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. +if test $ac_cv_sys_largefile_source != unknown; then + +$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +#AC_HEADER_DIRENT +# +# Tests for Windows +# + + +# +# Configure libtool +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.8' +macro_revision='1.3169' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`print -r -- -n 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + + +# Set options + + + + enable_dlopen=no + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + lt_prog_compiler_pic='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +void fnord () __attribute__((visibility("default"))); +#endif + +void fnord () { int i=42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +void fnord () __attribute__((visibility("default"))); +#endif + +void fnord () { int i=42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_prog_compiler_pic_CXX" >&6; } + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +# + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + +# +LIB_MATH="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 +$as_echo_n "checking for sqrt in -lm... " >&6; } +if ${ac_cv_lib_m_sqrt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sqrt (); +int +main () +{ +return sqrt (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_sqrt=yes +else + ac_cv_lib_m_sqrt=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 +$as_echo "$ac_cv_lib_m_sqrt" >&6; } +if test "x$ac_cv_lib_m_sqrt" = xyes; then : + LIB_MATH="-lm" +fi + +LIB_Z="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5 +$as_echo_n "checking for inflate in -lz... " >&6; } +if ${ac_cv_lib_z_inflate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inflate (); +int +main () +{ +return inflate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_inflate=yes +else + ac_cv_lib_z_inflate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5 +$as_echo "$ac_cv_lib_z_inflate" >&6; } +if test "x$ac_cv_lib_z_inflate" = xyes; then : + LIB_Z="-lz" +fi + +# +LIBS="$LIBS $LIB_MATH $LIB_Z" +# +# Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKGCONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKGCONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKGCONFIG=$ac_cv_path_PKGCONFIG +if test -n "$PKGCONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5 +$as_echo "$PKGCONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# +# ------------------------------ +# Test for PNG +# ------------------------------ +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with PNG support" >&5 +$as_echo_n "checking whether to build with PNG support... " >&6; } +pngincludes="" +pnglibs="" +png_header_found="no" +with_libpng="yes" +# +# Check whether --enable-png was given. +if test "${enable_png+set}" = set; then : + enableval=$enable_png; test "$enable_png" = "no" && with_libpng="no" +fi + +# +if test "x$with_libpng" = xyes ; then + with_libpng="no" + # Extract the first word of "libpng-config", so it can be a program name with args. +set dummy libpng-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LIBPNG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LIBPNG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_LIBPNG_CONFIG="$LIBPNG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LIBPNG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LIBPNG_CONFIG=$ac_cv_path_LIBPNG_CONFIG +if test -n "$LIBPNG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBPNG_CONFIG" >&5 +$as_echo "$LIBPNG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# + pngheader="" + +# Check whether --with-png_includes was given. +if test "${with_png_includes+set}" = set; then : + withval=$with_png_includes; +fi + + if test -n "$with_png_includes" ; then + pngheader="$with_png_includes" + pngincludes="-I$with_png_includes" + else + if test -n "$PKGCONFIG" ; then + pngincludes="`$PKGCONFIG --variable=includedir libpng`" + if test -n "$pngincludes" ; then + pngheader="$pngincludes" + pngincludes="-I$pngincludes" + fi + else + if test -n "$LIBPNG_CONFIG" ; then + pngincludes="`$LIBPNG_CONFIG --I_opts`" + pngheader="`$LIBPNG_CONFIG --I_opts | $SED 's/-I//'`" + fi + fi + fi + if test -n "$pngheader" ; then + pngheader="$pngheader/png.h" + else + pngheader="png.h" + fi +# + as_ac_Header=`$as_echo "ac_cv_header_$pngheader" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$pngheader" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + png_header_found="yes" +fi + + +# + +# Check whether --with-png_libraries was given. +if test "${with_png_libraries+set}" = set; then : + withval=$with_png_libraries; +fi + + if [ -n "$with_png_libraries" ] ; then + pnglibs="-L$with_png_libraries -lpng" + else + if test -n "$LIBPNG_CONFIG" ; then + pnglibs="`$LIBPNG_CONFIG --ldflags`" + else + if test -n "$PKGCONFIG" ; then + pnglibs="`$PKGCONFIG --libs libpng`" + fi + fi + fi + savedLIBS="$LIBS" + LIBS="$pnglibs $LIB_Z $LIB_MATH" +# + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_create_read_struct in -lpng" >&5 +$as_echo_n "checking for png_create_read_struct in -lpng... " >&6; } +if ${ac_cv_lib_png_png_create_read_struct+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpng $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char png_create_read_struct (); +int +main () +{ +return png_create_read_struct (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_png_png_create_read_struct=yes +else + ac_cv_lib_png_png_create_read_struct=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_create_read_struct" >&5 +$as_echo "$ac_cv_lib_png_png_create_read_struct" >&6; } +if test "x$ac_cv_lib_png_png_create_read_struct" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPNG 1 +_ACEOF + + LIBS="-lpng $LIBS" + +else + pnglibs="" +fi + +# + LIBS="$savedLIBS" + if test -n "$pnglibs" ; then + if test -n "$pngincludes" ; then + with_libpng="yes" + png_header_found="yes" + LIBS="$LIBS $pnglibs" + +$as_echo "#define HAVE_LIBPNG 1" >>confdefs.h + + fi + fi +fi +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: png is usable:$with_libpng" >&5 +$as_echo "png is usable:$with_libpng" >&6; } + if test x$with_libpng = xyes; then + with_libpng_TRUE= + with_libpng_FALSE='#' +else + with_libpng_TRUE='#' + with_libpng_FALSE= +fi + + + +# ------------------------------- +# Test for TIFF +# ------------------------------- +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with TIFF support" >&5 +$as_echo_n "checking whether to build with TIFF support... " >&6; } +tifflibs="" +tiffincludes="" +with_libtiff="yes" +tiff_header_found="no" +# +# Check whether --enable-tiff was given. +if test "${enable_tiff+set}" = set; then : + enableval=$enable_tiff; test "$enable_tiff" = "no" && with_libtiff="no" +fi + +# +if test "x$with_libtiff" = xyes ; then +#TIFF compiled with JPEG and JBIG support? + libjpeg="" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_read_header in -ljpeg" >&5 +$as_echo_n "checking for jpeg_read_header in -ljpeg... " >&6; } +if ${ac_cv_lib_jpeg_jpeg_read_header+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljpeg $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char jpeg_read_header (); +int +main () +{ +return jpeg_read_header (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_jpeg_jpeg_read_header=yes +else + ac_cv_lib_jpeg_jpeg_read_header=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_read_header" >&5 +$as_echo "$ac_cv_lib_jpeg_jpeg_read_header" >&6; } +if test "x$ac_cv_lib_jpeg_jpeg_read_header" = xyes; then : + libjpeg=-ljpeg +fi + + libjbig="" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jbg_enc_init in -ljbig" >&5 +$as_echo_n "checking for jbg_enc_init in -ljbig... " >&6; } +if ${ac_cv_lib_jbig_jbg_enc_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljbig $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char jbg_enc_init (); +int +main () +{ +return jbg_enc_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_jbig_jbg_enc_init=yes +else + ac_cv_lib_jbig_jbg_enc_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jbig_jbg_enc_init" >&5 +$as_echo "$ac_cv_lib_jbig_jbg_enc_init" >&6; } +if test "x$ac_cv_lib_jbig_jbg_enc_init" = xyes; then : + libjbig=-ljbig +fi + + libjbig85="" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jbg85_enc_init in -ljbig85" >&5 +$as_echo_n "checking for jbg85_enc_init in -ljbig85... " >&6; } +if ${ac_cv_lib_jbig85_jbg85_enc_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljbig85 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char jbg85_enc_init (); +int +main () +{ +return jbg85_enc_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_jbig85_jbg85_enc_init=yes +else + ac_cv_lib_jbig85_jbg85_enc_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jbig85_jbg85_enc_init" >&5 +$as_echo "$ac_cv_lib_jbig85_jbg85_enc_init" >&6; } +if test "x$ac_cv_lib_jbig85_jbg85_enc_init" = xyes; then : + libjbig85=-ljbig85 +fi + +#standard path + with_libtiff="no" + savedLIBS="$LIBS" + LIBS="-ltiff $libjpeg $libjbig $libjbig85 $LIB_Z $LIB_MATH" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFOpen in -ltiff" >&5 +$as_echo_n "checking for TIFFOpen in -ltiff... " >&6; } +if ${ac_cv_lib_tiff_TIFFOpen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltiff $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char TIFFOpen (); +int +main () +{ +return TIFFOpen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tiff_TIFFOpen=yes +else + ac_cv_lib_tiff_TIFFOpen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFOpen" >&5 +$as_echo "$ac_cv_lib_tiff_TIFFOpen" >&6; } +if test "x$ac_cv_lib_tiff_TIFFOpen" = xyes; then : + tifflibs=-ltiff +fi + + LIBS="$savedLIBS" + if test -n "$tifflibs" ; then + ac_fn_c_check_header_mongrel "$LINENO" "tiff.h" "ac_cv_header_tiff_h" "$ac_includes_default" +if test "x$ac_cv_header_tiff_h" = xyes; then : + tiff_header_found="yes" +fi + + + if test "$tiff_header_found" = "yes" ; then + with_libtiff="yes" + LIBS="$LIBS -ltiff $libjpeg $libjbig $libjbig85" + +$as_echo "#define HAVE_LIBTIFF 1" >>confdefs.h + + fi + fi +# + if test "x$with_libtiff" = xno ; then +#non-standard path + +# Check whether --with-tiff_includes was given. +if test "${with_tiff_includes+set}" = set; then : + withval=$with_tiff_includes; +fi + + if test -n "$with_tiff_includes" ; then + tiffheader="$with_tiff_includes/tiff.h" + as_ac_Header=`$as_echo "ac_cv_header_$tiffheader" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$tiffheader" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + tiff_header_found="yes" +fi + + + if test "$tiff_header_found" = "yes" ; then + tiffincludes="-I$with_tiff_includes" + fi + fi + +# Check whether --with-tiff_libraries was given. +if test "${with_tiff_libraries+set}" = set; then : + withval=$with_tiff_libraries; +fi + + if test -n "$with_tiff_libraries" ; then + tifflibs="-L$with_tiff_libraries" + fi + tifflibs="$tifflibs -ltiff" + savedLIBS="$LIBS" + LIBS="$tifflibs $libjpeg $libjbig $libjbig85 $LIB_Z $LIB_MATH" + with_libtiff="no" +# + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFOpen in -ltiff" >&5 +$as_echo_n "checking for TIFFOpen in -ltiff... " >&6; } +if ${ac_cv_lib_tiff_TIFFOpen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltiff $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char TIFFOpen (); +int +main () +{ +return TIFFOpen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tiff_TIFFOpen=yes +else + ac_cv_lib_tiff_TIFFOpen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFOpen" >&5 +$as_echo "$ac_cv_lib_tiff_TIFFOpen" >&6; } +if test "x$ac_cv_lib_tiff_TIFFOpen" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBTIFF 1 +_ACEOF + + LIBS="-ltiff $LIBS" + +else + tifflibs="" +fi + +# + if test -n "$tifflibs" ; then + if test "$tiff_header_found" = "yes" ; then + with_libtiff="yes" + +$as_echo "#define HAVE_LIBTIFF 1" >>confdefs.h + + fi + fi + LIBS="$savedLIBS $tifflibs $libjpeg $libjbig $libjbig85" + fi +fi +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: tiff is usable:$with_libtiff" >&5 +$as_echo "tiff is usable:$with_libtiff" >&6; } + if test x$with_libtiff = xyes; then + with_libtiff_TRUE= + with_libtiff_FALSE='#' +else + with_libtiff_TRUE='#' + with_libtiff_FALSE= +fi + + + +# ------------------------------- +# Test for LCMS version 2.x +# ------------------------------- +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with LCMS support" >&5 +$as_echo_n "checking whether to build with LCMS support... " >&6; } +lcms1includes="" +lcms1libs="" +lcms2includes="" +lcms2libs="" +with_liblcms1="no" +lcms1_header_found="no" +lcms2_header_found="no" +have_lcms1_version="" +have_lcms2_version="" +with_liblcms2="yes" +# +# Check whether --enable-lcms2 was given. +if test "${enable_lcms2+set}" = set; then : + enableval=$enable_lcms2; test "$enable_lcms2" = "no" && with_liblcms2="no" +fi + +# +if test "x$with_liblcms2" = xyes ; then + with_liblcms2="no" + lcms2header="" + +# Check whether --with-lcms2_includes was given. +if test "${with_lcms2_includes+set}" = set; then : + withval=$with_lcms2_includes; +fi + + if test -n "$with_lcms2_includes" ; then + lcms2header="$with_lcms2_includes" + lcms2includes="-I$with_lcms2_includes" + else + if test -n "$PKGCONFIG" ; then + lcms2includes="`$PKGCONFIG --variable=prefix lcms2`" + fi + if test -n "$lcms2includes" ; then + lcms2header="$lcms2_includes" + lcms2includes="-I$lcms2includes/include" + fi + fi + if test -n "$lcms2header" ; then + lcms2header="$lcms2header/lcms2.h" + else + lcms2header="lcms2.h" + fi + as_ac_Header=`$as_echo "ac_cv_header_$lcms2header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$lcms2header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + lcms2_header_found="yes" +fi + + +# + +# Check whether --with-lcms2_libraries was given. +if test "${with_lcms2_libraries+set}" = set; then : + withval=$with_lcms2_libraries; +fi + + if test -n "$with_lcms2_libraries" ; then + lcms2libs="-L$with_lcms2_libraries -llcms2" + else + if test -n "$PKGCONFIG" ; then + lcms2libs="`$PKGCONFIG --libs lcms2`" + fi + if test -z "$lcms2libs" ; then + lcms2libs="-llcms2" + fi + lcms2libs="$lcms2libs" + fi + savedLIBS="$LIBS" + LIBS="$lcms2libs $LIB_MATH" + with_liblcms2="no" +# + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmsOpenProfileFromFile in -llcms2" >&5 +$as_echo_n "checking for cmsOpenProfileFromFile in -llcms2... " >&6; } +if ${ac_cv_lib_lcms2_cmsOpenProfileFromFile+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llcms2 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cmsOpenProfileFromFile (); +int +main () +{ +return cmsOpenProfileFromFile (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_lcms2_cmsOpenProfileFromFile=yes +else + ac_cv_lib_lcms2_cmsOpenProfileFromFile=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lcms2_cmsOpenProfileFromFile" >&5 +$as_echo "$ac_cv_lib_lcms2_cmsOpenProfileFromFile" >&6; } +if test "x$ac_cv_lib_lcms2_cmsOpenProfileFromFile" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBLCMS2 1 +_ACEOF + + LIBS="-llcms2 $LIBS" + +else + lcms2libs="" +fi + +# + if test -n "$lcms2libs" ; then + if test "$lcms2_header_found" = "yes" ; then + with_liblcms2="yes" + +$as_echo "#define HAVE_LIBLCMS2 1" >>confdefs.h + + if test -n "$PKGCONFIG" ; then + have_lcms2_version="`$PKGCONFIG --modversion lcms2`" + fi + fi + fi + if test "$with_liblcms2" = "no" ; then + lcms2libs="" + lcms2includes="" + lcms2libs="" + fi + LIBS="$savedLIBS $lcms2libs" +fi +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: lcms2 is usable:$with_liblcms2" >&5 +$as_echo "lcms2 is usable:$with_liblcms2" >&6; } + if test x$with_liblcms2 = xyes; then + with_liblcms2_TRUE= + with_liblcms2_FALSE='#' +else + with_liblcms2_TRUE='#' + with_liblcms2_FALSE= +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: lcms2libs:$lcms2libs" >&5 +$as_echo "lcms2libs:$lcms2libs" >&6; } +# ---------------------------- +# Test for LCMS version 1.x +# ---------------------------- +if [ -z "$lcms2libs" ] ; then + with_liblcms1="yes" + # Check whether --enable-lcms1 was given. +if test "${enable_lcms1+set}" = set; then : + enableval=$enable_lcms1; test "$enable_lcms1" = "no" && with_liblcms1="no" +fi + +# + if test "x$with_liblcms1" = xyes ; then + with_liblcms1="no" + lcms1header="" + +# Check whether --with-lcms1_includes was given. +if test "${with_lcms1_includes+set}" = set; then : + withval=$with_lcms1_includes; +fi + + if test -n "$with_lcms1_includes" ; then + lcms1header="$with_lcms1_includes" + lcms1includes="-I$with_lcms1_includes" + else + if test -n "$PKGCONFIG" ; then + lcms1includes="`$PKGCONFIG --variable=includedir lcms`" + fi + if test -n "$lcms1includes" ; then + lcms1header="$lcms1includes" + lcms1includes="-I$lcms1includes" + fi + fi + if test -n "$lcms1header" ; then + lcms1header="$lcms1header/lcms.h" + else + lcms1header="lcms.h" + fi + as_ac_Header=`$as_echo "ac_cv_header_$lcms1header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$lcms1header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + lcms1_header_found="yes" +fi + + +# + +# Check whether --with-lcms1_libraries was given. +if test "${with_lcms1_libraries+set}" = set; then : + withval=$with_lcms1_libraries; +fi + + if test -n "$with_lcms1_libraries" ; then + lcms1libs="-L$with_lcms1_libraries -llcms" + else + if test -n "$PKGCONFIG" ; then + lcms1libs="`$PKGCONFIG --libs lcms`" + fi + if test -z "$lcms1libs" ; then + lcms1libs="-llcms" + fi + lcms1libs="$lcms1libs" + fi + savedLIBS="$LIBS" + LIBS="$lcms1libs $LIB_MATH" + with_liblcms1="no" +# + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmsOpenProfileFromFile in -llcms" >&5 +$as_echo_n "checking for cmsOpenProfileFromFile in -llcms... " >&6; } +if ${ac_cv_lib_lcms_cmsOpenProfileFromFile+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llcms $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cmsOpenProfileFromFile (); +int +main () +{ +return cmsOpenProfileFromFile (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_lcms_cmsOpenProfileFromFile=yes +else + ac_cv_lib_lcms_cmsOpenProfileFromFile=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lcms_cmsOpenProfileFromFile" >&5 +$as_echo "$ac_cv_lib_lcms_cmsOpenProfileFromFile" >&6; } +if test "x$ac_cv_lib_lcms_cmsOpenProfileFromFile" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBLCMS 1 +_ACEOF + + LIBS="-llcms $LIBS" + +else + lcms1libs="" +fi + +# + if test -n "$lcms1libs" ; then + if test "$lcms1_header_found" = "yes" ; then + with_liblcms1="yes" + +$as_echo "#define HAVE_LIBLCMS1 1" >>confdefs.h + + if test -n "$PKGCONFIG" ; then + have_lcms1_version="`$PKGCONFIG --modversion lcms`" + fi + fi + fi + if test "$with_liblcms1" = "no" ; then + lcms1libs="" + lcms1includes="" + lcms1libs="" + fi + LIBS="$savedLIBS $lcms1libs" + fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: lcms is usable:$with_liblcms1" >&5 +$as_echo "lcms is usable:$with_liblcms1" >&6; } +fi +# + if test x$with_liblcms1 = xyes; then + with_liblcms1_TRUE= + with_liblcms1_FALSE='#' +else + with_liblcms1_TRUE='#' + with_liblcms1_FALSE= +fi + + + +# +# ------------------------------- +# Test for USE_JPWL +# ------------------------------- +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with JPWL support" >&5 +$as_echo_n "checking whether to build with JPWL support... " >&6; } +with_libjpwl="no" +jpwl_dir="" +# Check whether --enable-jpwl was given. +if test "${enable_jpwl+set}" = set; then : + enableval=$enable_jpwl; test "$enable_jpwl" = "yes" && with_libjpwl="yes" +fi + +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_libjpwl" >&5 +$as_echo "$with_libjpwl" >&6; } + if test x$with_libjpwl = xyes; then + with_libjpwl_TRUE= + with_libjpwl_FALSE='#' +else + with_libjpwl_TRUE='#' + with_libjpwl_FALSE= +fi + +if test "$with_libjpwl" = "yes" ; then + jpwl_dir="jpwl" +fi + +# +# ------------------------------- +# Test for creating SHARED LIBS +# wanted result: shared xor static +# ------------------------------- +with_sharedlibs="yes" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; test "$enable_shared" = "no" && with_sharedlibs="no" +fi + +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sharedlibs" >&5 +$as_echo "$with_sharedlibs" >&6; } + if test x$with_sharedlibs = xyes; then + with_sharedlibs_TRUE= + with_sharedlibs_FALSE='#' +else + with_sharedlibs_TRUE='#' + with_sharedlibs_FALSE= +fi + +# +# ------------------------------- +# Test for creating JP3D +# ------------------------------- +with_jp3d="no" +jp3d_dir="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build the JP3D library" >&5 +$as_echo_n "checking whether to build the JP3D library... " >&6; } +# Check whether --enable-jp3d was given. +if test "${enable_jp3d+set}" = set; then : + enableval=$enable_jp3d; test "$enable_jp3d" = "yes" && with_jp3d="yes" +fi + +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jp3d" >&5 +$as_echo "$with_jp3d" >&6; } +if test "$with_jp3d" = "yes" ; then + jp3d_dir="jp3d" +fi + +# +# Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_with_doxygen+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$with_doxygen"; then + ac_cv_prog_with_doxygen="$with_doxygen" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_with_doxygen="yes" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_with_doxygen" && ac_cv_prog_with_doxygen="no" +fi +fi +with_doxygen=$ac_cv_prog_with_doxygen +if test -n "$with_doxygen"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_doxygen" >&5 +$as_echo "$with_doxygen" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test x$with_doxygen = xyes; then + with_doxygen_TRUE= + with_doxygen_FALSE='#' +else + with_doxygen_TRUE='#' + with_doxygen_FALSE= +fi + +# +ac_config_files="$ac_config_files Makefile" + +ac_config_files="$ac_config_files libopenjpeg.pc" + +ac_config_files="$ac_config_files libopenjpeg/Makefile" + +ac_config_files="$ac_config_files jpwl/Makefile" + +ac_config_files="$ac_config_files codec/Makefile" + +ac_config_files="$ac_config_files mj2/Makefile" + +ac_config_files="$ac_config_files doc/Makefile" + +ac_config_files="$ac_config_files jp3d/Makefile" + +ac_config_files="$ac_config_files jp3d/libjp3dvm/Makefile" + +ac_config_files="$ac_config_files jp3d/codec/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +if test -z "${with_libpng_TRUE}" && test -z "${with_libpng_FALSE}"; then + as_fn_error $? "conditional \"with_libpng\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${with_libtiff_TRUE}" && test -z "${with_libtiff_FALSE}"; then + as_fn_error $? "conditional \"with_libtiff\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${with_liblcms2_TRUE}" && test -z "${with_liblcms2_FALSE}"; then + as_fn_error $? "conditional \"with_liblcms2\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${with_liblcms1_TRUE}" && test -z "${with_liblcms1_FALSE}"; then + as_fn_error $? "conditional \"with_liblcms1\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${with_libjpwl_TRUE}" && test -z "${with_libjpwl_FALSE}"; then + as_fn_error $? "conditional \"with_libjpwl\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${with_sharedlibs_TRUE}" && test -z "${with_sharedlibs_FALSE}"; then + as_fn_error $? "conditional \"with_sharedlibs\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${with_doxygen_TRUE}" && test -z "${with_doxygen_FALSE}"; then + as_fn_error $? "conditional \"with_doxygen\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by OpenJPEG $as_me 1.4.0, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to . +OpenJPEG home page: ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +OpenJPEG config.status 1.4.0 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +fix_srcfile_path_CXX='`$ECHO "$fix_srcfile_path_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in AS \ +DLLTOOL \ +OBJDUMP \ +SHELL \ +ECHO \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_flag_spec_ld_CXX \ +hardcode_libdir_separator_CXX \ +fix_srcfile_path_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "opj_config.h") CONFIG_HEADERS="$CONFIG_HEADERS opj_config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "libopenjpeg.pc") CONFIG_FILES="$CONFIG_FILES libopenjpeg.pc" ;; + "libopenjpeg/Makefile") CONFIG_FILES="$CONFIG_FILES libopenjpeg/Makefile" ;; + "jpwl/Makefile") CONFIG_FILES="$CONFIG_FILES jpwl/Makefile" ;; + "codec/Makefile") CONFIG_FILES="$CONFIG_FILES codec/Makefile" ;; + "mj2/Makefile") CONFIG_FILES="$CONFIG_FILES mj2/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "jp3d/Makefile") CONFIG_FILES="$CONFIG_FILES jp3d/Makefile" ;; + "jp3d/libjp3dvm/Makefile") CONFIG_FILES="$CONFIG_FILES jp3d/libjp3dvm/Makefile" ;; + "jp3d/codec/Makefile") CONFIG_FILES="$CONFIG_FILES jp3d/codec/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + +# +echo "----------------------------------------------" +echo " your configuration" +echo "" +echo "--with-png-libraries: $with_libpng" +echo "libpng header : $png_header_found" +echo "--enable-tiff : $with_libtiff" +echo "libtiff header : $tiff_header_found" +echo "--enable-lcms2 : $with_liblcms2" +echo "lcms2 header : $lcms2_header_found" +echo "lcms2 version : $have_lcms2_version" +echo "--enable-lcms1 : $with_liblcms1" +echo "lcms1 header : $lcms1_header_found" +echo "lcms1 version : $have_lcms1_version" +echo "--enable-jpwl : $with_libjpwl" +echo "--enable-jp3d : $with_jp3d" +echo "--enable-shared : $with_sharedlibs" +echo "----------------------------------------------" diff --git a/contrib/menuetlibc/openjpeg/configure.ac b/contrib/menuetlibc/openjpeg/configure.ac new file mode 100644 index 0000000000..777ac5319e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/configure.ac @@ -0,0 +1,458 @@ +#AC_PREREQ([2.65]) +define([OPJ_MAJOR], [1]) +define([OPJ_MINOR], [4]) +define([OPJ_BUILD], [0]) +# +define([JP3D_MAJOR], [1]) +define([JP3D_MINOR], [3]) +define([JP3D_BUILD], [0]) +# +# +#AC_INIT (PACKAGE, VERSION, [BUG-REPORT], [TARNAME], [URL]) +AC_INIT(OpenJPEG, +OPJ_MAJOR.OPJ_MINOR.OPJ_BUILD, +http://code.google.com/p/openjpeg/, +openjpeg-OPJ_MAJOR.OPJ_MINOR.OPJ_BUILD, +http://www.openjpeg.org/) +AC_CONFIG_SRCDIR([libopenjpeg/openjpeg.c]) +AC_CONFIG_HEADERS(opj_config.h) +# +AC_CANONICAL_SYSTEM +#foreign:package will not follow the GNU Standards +AM_INIT_AUTOMAKE(foreign) +# +MAJOR_NR=OPJ_MAJOR +MINOR_NR=OPJ_MINOR +BUILD_NR=OPJ_BUILD +AC_SUBST(MAJOR_NR) +AC_SUBST(MINOR_NR) +AC_SUBST(BUILD_NR) +# +JP3D_MAJOR_NR=JP3D_MAJOR +JP3D_MINOR_NR=JP3D_MINOR +JP3D_BUILD_NR=JP3D_BUILD +AC_SUBST(JP3D_MAJOR_NR) +AC_SUBST(JP3D_MINOR_NR) +AC_SUBST(JP3D_BUILD_NR) +# +# Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_SED +AC_SYS_LARGEFILE +AC_FUNC_FSEEKO +AC_PROG_MAKE_SET +#AC_HEADER_DIRENT +# +# Tests for Windows +# +AC_EXEEXT +AC_OBJEXT +# +# Configure libtool +AC_ENABLE_SHARED +AC_LIBTOOL_WIN32_DLL +AC_LIBTOOL_SETUP +AC_PROG_LIBTOOL +# +AC_C_BIGENDIAN +# +LIB_MATH="" +AC_CHECK_LIB(m,sqrt,LIB_MATH="-lm",,) +LIB_Z="" +AC_CHECK_LIB(z,inflate,LIB_Z="-lz",,) +# +LIBS="$LIBS $LIB_MATH $LIB_Z" +# +AC_PATH_PROG([PKGCONFIG], [pkg-config]) +# +# ------------------------------ +# Test for PNG +# ------------------------------ +AC_MSG_CHECKING(whether to build with PNG support) +pngincludes="" +pnglibs="" +png_header_found="no" +with_libpng="yes" +# +AC_ARG_ENABLE(png, +[ --enable-png[=[yes|no]] Build with PNG support [ [default=yes] ]], +test "$enable_png" = "no" && with_libpng="no") +# +if test "x$with_libpng" = xyes ; then + with_libpng="no" + AC_PATH_PROG([LIBPNG_CONFIG], [libpng-config]) +# + pngheader="" + AC_ARG_WITH(png_includes, + [ --with-png-includes=DIR PNG includes in nonstandard DIR]) + if test -n "$with_png_includes" ; then + pngheader="$with_png_includes" + pngincludes="-I$with_png_includes" + else + if test -n "$PKGCONFIG" ; then + pngincludes="`$PKGCONFIG --variable=includedir libpng`" + if test -n "$pngincludes" ; then + pngheader="$pngincludes" + pngincludes="-I$pngincludes" + fi + else + if test -n "$LIBPNG_CONFIG" ; then + pngincludes="`$LIBPNG_CONFIG --I_opts`" + pngheader="`$LIBPNG_CONFIG --I_opts | $SED 's/-I//'`" + fi + fi + fi + if test -n "$pngheader" ; then + pngheader="$pngheader/png.h" + else + pngheader="png.h" + fi +# + AC_CHECK_HEADER($pngheader,png_header_found="yes",,) +# + AC_ARG_WITH(png_libraries, + [ --with-png-libraries=DIR PNG library in nonstandard DIR]) + if [[ -n "$with_png_libraries" ]] ; then + pnglibs="-L$with_png_libraries -lpng" + else + if test -n "$LIBPNG_CONFIG" ; then + pnglibs="`$LIBPNG_CONFIG --ldflags`" + else + if test -n "$PKGCONFIG" ; then + pnglibs="`$PKGCONFIG --libs libpng`" + fi + fi + fi + savedLIBS="$LIBS" + LIBS="$pnglibs $LIB_Z $LIB_MATH" +# + AC_CHECK_LIB(png,png_create_read_struct,,pnglibs="",) +# + LIBS="$savedLIBS" + if test -n "$pnglibs" ; then + if test -n "$pngincludes" ; then + with_libpng="yes" + png_header_found="yes" + LIBS="$LIBS $pnglibs" + AC_DEFINE(HAVE_LIBPNG, [1], [define to 1 if you have libpng]) + fi + fi +fi +# +AC_MSG_RESULT(png is usable:$with_libpng) +AM_CONDITIONAL([with_libpng], [test x$with_libpng = xyes]) +AC_SUBST(pngincludes) +AC_SUBST(pnglibs) +# ------------------------------- +# Test for TIFF +# ------------------------------- +AC_MSG_CHECKING(whether to build with TIFF support) +tifflibs="" +tiffincludes="" +with_libtiff="yes" +tiff_header_found="no" +# +AC_ARG_ENABLE(tiff, +[ --enable-tiff[=[yes|no]] Build with TIFF support [ [default=yes] ]], +test "$enable_tiff" = "no" && with_libtiff="no") +# +if test "x$with_libtiff" = xyes ; then +#TIFF compiled with JPEG and JBIG support? + libjpeg="" + AC_CHECK_LIB(jpeg,jpeg_read_header,libjpeg=-ljpeg,,) + libjbig="" + AC_CHECK_LIB(jbig,jbg_enc_init,libjbig=-ljbig,,) + libjbig85="" + AC_CHECK_LIB(jbig85,jbg85_enc_init,libjbig85=-ljbig85,,) +#standard path + with_libtiff="no" + savedLIBS="$LIBS" + LIBS="-ltiff $libjpeg $libjbig $libjbig85 $LIB_Z $LIB_MATH" + AC_CHECK_LIB(tiff, TIFFOpen, tifflibs=-ltiff) + LIBS="$savedLIBS" + if test -n "$tifflibs" ; then + AC_CHECK_HEADER(tiff.h,tiff_header_found="yes",,) + if test "$tiff_header_found" = "yes" ; then + with_libtiff="yes" + LIBS="$LIBS -ltiff $libjpeg $libjbig $libjbig85" + AC_DEFINE(HAVE_LIBTIFF, [1], [define to 1 if you have libtiff]) + fi + fi +# + if test "x$with_libtiff" = xno ; then +#non-standard path + AC_ARG_WITH(tiff_includes, + [ --with-tiff-includes=DIR TIFF includes in nonstandard DIR]) + if test -n "$with_tiff_includes" ; then + tiffheader="$with_tiff_includes/tiff.h" + AC_CHECK_HEADER($tiffheader,tiff_header_found="yes",,) + if test "$tiff_header_found" = "yes" ; then + tiffincludes="-I$with_tiff_includes" + fi + fi + AC_ARG_WITH(tiff_libraries, + [ --with-tiff-libraries=DIR TIFF library in nonstandard DIR]) + if test -n "$with_tiff_libraries" ; then + tifflibs="-L$with_tiff_libraries" + fi + tifflibs="$tifflibs -ltiff" + savedLIBS="$LIBS" + LIBS="$tifflibs $libjpeg $libjbig $libjbig85 $LIB_Z $LIB_MATH" + with_libtiff="no" +# + AC_CHECK_LIB(tiff, TIFFOpen, , tifflibs="",) +# + if test -n "$tifflibs" ; then + if test "$tiff_header_found" = "yes" ; then + with_libtiff="yes" + AC_DEFINE(HAVE_LIBTIFF, [1], [define to 1 if you have libtiff]) + fi + fi + LIBS="$savedLIBS $tifflibs $libjpeg $libjbig $libjbig85" + fi +fi +# +AC_MSG_RESULT(tiff is usable:$with_libtiff) +AM_CONDITIONAL([with_libtiff], [test x$with_libtiff = xyes]) +AC_SUBST(tiffincludes) +AC_SUBST(tifflibs) +# ------------------------------- +# Test for LCMS version 2.x +# ------------------------------- +AC_MSG_CHECKING(whether to build with LCMS support) +lcms1includes="" +lcms1libs="" +lcms2includes="" +lcms2libs="" +with_liblcms1="no" +lcms1_header_found="no" +lcms2_header_found="no" +have_lcms1_version="" +have_lcms2_version="" +with_liblcms2="yes" +# +AC_ARG_ENABLE(lcms2, +[ --enable-lcms2[=[yes|no]] Build with LCMS-2 support [ [default=yes] ]], +test "$enable_lcms2" = "no" && with_liblcms2="no") +# +if test "x$with_liblcms2" = xyes ; then + with_liblcms2="no" + lcms2header="" + AC_ARG_WITH(lcms2_includes, + [ --with-lcms2-includes=DIR LCMS-2 includes in nonstandard DIR]) + if test -n "$with_lcms2_includes" ; then + lcms2header="$with_lcms2_includes" + lcms2includes="-I$with_lcms2_includes" + else + if test -n "$PKGCONFIG" ; then + lcms2includes="`$PKGCONFIG --variable=prefix lcms2`" + fi + if test -n "$lcms2includes" ; then + lcms2header="$lcms2_includes" + lcms2includes="-I$lcms2includes/include" + fi + fi + if test -n "$lcms2header" ; then + lcms2header="$lcms2header/lcms2.h" + else + lcms2header="lcms2.h" + fi + AC_CHECK_HEADER($lcms2header,lcms2_header_found="yes",,) +# + AC_ARG_WITH(lcms2_libraries, + [ --with-lcms2-libraries=DIR LCMS-2 library in nonstandard DIR]) + if test -n "$with_lcms2_libraries" ; then + lcms2libs="-L$with_lcms2_libraries -llcms2" + else + if test -n "$PKGCONFIG" ; then + lcms2libs="`$PKGCONFIG --libs lcms2`" + fi + if test -z "$lcms2libs" ; then + lcms2libs="-llcms2" + fi + lcms2libs="$lcms2libs" + fi + savedLIBS="$LIBS" + LIBS="$lcms2libs $LIB_MATH" + with_liblcms2="no" +# + AC_CHECK_LIB(lcms2, cmsOpenProfileFromFile, ,lcms2libs="",) +# + if test -n "$lcms2libs" ; then + if test "$lcms2_header_found" = "yes" ; then + with_liblcms2="yes" + AC_DEFINE(HAVE_LIBLCMS2, [1], [define to 1 if you have lcms version 2.x]) + if test -n "$PKGCONFIG" ; then + have_lcms2_version="`$PKGCONFIG --modversion lcms2`" + fi + fi + fi + if test "$with_liblcms2" = "no" ; then + lcms2libs="" + lcms2includes="" + lcms2libs="" + fi + LIBS="$savedLIBS $lcms2libs" +fi +# +AC_MSG_RESULT(lcms2 is usable:$with_liblcms2) +AM_CONDITIONAL([with_liblcms2], [test x$with_liblcms2 = xyes]) +AC_SUBST(lcms2includes) +AC_SUBST(lcms2libs) +AC_MSG_RESULT(lcms2libs:$lcms2libs) +# ---------------------------- +# Test for LCMS version 1.x +# ---------------------------- +if [[ -z "$lcms2libs" ]] ; then + with_liblcms1="yes" + AC_ARG_ENABLE(lcms1, + [ --enable-lcms1[=[yes|no]] Build with LCMS-1 support [ [default=yes] ]], + test "$enable_lcms1" = "no" && with_liblcms1="no") +# + if test "x$with_liblcms1" = xyes ; then + with_liblcms1="no" + lcms1header="" + AC_ARG_WITH(lcms1_includes, + [ --with-lcms1-includes=DIR LCMS-1 includes in nonstandard DIR]) + if test -n "$with_lcms1_includes" ; then + lcms1header="$with_lcms1_includes" + lcms1includes="-I$with_lcms1_includes" + else + if test -n "$PKGCONFIG" ; then + lcms1includes="`$PKGCONFIG --variable=includedir lcms`" + fi + if test -n "$lcms1includes" ; then + lcms1header="$lcms1includes" + lcms1includes="-I$lcms1includes" + fi + fi + if test -n "$lcms1header" ; then + lcms1header="$lcms1header/lcms.h" + else + lcms1header="lcms.h" + fi + AC_CHECK_HEADER($lcms1header,lcms1_header_found="yes",,) +# + AC_ARG_WITH(lcms1_libraries, + [ --with-lcms1-libraries=DIR LCMS-1 library in nonstandard DIR]) + if test -n "$with_lcms1_libraries" ; then + lcms1libs="-L$with_lcms1_libraries -llcms" + else + if test -n "$PKGCONFIG" ; then + lcms1libs="`$PKGCONFIG --libs lcms`" + fi + if test -z "$lcms1libs" ; then + lcms1libs="-llcms" + fi + lcms1libs="$lcms1libs" + fi + savedLIBS="$LIBS" + LIBS="$lcms1libs $LIB_MATH" + with_liblcms1="no" +# + AC_CHECK_LIB(lcms, cmsOpenProfileFromFile, ,lcms1libs="",) +# + if test -n "$lcms1libs" ; then + if test "$lcms1_header_found" = "yes" ; then + with_liblcms1="yes" + AC_DEFINE(HAVE_LIBLCMS1, [1], [define to 1 if you have lcms version 1.x]) + if test -n "$PKGCONFIG" ; then + have_lcms1_version="`$PKGCONFIG --modversion lcms`" + fi + fi + fi + if test "$with_liblcms1" = "no" ; then + lcms1libs="" + lcms1includes="" + lcms1libs="" + fi + LIBS="$savedLIBS $lcms1libs" + fi +AC_MSG_RESULT(lcms is usable:$with_liblcms1) +fi +# +AM_CONDITIONAL([with_liblcms1], [test x$with_liblcms1 = xyes]) +AC_SUBST(lcms1includes) +AC_SUBST(lcms1libs) +# +# ------------------------------- +# Test for USE_JPWL +# ------------------------------- +AC_MSG_CHECKING(whether to build with JPWL support) +with_libjpwl="no" +jpwl_dir="" +AC_ARG_ENABLE(jpwl, + [ --enable-jpwl[=[yes|no]] Build with JPWL support [ [default=no] ]], + test "$enable_jpwl" = "yes" && with_libjpwl="yes") +# +AC_MSG_RESULT($with_libjpwl) +AM_CONDITIONAL([with_libjpwl], [test x$with_libjpwl = xyes]) +if test "$with_libjpwl" = "yes" ; then + jpwl_dir="jpwl" +fi +AC_SUBST(jpwl_dir) +# +# ------------------------------- +# Test for creating SHARED LIBS +# wanted result: shared xor static +# ------------------------------- +with_sharedlibs="yes" +AC_MSG_CHECKING(whether to build shared libraries) +AC_ARG_ENABLE(shared, +[ --enable-shared[=[yes|no]] Build shared libs [ [default=yes] ]], +test "$enable_shared" = "no" && with_sharedlibs="no") +# +AC_MSG_RESULT($with_sharedlibs) +AM_CONDITIONAL([with_sharedlibs], [test x$with_sharedlibs = xyes]) +# +# ------------------------------- +# Test for creating JP3D +# ------------------------------- +with_jp3d="no" +jp3d_dir="" +AC_MSG_CHECKING(whether to build the JP3D library) +AC_ARG_ENABLE(jp3d, + [ --enable-jp3d[=[yes|no]] Build jp3d libs [ [default=no] ]], + test "$enable_jp3d" = "yes" && with_jp3d="yes") +# +AC_MSG_RESULT($with_jp3d) +if test "$with_jp3d" = "yes" ; then + jp3d_dir="jp3d" +fi +AC_SUBST(jp3d_dir) +# +AC_CHECK_PROG(with_doxygen, doxygen, [yes],[no],,) +AM_CONDITIONAL([with_doxygen], [test x$with_doxygen = xyes]) +# +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([libopenjpeg.pc]) +AC_CONFIG_FILES([libopenjpeg/Makefile]) +AC_CONFIG_FILES([jpwl/Makefile]) +AC_CONFIG_FILES([codec/Makefile]) +AC_CONFIG_FILES([mj2/Makefile]) +AC_CONFIG_FILES([doc/Makefile]) +AC_CONFIG_FILES([jp3d/Makefile]) +AC_CONFIG_FILES([jp3d/libjp3dvm/Makefile]) +AC_CONFIG_FILES([jp3d/codec/Makefile]) +AC_OUTPUT +# +echo "----------------------------------------------" +echo " your configuration" +echo "" +echo "--with-png-libraries: $with_libpng" +echo "libpng header : $png_header_found" +echo "--enable-tiff : $with_libtiff" +echo "libtiff header : $tiff_header_found" +echo "--enable-lcms2 : $with_liblcms2" +echo "lcms2 header : $lcms2_header_found" +echo "lcms2 version : $have_lcms2_version" +echo "--enable-lcms1 : $with_liblcms1" +echo "lcms1 header : $lcms1_header_found" +echo "lcms1 version : $have_lcms1_version" +echo "--enable-jpwl : $with_libjpwl" +echo "--enable-jp3d : $with_jp3d" +echo "--enable-shared : $with_sharedlibs" +echo "----------------------------------------------" diff --git a/contrib/menuetlibc/openjpeg/depcomp b/contrib/menuetlibc/openjpeg/depcomp new file mode 100755 index 0000000000..df8eea7e4c --- /dev/null +++ b/contrib/menuetlibc/openjpeg/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/menuetlibc/openjpeg/doc/CMakeLists.txt b/contrib/menuetlibc/openjpeg/doc/CMakeLists.txt new file mode 100644 index 0000000000..aadbadbae5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/CMakeLists.txt @@ -0,0 +1,15 @@ +FIND_PACKAGE(Doxygen) +# +IF(DOXYGEN_EXECUTABLE) +# The Doxyfile.dox is poorly defined and produce output +# in the source dir +ADD_CUSTOM_TARGET(doxygen +# By default doxygen target is added to the 'all' target. Project is small +# thus running doxygen is not too time consuming + ALL + ${DOXYGEN} + ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.dox + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) +ENDIF(DOXYGEN_EXECUTABLE) + diff --git a/contrib/menuetlibc/openjpeg/doc/Doxyfile.dox b/contrib/menuetlibc/openjpeg/doc/Doxyfile.dox new file mode 100644 index 0000000000..c60a4dec99 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/Doxyfile.dox @@ -0,0 +1,234 @@ +# Doxyfile 1.4.2 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = OpenJPEG +PROJECT_NUMBER = +OUTPUT_DIRECTORY = . +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = YES +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = C:// +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = ../libopenjpeg \ + ../jpwl +FILE_PATTERNS = *.h \ + *.c +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = ./html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = USE_JPWL \ + USE_JPSEC +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/contrib/menuetlibc/openjpeg/doc/Makefile b/contrib/menuetlibc/openjpeg/doc/Makefile new file mode 100644 index 0000000000..6f69ca77b5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/Makefile @@ -0,0 +1,422 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# doc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +pkgdatadir = $(datadir)/openjpeg-1.4.0 +pkgincludedir = $(includedir)/openjpeg-1.4.0 +pkglibdir = $(libdir)/openjpeg-1.4.0 +pkglibexecdir = $(libexecdir)/openjpeg-1.4.0 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf +AUTOHEADER = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader +AUTOMAKE = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11 +AWK = mawk +BUILD_NR = 0 +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JP3D_BUILD_NR = 0 +JP3D_MAJOR_NR = 1 +JP3D_MINOR_NR = 3 +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBPNG_CONFIG = /usr/bin/libpng-config +LIBS = -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAJOR_NR = 1 +MAKEINFO = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo +MINOR_NR = 4 +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = openjpeg-1.4.0 +PACKAGE_BUGREPORT = http://code.google.com/p/openjpeg/ +PACKAGE_NAME = OpenJPEG +PACKAGE_STRING = OpenJPEG 1.4.0 +PACKAGE_TARNAME = openjpeg-1.4.0 +PACKAGE_URL = http://www.openjpeg.org/ +PACKAGE_VERSION = 1.4.0 +PATH_SEPARATOR = : +PKGCONFIG = /usr/bin/pkg-config +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 1.4.0 +abs_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/doc +abs_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/doc +abs_top_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_top_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh +jp3d_dir = +jpwl_dir = +lcms1includes = -I/usr/include +lcms1libs = -llcms +lcms2includes = +lcms2libs = +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pngincludes = -I/usr/include/libpng12 +pnglibs = -L/usr/lib/x86_64-linux-gnu -lpng12 +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +tiffincludes = +tifflibs = -ltiff +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +with_doxygen = no +MAJOR = 1 +MINOR = 4 +BUILD = 0 +doc_dir = $(datarootdir)/doc/openjpeg-$(MAJOR).$(MINOR) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-data-hook \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-hook + + +#docs: +# doxygen Doxyfile.dox + +all-local: + @echo "" > .report.txt + @echo "Installing: image_to_j2k.1 ${mandir}/man1" >> .report.txt + @echo "Installing: j2k_to_image.1 ${mandir}/man1" >> .report.txt + @echo "Installing: j2k_dump.1 ${mandir}/man1" >> .report.txt + @echo "Installing: libopenjpeg.3 ${mandir}/man3" >> .report.txt + @echo "Installing: LICENSE CHANGES $(doc_dir)" >> .report.txt + @cp man/man1/* . + @cp man/man3/* . + +install-data-hook: + $(INSTALL) -d $(doc_dir) + $(INSTALL) -d ${mandir}/man1 ${mandir}/man3 +# @(cd ${mandir}/man1 && $(RM) JPWL_image_to_j2k* JPWL_j2k_to_image*) +# @(cd ${mandir}/man3 && $(RM) JPWL_libopenjpeg* ) + @(cd ${mandir}/man1 && $(RM) image_to_j2k* j2k_to_image* j2k_dump* ) + @(cd ${mandir}/man3 && $(RM) libopenjpeg* ) + @gzip -f image_to_j2k.1 j2k_to_image.1 j2k_dump.1 libopenjpeg.3 + @cp image_to_j2k.1.gz j2k_to_image.1.gz j2k_dump.1.gz ${mandir}/man1 + @cp libopenjpeg.3.gz ${mandir}/man3 + @$(RM) *\.gz +# @(cd ${mandir}/man1 && \ +# $(LN_S) image_to_j2k.1.gz JPWL_image_to_j2k.1.gz && \ +# $(LN_S) j2k_to_image.1.gz JPWL_j2k_to_image.1.gz) +# @(cd ${mandir}/man3 && $(LN_S) libopenjpeg.3.gz JPWL_libopenjpeg.3.gz) + @$(INSTALL) -m 644 ../LICENSE ../CHANGES $(doc_dir) + +uninstall-hook: + @(cd ${mandir}/man1 && $(RM) JPWL_image_to_j2k* JPWL_j2k_to_image* && \ + $(RM) image_to_j2k* j2k_to_image* j2k_dump* ) + @(cd ${mandir}/man3 && $(RM) JPWL_libopenjpeg* && \ + $(RM) libopenjpeg* ) + @(cd $(doc_dir) && $(RM) * ) + @rmdir $(doc_dir) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/doc/Makefile.am b/contrib/menuetlibc/openjpeg/doc/Makefile.am new file mode 100644 index 0000000000..809c80114a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/Makefile.am @@ -0,0 +1,49 @@ +MAJOR = @MAJOR_NR@ +MINOR = @MINOR_NR@ +BUILD = @BUILD_NR@ + +if with_doxygen +docs: + doxygen Doxyfile.dox +endif + +doc_dir = $(datarootdir)/doc/openjpeg-$(MAJOR).$(MINOR) + +all-local: + @echo "" > .report.txt + @echo "Installing: image_to_j2k.1 ${mandir}/man1" >> .report.txt + @echo "Installing: j2k_to_image.1 ${mandir}/man1" >> .report.txt + @echo "Installing: j2k_dump.1 ${mandir}/man1" >> .report.txt + @echo "Installing: libopenjpeg.3 ${mandir}/man3" >> .report.txt + @echo "Installing: LICENSE CHANGES $(doc_dir)" >> .report.txt + @cp man/man1/* . + @cp man/man3/* . + +install-data-hook: + $(INSTALL) -d $(doc_dir) + $(INSTALL) -d ${mandir}/man1 ${mandir}/man3 +if with_libjpwl + @(cd ${mandir}/man1 && $(RM) JPWL_image_to_j2k* JPWL_j2k_to_image*) + @(cd ${mandir}/man3 && $(RM) JPWL_libopenjpeg* ) +endif + @(cd ${mandir}/man1 && $(RM) image_to_j2k* j2k_to_image* j2k_dump* ) + @(cd ${mandir}/man3 && $(RM) libopenjpeg* ) + @gzip -f image_to_j2k.1 j2k_to_image.1 j2k_dump.1 libopenjpeg.3 + @cp image_to_j2k.1.gz j2k_to_image.1.gz j2k_dump.1.gz ${mandir}/man1 + @cp libopenjpeg.3.gz ${mandir}/man3 + @$(RM) *\.gz +if with_libjpwl + @(cd ${mandir}/man1 && \ + $(LN_S) image_to_j2k.1.gz JPWL_image_to_j2k.1.gz && \ + $(LN_S) j2k_to_image.1.gz JPWL_j2k_to_image.1.gz) + @(cd ${mandir}/man3 && $(LN_S) libopenjpeg.3.gz JPWL_libopenjpeg.3.gz) +endif + @$(INSTALL) -m 644 ../LICENSE ../CHANGES $(doc_dir) + +uninstall-hook: + @(cd ${mandir}/man1 && $(RM) JPWL_image_to_j2k* JPWL_j2k_to_image* && \ + $(RM) image_to_j2k* j2k_to_image* j2k_dump* ) + @(cd ${mandir}/man3 && $(RM) JPWL_libopenjpeg* && \ + $(RM) libopenjpeg* ) + @(cd $(doc_dir) && $(RM) * ) + @rmdir $(doc_dir) diff --git a/contrib/menuetlibc/openjpeg/doc/Makefile.in b/contrib/menuetlibc/openjpeg/doc/Makefile.in new file mode 100644 index 0000000000..73c2fc8c5f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/Makefile.in @@ -0,0 +1,422 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_NR = @BUILD_NR@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JP3D_BUILD_NR = @JP3D_BUILD_NR@ +JP3D_MAJOR_NR = @JP3D_MAJOR_NR@ +JP3D_MINOR_NR = @JP3D_MINOR_NR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBPNG_CONFIG = @LIBPNG_CONFIG@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAJOR_NR = @MAJOR_NR@ +MAKEINFO = @MAKEINFO@ +MINOR_NR = @MINOR_NR@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG = @PKGCONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +jp3d_dir = @jp3d_dir@ +jpwl_dir = @jpwl_dir@ +lcms1includes = @lcms1includes@ +lcms1libs = @lcms1libs@ +lcms2includes = @lcms2includes@ +lcms2libs = @lcms2libs@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pngincludes = @pngincludes@ +pnglibs = @pnglibs@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +tiffincludes = @tiffincludes@ +tifflibs = @tifflibs@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_doxygen = @with_doxygen@ +MAJOR = @MAJOR_NR@ +MINOR = @MINOR_NR@ +BUILD = @BUILD_NR@ +doc_dir = $(datarootdir)/doc/openjpeg-$(MAJOR).$(MINOR) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-data-hook \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-hook + + +@with_doxygen_TRUE@docs: +@with_doxygen_TRUE@ doxygen Doxyfile.dox + +all-local: + @echo "" > .report.txt + @echo "Installing: image_to_j2k.1 ${mandir}/man1" >> .report.txt + @echo "Installing: j2k_to_image.1 ${mandir}/man1" >> .report.txt + @echo "Installing: j2k_dump.1 ${mandir}/man1" >> .report.txt + @echo "Installing: libopenjpeg.3 ${mandir}/man3" >> .report.txt + @echo "Installing: LICENSE CHANGES $(doc_dir)" >> .report.txt + @cp man/man1/* . + @cp man/man3/* . + +install-data-hook: + $(INSTALL) -d $(doc_dir) + $(INSTALL) -d ${mandir}/man1 ${mandir}/man3 +@with_libjpwl_TRUE@ @(cd ${mandir}/man1 && $(RM) JPWL_image_to_j2k* JPWL_j2k_to_image*) +@with_libjpwl_TRUE@ @(cd ${mandir}/man3 && $(RM) JPWL_libopenjpeg* ) + @(cd ${mandir}/man1 && $(RM) image_to_j2k* j2k_to_image* j2k_dump* ) + @(cd ${mandir}/man3 && $(RM) libopenjpeg* ) + @gzip -f image_to_j2k.1 j2k_to_image.1 j2k_dump.1 libopenjpeg.3 + @cp image_to_j2k.1.gz j2k_to_image.1.gz j2k_dump.1.gz ${mandir}/man1 + @cp libopenjpeg.3.gz ${mandir}/man3 + @$(RM) *\.gz +@with_libjpwl_TRUE@ @(cd ${mandir}/man1 && \ +@with_libjpwl_TRUE@ $(LN_S) image_to_j2k.1.gz JPWL_image_to_j2k.1.gz && \ +@with_libjpwl_TRUE@ $(LN_S) j2k_to_image.1.gz JPWL_j2k_to_image.1.gz) +@with_libjpwl_TRUE@ @(cd ${mandir}/man3 && $(LN_S) libopenjpeg.3.gz JPWL_libopenjpeg.3.gz) + @$(INSTALL) -m 644 ../LICENSE ../CHANGES $(doc_dir) + +uninstall-hook: + @(cd ${mandir}/man1 && $(RM) JPWL_image_to_j2k* JPWL_j2k_to_image* && \ + $(RM) image_to_j2k* j2k_to_image* j2k_dump* ) + @(cd ${mandir}/man3 && $(RM) JPWL_libopenjpeg* && \ + $(RM) libopenjpeg* ) + @(cd $(doc_dir) && $(RM) * ) + @rmdir $(doc_dir) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/doc/Makefile.nix b/contrib/menuetlibc/openjpeg/doc/Makefile.nix new file mode 100644 index 0000000000..302d31b060 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/Makefile.nix @@ -0,0 +1,47 @@ +#doc Makefile.nix +include ../config.nix + +doc_dir = $(prefix)/share/doc/openjpeg-$(MAJOR).$(MINOR) +man_dir = $(prefix)/share/man + +ifeq ($(HAS_DOXYGEN),yes) +docs: + doxygen Doxyfile.dox + +endif + +clean: + rm -rf html + +install: + cp man/man1/* . + cp man/man3/* . + install -d $(doc_dir) + install -d $(man_dir)/man1 $(man_dir)/man3 +ifeq ($(WITH_JPWL),yes) + (cd $(man_dir)/man1 && rm -f JPWL_image_to_j2k* JPWL_j2k_to_image* ) + (cd $(man_dir)/man3 && rm -f JPWL_libopenjpeg* ) +endif + (cd $(man_dir)/man1 && rm -f image_to_j2k* j2k_to_image* j2k_dump* ) + (cd $(man_dir)/man3 && rm -f libopenjpeg* ) + gzip -f image_to_j2k.1 j2k_to_image.1 j2k_dump.1 libopenjpeg.3 + cp -f image_to_j2k.1.gz j2k_to_image.1.gz j2k_dump.1.gz $(man_dir)/man1 + cp -f libopenjpeg.3.gz $(man_dir)/man3 + rm -f *\.gz +ifeq ($(WITH_JPWL),yes) + (cd $(man_dir)/man1 && \ + ln -sf image_to_j2k.1.gz JPWL_image_to_j2k.1.gz && \ + ln -sf j2k_to_image.1.gz JPWL_j2k_to_image.1.gz) + (cd $(man_dir)/man3 && ln -sf libopenjpeg.3.gz JPWL_libopenjpeg.3.gz) +endif + cp ../LICENSE ../CHANGES $(doc_dir) + +uninstall: + rm -rf $(doc_dir) +ifeq ($(WITH_JPWL),yes) + (cd $(man_dir)/man1 && rm -f JPWL_image_to_j2k* JPWL_j2k_to_image* ) + (cd $(man_dir)/man3 && rm -f JPWL_libopenjpeg* ) +endif + (cd $(man_dir)/man1 && rm -f image_to_j2k* j2k_to_image* j2k_dump* ) + (cd $(man_dir)/man3 && rm -f libopenjpeg* ) + diff --git a/contrib/menuetlibc/openjpeg/doc/image_to_j2k.1 b/contrib/menuetlibc/openjpeg/doc/image_to_j2k.1 new file mode 100644 index 0000000000..331af0eba3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/image_to_j2k.1 @@ -0,0 +1,222 @@ +'\" t +'\" The line above instructs most `man' programs to invoke tbl +'\" +'\" Separate paragraphs; not the same as PP which resets indent level. +.de SP +.if t .sp .5 +.if n .sp +.. +'\" +'\" Replacement em-dash for nroff (default is too short). +.ie n .ds m " - +.el .ds m \(em +'\" +'\" Placeholder macro for if longer nroff arrow is needed. +.ds RA \(-> +'\" +'\" Decimal point set slightly raised +.if t .ds d \v'-.15m'.\v'+.15m' +.if n .ds d . +'\" +'\" Enclosure macro for examples +.de EX +.SP +.nf +.ft CW +.. +.de EE +.ft R +.SP +.fi +.. +.TH image_to_j2k 1 "Version 1.4.0" "image_to_j2k" "converts to jpeg2000 files" +.P +.SH NAME +image_to_j2k - +This program reads in an image of a certain type and converts it to a +jpeg2000 file. It is part of the OpenJPEG library. +.SP +Valid input image extensions are +.B .bmp, .pgm, .pgx, .png, .pnm, .ppm, .raw, .tga, .tif \fR. For PNG resp. TIF it needs libpng resp. libtiff . +.SP +Valid output image extensions are +.B .j2k, .jp2 +.SH SYNOPSIS +.P +.B image_to_j2k -i \fRinfile.bmp \fB-o \fRoutfile.j2k +.P +.B image_to_j2k -ImgDir \fRdirectory_name \fB-OutFor \fRjp2 +.P +.B image_to_j2k -h \fRPrint a help message and exit. +.P +.R See JPWL OPTIONS for special options +.SH OPTIONS +.TP +.B \-\^b " n,n" +(Size of code block (e.g. -b 32,32). Default: 64 x 64) +.TP +.B \-\^c " n" +(Size of precinct (e.g. -c 128,128). Default: 2^15 x 2^15) +.TP +.B \-\^cinema2K " fps" +Digital Cinema 2K profile compliant codestream. Valid \fBfps\fR values are 24 or 48. +.TP +.B \-\^cinema4K +Digital Cinema 4K profile compliant codestream. Does not need an fps: default is 24 fps. +.TP +.B \-\^d " X,Y" +(Offset of image origin (e.g. -d 150,300)) +.TP +.B \-\^h +Print a help message and exit. +.TP +.B \-\^i " name" +(input file name) +.TP +.B \-\^n " n" +(Number of resolutions. Default: 6) +.TP +.B \-\^o " name" +(output file name) +.TP +.B \-\^p " name" +Progression order. \fBname\fR can be one out of:LRCP, RLCP, RPCL, PCRL, CPRL. Default: LRCP. +.TP +.B \-\^q " n" +different psnr for successive layers +.br +.B Note: \fR(options -r and -q cannot be used together) +.TP +.B \-\^r " n" +different compression ratio(s) for successive layers. The rate specified for each quality level is the desired compression factor. +.br +.B Note: \fR(options -r and -q cannot be used together) +.TP +.B \-\^s " X,Y" +sub-sampling factor (e.g. -s 2,2). Default: No sub-sampling in x or y direction. +.br +.B Remark: \fRsub-sampling bigger than 2 can produce errors. +.TP +.B \-\^t " W,H" +(Size of tile (e.g. -t 512,512) ) +.TP +.B \-\^x " name" +(Create index file and fill it. Default: no index file) +.TP +.B \-\^EPH +(Write EPH marker after each header packet. Default:no EPH) +.TP +.B \-\^F " rawWidth,rawHeight,rawComp,rawBitDepth,s_or_u" +characteristics of the raw input image +.TP +.B \-\^I +(Use the irreversible DWT 9-7. Default: Reversible DWT 5-3) +.TP +.B \-\^ImgDir " directory_name" +(directory containing input files) +.TP +.B \-\^M " n" +mode switch with values: 1, 2, 4, 8, 16, 32. Default:No mode switch activated. +.br +\fIMeaning:\fR +.br +BYPASS(1) +.br +RESET(2) +.br +RESTART(4) +.br +VSC(8) +.br +ERTERM(16) +.br +SEGMARK(32) +.br +Values can be added: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38 +.TP +.B \-\^OutFor "ext" +(extension for output files) +.TP +.B \-\^POC "TtileNr=resolutionStart, componentStart, layerEnd, resolutionEnd, componentEnd, progressionOrder" +(see Examples) +.TP +.B \-\^ROI "c=n,U=n" +quantization indices upshifted for component c (0 or 1 or 2) with a value of U (>= 0 and <= 37) +.br +e.g. \fB-ROI c=0,U=25\fR +.TP +.B \-\^SOP +(Write SOP marker before each packet. Default: No SOP marker in the codestream.) +.TP +.B \-\^T "X,Y" +(Offset of the origin of the tiles (e.g. -T 100,75) ) +.TP +.B \-\^W +(see JPWL OPTIONS) +.P +.SH JPWL OPTIONS +Options usable only if the library has been compiled with \fB-DUSE_JPWL\fR +.P +.B -W h<=type>, s<=method>, a=, z=, g=, p<=type> +.P +.B h\fR selects the header error protection (EPB): \fBtype\fR can be + [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS] + if \fBtilepart\fR is absent, it is for main and tile headers + if \fBtilepart\fR is present, it applies from that tile + onwards, up to the next h<> spec, or to the last tilepart + in the codestream (max. 16 specs) +.P +.B p \fRselects the packet error protection (EEP/UEP with EPBs) + to be applied to raw data: \fBtype\fR can be + [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS] + if \fBtilepart:pack\fR is absent, it is from tile 0, packet 0 + if \fBtilepart:pack\fR is present, it applies from that tile + and that packet onwards, up to the next packet spec + or to the last packet in the last tilepart in the stream + (max. 16 specs) +.P +.B s \fRenables sensitivity data insertion (ESD): \fBmethod\fR can be + [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR + 4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED] + if \fBtilepart\fR is absent, it is for main header only + if \fBtilepart\fR is present, it applies from that tile + onwards, up to the next s<> spec, or to the last tilepart + in the codestream (max. 16 specs) +.P +.B g \fRdetermines the addressing mode: \fBrange\fR can be + [0=PACKET 1=BYTE RANGE 2=PACKET RANGE] +.P +.B a \fRdetermines the size of data addressing: \fBaddr\fR can be + 2/4 bytes (small/large codestreams). If not set, auto-mode +.P +.B z \fRdetermines the size of sensitivity values: \fBsize\fR can be + 1/2 bytes, for the transformed pseudo-floating point value +.P +.SH EXAMPLES +.P +.B image_to_j2k -i \fRfile.bmp \fB-o \fRfile.j2k \fB-r \fR20,10,1 (compress 20x, then 10x, then lossless). +.P +.B image_to_j2k -i \fRfile.ppm \fB-o \fRfile.j2k \fB-q \fR30,40,50 +.P +.B image_to_j2k -i \fRfile.pgx \fB-o \fRfile.j2k \fB-POC \fRT1=0,0,1,5,3,CPRL +.P +.B image_to_j2k -i \fRlena.raw \fB-o \fRlena.j2k \fB-F \fR512,512,3,8,u +.P +.SH AUTHORS +Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium +.br +Copyright (c) 2002-2007, Professor Benoit Macq +.br +Copyright (c) 2001-2003, David Janssens +.br +Copyright (c) 2002-2003, Yannick Verschueren +.br +Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe +.br +Copyright (c) 2005, Herve Drolon, FreeImage Team +.br +Copyright (c) 2006-2007, Parvatha Elangovan +.P +.SH "SEE ALSO" +j2k_to_image(1) j2k_dump(1) + diff --git a/contrib/menuetlibc/openjpeg/doc/j2k_dump.1 b/contrib/menuetlibc/openjpeg/doc/j2k_dump.1 new file mode 100644 index 0000000000..c45e9f4943 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/j2k_dump.1 @@ -0,0 +1,62 @@ +'\" t +'\" The line above instructs most `man' programs to invoke tbl +'\" +'\" Separate paragraphs; not the same as PP which resets indent level. +.de SP +.if t .sp .5 +.if n .sp +.. +'\" +'\" Replacement em-dash for nroff (default is too short). +.ie n .ds m " - +.el .ds m \(em +'\" +'\" Placeholder macro for if longer nroff arrow is needed. +.ds RA \(-> +'\" +'\" Decimal point set slightly raised +.if t .ds d \v'-.15m'.\v'+.15m' +.if n .ds d . +'\" +'\" Enclosure macro for examples +.de EX +.SP +.nf +.ft CW +.. +.de EE +.ft R +.SP +.fi +.. +.TH j2k_dump 1 "Version 1.4.0" "j2k_dump" "dumps jpeg2000 files" +.P +.SH NAME +j2k_dump - +This program reads in a jpeg2000 image and dumps the contents to stdout. It is part of the OpenJPEG library. +.SP +Valid input image extensions are +.B .j2k, .jp2, .jpt +.SP +.SH SYNOPSIS +.P +.B j2k_dump -i \fRinfile.j2k +.P +.B j2k_dump -ImgDir \fRimages/ \fRDump all files in images/ +.P +.B j2k_dump -h \fRPrint help message and exit +.P +.SH OPTIONS +.TP +.B \-\^i "name" +(jpeg2000 input file name) +.TP +.B \-\^ImgDir "directory_name" +(directory containing jpeg2000 input files) +.P +'\".SH BUGS +.SH AUTHORS +Copyright (c) 20010, Mathieu Malaterre +.P +.SH "SEE ALSO" +image_to_j2k(1) j2k_to_image(1) diff --git a/contrib/menuetlibc/openjpeg/doc/j2k_to_image.1 b/contrib/menuetlibc/openjpeg/doc/j2k_to_image.1 new file mode 100644 index 0000000000..733a37dc5f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/j2k_to_image.1 @@ -0,0 +1,109 @@ +'\" t +'\" The line above instructs most `man' programs to invoke tbl +'\" +'\" Separate paragraphs; not the same as PP which resets indent level. +.de SP +.if t .sp .5 +.if n .sp +.. +'\" +'\" Replacement em-dash for nroff (default is too short). +.ie n .ds m " - +.el .ds m \(em +'\" +'\" Placeholder macro for if longer nroff arrow is needed. +.ds RA \(-> +'\" +'\" Decimal point set slightly raised +.if t .ds d \v'-.15m'.\v'+.15m' +.if n .ds d . +'\" +'\" Enclosure macro for examples +.de EX +.SP +.nf +.ft CW +.. +.de EE +.ft R +.SP +.fi +.. +.TH j2k_to_image 1 "Version 1.4.0" "j2k_to_image" "converts jpeg2000 files" +.P +.SH NAME +j2k_to_image - +This program reads in a jpeg2000 image and converts it to another +image type. It is part of the OpenJPEG library. +.SP +Valid input image extensions are +.B .j2k, .jp2, .j2c, .jpt +.SP +Valid output image extensions are +.B .bmp, .pgm, .pgx, .png, .pnm, .ppm, .raw, .tga, .tif \fR. For PNG resp. TIF it needs libpng resp. libtiff . +.SH SYNOPSIS +.P +.B j2k_to_image -i \fRinfile.j2k \fB-o \fRoutfile.png +.P +.B j2k_to_image -ImgDir \fRimages/ \fB-OutFor \fRbmp +.P +.B j2k_to_image -h \fRPrint help message and exit +.P +.R See JPWL OPTIONS for special options +.SH OPTIONS +.TP +.B \-\^i "name" +(jpeg2000 input file name) +.TP +.B \-\^l "n" +n is the maximum number of quality layers to decode. See LAYERS below) +.TP +.B \-\^o "name" +(output file name with extension) +.TP +.B \-\^r "n" +(n is the highest resolution level to be discarded. See REDUCTION below) +.TP +.B \-\^x "name" +(use name as index file and fill it) +.TP +.B \-\^ImgDir "directory_name" +(directory containing input files) +.TP +.B \-\^OutFor "ext" +(extension for output files) +.P +.SH JPWL OPTIONS +Options usable only if the library has been compiled with +.B -DUSE_JPWL +.TP +.B -W c\fR[=Nc] (Nc is the number of expected components in the codestream; default:3) +.TP +.B -W t\fR[=Nt] (Nt is the maximum number of tiles in the codestream; default:8192) +.TP +.B -W c\fR[=Nc]\fB, t\fR[=Nt] \fR(same as above) +.P +.SH REDUCTION +Set the number of highest resolution levels to be discarded. +The image resolution is effectively divided by 2 to the power of the number of discarded levels. The reduce factor is limited by the smallest total number of decomposition levels among tiles. +.SH TILES +Set the maximum number of quality layers to decode. If there are less quality layers than the specified number, all the quality layers are decoded. +.P +'\".SH BUGS +.SH AUTHORS +Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium +.br +Copyright (c) 2002-2007, Professor Benoit Macq +.br +Copyright (c) 2001-2003, David Janssens +.br +Copyright (c) 2002-2003, Yannick Verschueren +.br +Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe +.br +Copyright (c) 2005, Herve Drolon, FreeImage Team +.br +Copyright (c) 2006-2007, Parvatha Elangovan +.P +.SH "SEE ALSO" +image_to_j2k(1) j2k_dump(1) diff --git a/contrib/menuetlibc/openjpeg/doc/libopenjpeg.3 b/contrib/menuetlibc/openjpeg/doc/libopenjpeg.3 new file mode 100644 index 0000000000..071c1d54f8 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/libopenjpeg.3 @@ -0,0 +1,337 @@ +'\" t +'\" The line above instructs most `man' programs to invoke tbl +'\" +'\" Separate paragraphs; not the same as PP which resets indent level. +.de SP +.if t .sp .5 +.if n .sp +.. +'\" +'\" Replacement em-dash for nroff (default is too short). +.ie n .ds m " - +.el .ds m \(em +'\" +'\" Placeholder macro for if longer nroff arrow is needed. +.ds RA \(-> +'\" +'\" Decimal point set slightly raised +.if t .ds d \v'-.15m'.\v'+.15m' +.if n .ds d . +'\" +'\" Enclosure macro for examples +.de EX +.SP +.nf +.ft CW +.. +.de EE +.ft R +.SP +.fi +.. +.TH libopenjpeg 3 "Oct 2010" "Version 1.4.0" "Oct 2010" +.P +.SH NAME +libopenjpeg - +a library for reading and writing JPEG2000 image files. +.SP +.SH SYNOPSIS +.P +.B #include +.P +.SS CONVERSION FORMATS +.B PGX: imagetopgx() \fR/\fB pgxtoimage() +.P +.B PXM: imagetopnm() \fR/\fB pnmtoimage() +.P +.B BMP: imagetobmp() \fR/\fB bmptoimage() +.P +.B TIF: imagetotif() \fR/\fB tiftoimage() +.P +.B RAW: imagetoraw() \fR/\fB rawtoimage() +.P +.B TGA: imagetotga() \fR/\fB tgatoimage() +.P +.B PNG: imagetopng() \fR/\fB pngtoimage() +.P +.B YUV: imagetoyuv() \fR/\fB yuvtoimage() \fR(MJ2) +.P +.SS READ +.B opj_set_default_decoder_parameters(opj_dparameters_t *\fIparams\fB); +.P +.B opj_dinfo_t *opj_create_decompress(OPJ_CODEC_FORMAT \fIformat\fB); +.P +.B opj_event_mgr_t *opj_set_event_mgr(opj_common_ptr \fIinfo\fB, opj_event_mgr_t *\fIevent_mgr\fB, void *\fIcontext\fB); +.P +.B void opj_setup_decoder(opj_dinfo_t *\fIdinfo\fB, opj_dparameters_t * \fIparams\fB); +.P +.B opj_cio_t *opj_cio_open(opj_common_ptr \fIinfo\fB, unsigned char *\fIbuf\fB, int \fIbuf_len\fB); +.P +.B opj_image_t *opj_decode(opj_dinfo_t *\fIdinfo\fB, opj_cio_t *\fIcio\fB); +.P +.B void opj_cio_close(opj_cio_t *\fIcio\fB); +.P +.B void opj_destroy_decompress(opj_dinfo_t *\fIdinfo\fB); +.P +.B void opj_image_destroy(opj_image_t *\fIimage\fB); +.P +.SS WRITE +.B void opj_set_default_encoder_parameters(opj_cparameters_t *\fIparams\fB); +.P +/* +.B opj_image_t *FORMATtoimage(const char *\fIfname\fB, opj_cparameters_t *\fIparams\fB); +.P +*/ +.br +.B opj_cinfo_t* opj_create_compress(OPJ_CODEC_FORMAT \fIformat\fB); +.P +.B opj_event_mgr_t *opj_set_event_mgr(opj_common_ptr \fIinfo\fB, opj_event_mgr_t *\fIevent_mgr\fB, void *\fIcontext\fB); +.P +.B void opj_setup_encoder(opj_cinfo_t *\fIcinfo\fB, opj_cparameters_t *\fIparams\fB, opj_image_t *\fIimage\fB); +.P +.B opj_cio_t *opj_cio_open(opj_common_ptr \fIcinfo\fB, \fINULL\fB, \fI0\fB); +.P +.B bool opj_encode(opj_cinfo_t *\fIcinfo\fB, opj_cio_t *\fIcio\fB, opj_image_t *\fIimage\fB, char *\fIindex\fB); +.P +.B void opj_cio_close(opj_cio_t *\fIcio\fB); +.P +.B void opj_destroy_compress(opj_cinfo_t *\fIcinfo\fB); +.P +.B void opj_image_destroy(opj_image_t *\fIimage\fB); +.P +.SS GENERAL +.P +.B void opj_image_create(int \fInumcmpts\fB, opj_image_cmptparm_t *\fIcmptparms\fB, OPJ_COLOR_SPACE \fIclrspc\fB); +.P +.B int cio_tell(opj_cio_t *\fIcio\fB); +.P +.B void cio_seek(opj_cio_t *\fIcio\fB, int \fIpos\fB); +.P +.B opj_image_t *opj_decode_with_info(opj_dinfo_t *\fIdinfo\fB, opj_cio_t *\fIcio\fB, opj_codestream_info_t *\fIcstr_info\fB); +.P +.B bool opj_encode_with_info(opj_cinfo_t *\fIcinfo\fB, opj_cio_t *\fIcio\fB, opj_image_t *\fIimage\fB, opj_codestream_info_t *\fIcstr_info\fB); +.P +.B void opj_destroy_cstr_info(opj_codestream_info_t *\fIcstr_info\fB); +.P +.B const char *opj_version(\fIvoid\fB); +.P +.SH OPJ_CODEC_FORMAT +.P +.B CODEC_J2K\fR or \fBCODEC_JPT\fR or \fBCODEC_JP2 +.P +.SH OPJ_COLOR_SPACE +.P +.B CLRSPC_UNKNOWN\fR or \fBCLRSPC_UNSPECIFIED\fR or \fBCLRSPC_SRGB\fR or \fBCLRSPC_GRAY\fR or \fBCLRSPC_SYCC +.P +.SH DECOMPRESSION PARAMETERS +.p +typedef struct opj_dparameters +.br +{ + /* + Set the number of highest resolution levels to be discarded. + The image resolution is effectively divided by 2 to the power + of the number of discarded levels. + The reduce factor is limited by the smallest total number of + decomposition levels among tiles. + if != 0, then original dimension divided by 2^(reduce); + if == 0 or not used, image is decoded to the full resolution + */ + \fBint\fR cp_reduce; + /* + Set the maximum number of quality layers to decode. + If there are less quality layers than the specified number, + all the quality layers are decoded. + if != 0, then only the first "layer" layers are decoded; + if == 0 or not used, all the quality layers are decoded + */ + \fBint\fR cp_layer; + + /*command line encoder parameters (not used inside the library) */ + /* input file name */ + \fBchar\fR infile[OPJ_PATH_LEN]; + /* output file name */ + \fBchar\fR outfile[OPJ_PATH_LEN]; + /* input file format: see OPJ_CODEC_FORMAT */ + \fBint\fR decod_format; + /* output file format */ + \fBint\fR cod_format; + + /*JPWL decoding parameters */ + /* activates the JPWL correction capabilities */ + \fBbool\fR jpwl_correct; + /* expected number of components */ + \fBint\fR jpwl_exp_comps; + /* maximum number of tiles */ + \fBint\fR jpwl_max_tiles; + + /* + Specify whether the decoding should be done on the entire + codestream, or be limited to the main header + Limiting the decoding to the main header makes it possible + to extract the characteristics of the codestream + if == NO_LIMITATION, the entire codestream is decoded; + if == LIMIT_TO_MAIN_HEADER, only the main header is decoded; + */ + \fBOPJ_LIMIT_DECODING\fR cp_limit_decoding; +.br +} opj_dparameters_t; + +.SH COMPRESSION PARAMETERS +.P +typedef struct opj_cparameters +.br +{ + /* size of tile: tile_size_on = false (not in argument) + or tile_size_on = true (in argument) */ + \fBbool\fR tile_size_on; + /* XTOsiz */ + \fBint\fR cp_tx0; + /* YTOsiz */ + \fBint\fR cp_ty0; + /* XTsiz */ + \fBint\fR cp_tdx; + /* YTsiz */ + \fBint\fR cp_tdy; + /* allocation by rate/distortion */ + \fBint\fR cp_disto_alloc; + /* allocation by fixed layer */ + \fBint\fR cp_fixed_alloc; + /* add fixed_quality */ + \fBint\fR cp_fixed_quality; + /* fixed layer */ + \fBint *\fRcp_matrice; + /* comment for coding */ + \fBchar *\fRcp_comment; + /* coding style */ + \fBint\fR csty; + /* progression order: + PROG_UNKNOWN, LRCP(default), RLCP, RPCL, PCRL, CPRL */ + \fBOPJ_PROG_ORDER\fR prog_order; + /* progression order changes */ + \fBopj_poc_t\fR POC[32]; + /* number of progression order changes (POC), default: 0 */ + \fBint\fR numpocs; + /* number of layers */ + \fBint\fR tcp_numlayers; + /* rates of layers */ + \fBfloat\fR tcp_rates[100]; + /* different psnr for successive layers */ + \fBfloat\fR tcp_distoratio[100]; + /* number of resolutions */ + \fBint\fR numresolution; + /* initial code block width, default: 64 */ + \fBint\fR cblockw_init; + /* initial code block height, default: 64 */ + \fBint\fR cblockh_init; + /* mode switch (cblk_style) */ + /* 1 : use the irreversible DWT 9-7, + 0 : use lossless compression (default) */ + \fBint\fR irreversible; + /* region of interest: affected component in [0..3], + -1 means no ROI */ + \fBint\fR roi_compno; + /* region of interest: upshift value */ + \fBint\fR roi_shift; + /* number of precinct size specifications */ + \fBint\fR res_spec; + /* initial precinct width */ + \fBint\fR prcw_init[J2K_MAXRLVLS]; + /* initial precinct height */ + \fBint\fR prch_init[J2K_MAXRLVLS]; + + /*command line encoder parameters (not used inside the library) */ + /* input file name */ + \fBchar\fR infile[OPJ_PATH_LEN]; + /* output file name */ + \fBchar\fR outfile[OPJ_PATH_LEN]; + /* DEPRECATED. Index generation is now handeld with the + opj_encode_with_info() function. Set to NULL */ + \fBint\fR index_on; + /* DEPRECATED. Index generation is now handeld with the + opj_encode_with_info() function. Set to NULL */ + \fBchar\fR index[OPJ_PATH_LEN]; + /* subimage encoding: origin image offset in x direction */ + \fBint\fR image_offset_x0; + /* subimage encoding: origin image offset in y direction */ + \fBint\fR image_offset_y0; + /* subsampling value for dx */ + \fBint\fR subsampling_dx; + /* subsampling value for dy */ + \fBint\fR subsampling_dy; + /* input file format */ + \fBint\fR decod_format; + /* output file format: see OPJ_CODEC_FORMAT */ + \fBint\fR cod_format; + + /*JPWL encoding parameters */ + /* enables writing of EPC in MH, thus activating JPWL */ + \fBbool\fR jpwl_epc_on; + /* error protection method for MH (0,1,16,32,37-128) */ + \fBint\fR jpwl_hprot_MH; + /* tile number of header protection specification (>=0) */ + \fBint\fR jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; + /* error protection methods for TPHs (0,1,16,32,37-128) */ + \fBint\fR jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS]; + /* tile number of packet protection specification (>=0) */ + \fBint\fR jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS]; + /* packet number of packet protection specification (>=0) */ + \fBint\fR jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS]; + /* error protection methods for packets (0,1,16,32,37-128) */ + \fBint\fR jpwl_pprot[JPWL_MAX_NO_PACKSPECS]; + /* enables writing of ESD, (0=no/1/2 bytes) */ + \fBint\fR jpwl_sens_size; + /* sensitivity addressing size (0=auto/2/4 bytes) */ + \fBint\fR jpwl_sens_addr; + /* sensitivity range (0-3) */ + \fBint\fR jpwl_sens_range; + /* sensitivity method for MH (-1=no,0-7) */ + \fBint\fR jpwl_sens_MH; + /* tile number of sensitivity specification (>=0) */ + \fBint\fR jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS]; + /* sensitivity methods for TPHs (-1=no,0-7) */ + \fBint\fR jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS]; + + /* Digital Cinema compliance: OFF-not compliant, + CINEMA2K_24, CINEMA2K_48, CINEMA4K_24 */ + \fBOPJ_CINEMA_MODE\fR cp_cinema; + /* Maximum rate for each component. + If == 0, component size limitation is not considered */ + \fBint\fR max_comp_size; + /* Profile name*/ + \fBOPJ_RSIZ_CAPABILITIES\fR cp_rsiz; + /* Tile part generation*/ + \fBchar\fR tp_on; + /* Flag for Tile part generation*/ + \fBchar\fR tp_flag; + /* MCT (multiple component transform) */ + \fBchar\fR tcp_mct; +.br +} opj_cparameters_t; + + +'\".SH OPTIONS +'\".SH BUGS +.SH AUTHORS +Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + +Copyright (c) 2002-2007, Professor Benoit Macq + +Copyright (c) 2001-2003, David Janssens + +Copyright (c) 2002-2003, Yannick Verschueren + +Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + +Copyright (c) 2005, Herve Drolon, FreeImage Team + +Copyright (c) 2006-2007, Parvatha Elangovan + +.P +.SH "SEE ALSO" +\fBimage_to_j2k\fR(1) \fBj2k_to_image\fR(1) \fBj2k_dump\fR(1) + +\fBJPWL_image_to_j2k\fR(1) \fBJPWL_j2k_to_image\fR(1) + +\fBextract_j2k_from_mj2\fR(1) \fBwrap_j2k_in_mj2\fR(1) +\fBframes_to_mj2\fR(1) \fBmj2_to_frames\fR(1) diff --git a/contrib/menuetlibc/openjpeg/doc/man/man1/image_to_j2k.1 b/contrib/menuetlibc/openjpeg/doc/man/man1/image_to_j2k.1 new file mode 100644 index 0000000000..331af0eba3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/man/man1/image_to_j2k.1 @@ -0,0 +1,222 @@ +'\" t +'\" The line above instructs most `man' programs to invoke tbl +'\" +'\" Separate paragraphs; not the same as PP which resets indent level. +.de SP +.if t .sp .5 +.if n .sp +.. +'\" +'\" Replacement em-dash for nroff (default is too short). +.ie n .ds m " - +.el .ds m \(em +'\" +'\" Placeholder macro for if longer nroff arrow is needed. +.ds RA \(-> +'\" +'\" Decimal point set slightly raised +.if t .ds d \v'-.15m'.\v'+.15m' +.if n .ds d . +'\" +'\" Enclosure macro for examples +.de EX +.SP +.nf +.ft CW +.. +.de EE +.ft R +.SP +.fi +.. +.TH image_to_j2k 1 "Version 1.4.0" "image_to_j2k" "converts to jpeg2000 files" +.P +.SH NAME +image_to_j2k - +This program reads in an image of a certain type and converts it to a +jpeg2000 file. It is part of the OpenJPEG library. +.SP +Valid input image extensions are +.B .bmp, .pgm, .pgx, .png, .pnm, .ppm, .raw, .tga, .tif \fR. For PNG resp. TIF it needs libpng resp. libtiff . +.SP +Valid output image extensions are +.B .j2k, .jp2 +.SH SYNOPSIS +.P +.B image_to_j2k -i \fRinfile.bmp \fB-o \fRoutfile.j2k +.P +.B image_to_j2k -ImgDir \fRdirectory_name \fB-OutFor \fRjp2 +.P +.B image_to_j2k -h \fRPrint a help message and exit. +.P +.R See JPWL OPTIONS for special options +.SH OPTIONS +.TP +.B \-\^b " n,n" +(Size of code block (e.g. -b 32,32). Default: 64 x 64) +.TP +.B \-\^c " n" +(Size of precinct (e.g. -c 128,128). Default: 2^15 x 2^15) +.TP +.B \-\^cinema2K " fps" +Digital Cinema 2K profile compliant codestream. Valid \fBfps\fR values are 24 or 48. +.TP +.B \-\^cinema4K +Digital Cinema 4K profile compliant codestream. Does not need an fps: default is 24 fps. +.TP +.B \-\^d " X,Y" +(Offset of image origin (e.g. -d 150,300)) +.TP +.B \-\^h +Print a help message and exit. +.TP +.B \-\^i " name" +(input file name) +.TP +.B \-\^n " n" +(Number of resolutions. Default: 6) +.TP +.B \-\^o " name" +(output file name) +.TP +.B \-\^p " name" +Progression order. \fBname\fR can be one out of:LRCP, RLCP, RPCL, PCRL, CPRL. Default: LRCP. +.TP +.B \-\^q " n" +different psnr for successive layers +.br +.B Note: \fR(options -r and -q cannot be used together) +.TP +.B \-\^r " n" +different compression ratio(s) for successive layers. The rate specified for each quality level is the desired compression factor. +.br +.B Note: \fR(options -r and -q cannot be used together) +.TP +.B \-\^s " X,Y" +sub-sampling factor (e.g. -s 2,2). Default: No sub-sampling in x or y direction. +.br +.B Remark: \fRsub-sampling bigger than 2 can produce errors. +.TP +.B \-\^t " W,H" +(Size of tile (e.g. -t 512,512) ) +.TP +.B \-\^x " name" +(Create index file and fill it. Default: no index file) +.TP +.B \-\^EPH +(Write EPH marker after each header packet. Default:no EPH) +.TP +.B \-\^F " rawWidth,rawHeight,rawComp,rawBitDepth,s_or_u" +characteristics of the raw input image +.TP +.B \-\^I +(Use the irreversible DWT 9-7. Default: Reversible DWT 5-3) +.TP +.B \-\^ImgDir " directory_name" +(directory containing input files) +.TP +.B \-\^M " n" +mode switch with values: 1, 2, 4, 8, 16, 32. Default:No mode switch activated. +.br +\fIMeaning:\fR +.br +BYPASS(1) +.br +RESET(2) +.br +RESTART(4) +.br +VSC(8) +.br +ERTERM(16) +.br +SEGMARK(32) +.br +Values can be added: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38 +.TP +.B \-\^OutFor "ext" +(extension for output files) +.TP +.B \-\^POC "TtileNr=resolutionStart, componentStart, layerEnd, resolutionEnd, componentEnd, progressionOrder" +(see Examples) +.TP +.B \-\^ROI "c=n,U=n" +quantization indices upshifted for component c (0 or 1 or 2) with a value of U (>= 0 and <= 37) +.br +e.g. \fB-ROI c=0,U=25\fR +.TP +.B \-\^SOP +(Write SOP marker before each packet. Default: No SOP marker in the codestream.) +.TP +.B \-\^T "X,Y" +(Offset of the origin of the tiles (e.g. -T 100,75) ) +.TP +.B \-\^W +(see JPWL OPTIONS) +.P +.SH JPWL OPTIONS +Options usable only if the library has been compiled with \fB-DUSE_JPWL\fR +.P +.B -W h<=type>, s<=method>, a=, z=, g=, p<=type> +.P +.B h\fR selects the header error protection (EPB): \fBtype\fR can be + [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS] + if \fBtilepart\fR is absent, it is for main and tile headers + if \fBtilepart\fR is present, it applies from that tile + onwards, up to the next h<> spec, or to the last tilepart + in the codestream (max. 16 specs) +.P +.B p \fRselects the packet error protection (EEP/UEP with EPBs) + to be applied to raw data: \fBtype\fR can be + [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS] + if \fBtilepart:pack\fR is absent, it is from tile 0, packet 0 + if \fBtilepart:pack\fR is present, it applies from that tile + and that packet onwards, up to the next packet spec + or to the last packet in the last tilepart in the stream + (max. 16 specs) +.P +.B s \fRenables sensitivity data insertion (ESD): \fBmethod\fR can be + [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR + 4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED] + if \fBtilepart\fR is absent, it is for main header only + if \fBtilepart\fR is present, it applies from that tile + onwards, up to the next s<> spec, or to the last tilepart + in the codestream (max. 16 specs) +.P +.B g \fRdetermines the addressing mode: \fBrange\fR can be + [0=PACKET 1=BYTE RANGE 2=PACKET RANGE] +.P +.B a \fRdetermines the size of data addressing: \fBaddr\fR can be + 2/4 bytes (small/large codestreams). If not set, auto-mode +.P +.B z \fRdetermines the size of sensitivity values: \fBsize\fR can be + 1/2 bytes, for the transformed pseudo-floating point value +.P +.SH EXAMPLES +.P +.B image_to_j2k -i \fRfile.bmp \fB-o \fRfile.j2k \fB-r \fR20,10,1 (compress 20x, then 10x, then lossless). +.P +.B image_to_j2k -i \fRfile.ppm \fB-o \fRfile.j2k \fB-q \fR30,40,50 +.P +.B image_to_j2k -i \fRfile.pgx \fB-o \fRfile.j2k \fB-POC \fRT1=0,0,1,5,3,CPRL +.P +.B image_to_j2k -i \fRlena.raw \fB-o \fRlena.j2k \fB-F \fR512,512,3,8,u +.P +.SH AUTHORS +Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium +.br +Copyright (c) 2002-2007, Professor Benoit Macq +.br +Copyright (c) 2001-2003, David Janssens +.br +Copyright (c) 2002-2003, Yannick Verschueren +.br +Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe +.br +Copyright (c) 2005, Herve Drolon, FreeImage Team +.br +Copyright (c) 2006-2007, Parvatha Elangovan +.P +.SH "SEE ALSO" +j2k_to_image(1) j2k_dump(1) + diff --git a/contrib/menuetlibc/openjpeg/doc/man/man1/j2k_dump.1 b/contrib/menuetlibc/openjpeg/doc/man/man1/j2k_dump.1 new file mode 100644 index 0000000000..c45e9f4943 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/man/man1/j2k_dump.1 @@ -0,0 +1,62 @@ +'\" t +'\" The line above instructs most `man' programs to invoke tbl +'\" +'\" Separate paragraphs; not the same as PP which resets indent level. +.de SP +.if t .sp .5 +.if n .sp +.. +'\" +'\" Replacement em-dash for nroff (default is too short). +.ie n .ds m " - +.el .ds m \(em +'\" +'\" Placeholder macro for if longer nroff arrow is needed. +.ds RA \(-> +'\" +'\" Decimal point set slightly raised +.if t .ds d \v'-.15m'.\v'+.15m' +.if n .ds d . +'\" +'\" Enclosure macro for examples +.de EX +.SP +.nf +.ft CW +.. +.de EE +.ft R +.SP +.fi +.. +.TH j2k_dump 1 "Version 1.4.0" "j2k_dump" "dumps jpeg2000 files" +.P +.SH NAME +j2k_dump - +This program reads in a jpeg2000 image and dumps the contents to stdout. It is part of the OpenJPEG library. +.SP +Valid input image extensions are +.B .j2k, .jp2, .jpt +.SP +.SH SYNOPSIS +.P +.B j2k_dump -i \fRinfile.j2k +.P +.B j2k_dump -ImgDir \fRimages/ \fRDump all files in images/ +.P +.B j2k_dump -h \fRPrint help message and exit +.P +.SH OPTIONS +.TP +.B \-\^i "name" +(jpeg2000 input file name) +.TP +.B \-\^ImgDir "directory_name" +(directory containing jpeg2000 input files) +.P +'\".SH BUGS +.SH AUTHORS +Copyright (c) 20010, Mathieu Malaterre +.P +.SH "SEE ALSO" +image_to_j2k(1) j2k_to_image(1) diff --git a/contrib/menuetlibc/openjpeg/doc/man/man1/j2k_to_image.1 b/contrib/menuetlibc/openjpeg/doc/man/man1/j2k_to_image.1 new file mode 100644 index 0000000000..733a37dc5f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/man/man1/j2k_to_image.1 @@ -0,0 +1,109 @@ +'\" t +'\" The line above instructs most `man' programs to invoke tbl +'\" +'\" Separate paragraphs; not the same as PP which resets indent level. +.de SP +.if t .sp .5 +.if n .sp +.. +'\" +'\" Replacement em-dash for nroff (default is too short). +.ie n .ds m " - +.el .ds m \(em +'\" +'\" Placeholder macro for if longer nroff arrow is needed. +.ds RA \(-> +'\" +'\" Decimal point set slightly raised +.if t .ds d \v'-.15m'.\v'+.15m' +.if n .ds d . +'\" +'\" Enclosure macro for examples +.de EX +.SP +.nf +.ft CW +.. +.de EE +.ft R +.SP +.fi +.. +.TH j2k_to_image 1 "Version 1.4.0" "j2k_to_image" "converts jpeg2000 files" +.P +.SH NAME +j2k_to_image - +This program reads in a jpeg2000 image and converts it to another +image type. It is part of the OpenJPEG library. +.SP +Valid input image extensions are +.B .j2k, .jp2, .j2c, .jpt +.SP +Valid output image extensions are +.B .bmp, .pgm, .pgx, .png, .pnm, .ppm, .raw, .tga, .tif \fR. For PNG resp. TIF it needs libpng resp. libtiff . +.SH SYNOPSIS +.P +.B j2k_to_image -i \fRinfile.j2k \fB-o \fRoutfile.png +.P +.B j2k_to_image -ImgDir \fRimages/ \fB-OutFor \fRbmp +.P +.B j2k_to_image -h \fRPrint help message and exit +.P +.R See JPWL OPTIONS for special options +.SH OPTIONS +.TP +.B \-\^i "name" +(jpeg2000 input file name) +.TP +.B \-\^l "n" +n is the maximum number of quality layers to decode. See LAYERS below) +.TP +.B \-\^o "name" +(output file name with extension) +.TP +.B \-\^r "n" +(n is the highest resolution level to be discarded. See REDUCTION below) +.TP +.B \-\^x "name" +(use name as index file and fill it) +.TP +.B \-\^ImgDir "directory_name" +(directory containing input files) +.TP +.B \-\^OutFor "ext" +(extension for output files) +.P +.SH JPWL OPTIONS +Options usable only if the library has been compiled with +.B -DUSE_JPWL +.TP +.B -W c\fR[=Nc] (Nc is the number of expected components in the codestream; default:3) +.TP +.B -W t\fR[=Nt] (Nt is the maximum number of tiles in the codestream; default:8192) +.TP +.B -W c\fR[=Nc]\fB, t\fR[=Nt] \fR(same as above) +.P +.SH REDUCTION +Set the number of highest resolution levels to be discarded. +The image resolution is effectively divided by 2 to the power of the number of discarded levels. The reduce factor is limited by the smallest total number of decomposition levels among tiles. +.SH TILES +Set the maximum number of quality layers to decode. If there are less quality layers than the specified number, all the quality layers are decoded. +.P +'\".SH BUGS +.SH AUTHORS +Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium +.br +Copyright (c) 2002-2007, Professor Benoit Macq +.br +Copyright (c) 2001-2003, David Janssens +.br +Copyright (c) 2002-2003, Yannick Verschueren +.br +Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe +.br +Copyright (c) 2005, Herve Drolon, FreeImage Team +.br +Copyright (c) 2006-2007, Parvatha Elangovan +.P +.SH "SEE ALSO" +image_to_j2k(1) j2k_dump(1) diff --git a/contrib/menuetlibc/openjpeg/doc/man/man3/libopenjpeg.3 b/contrib/menuetlibc/openjpeg/doc/man/man3/libopenjpeg.3 new file mode 100644 index 0000000000..071c1d54f8 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/doc/man/man3/libopenjpeg.3 @@ -0,0 +1,337 @@ +'\" t +'\" The line above instructs most `man' programs to invoke tbl +'\" +'\" Separate paragraphs; not the same as PP which resets indent level. +.de SP +.if t .sp .5 +.if n .sp +.. +'\" +'\" Replacement em-dash for nroff (default is too short). +.ie n .ds m " - +.el .ds m \(em +'\" +'\" Placeholder macro for if longer nroff arrow is needed. +.ds RA \(-> +'\" +'\" Decimal point set slightly raised +.if t .ds d \v'-.15m'.\v'+.15m' +.if n .ds d . +'\" +'\" Enclosure macro for examples +.de EX +.SP +.nf +.ft CW +.. +.de EE +.ft R +.SP +.fi +.. +.TH libopenjpeg 3 "Oct 2010" "Version 1.4.0" "Oct 2010" +.P +.SH NAME +libopenjpeg - +a library for reading and writing JPEG2000 image files. +.SP +.SH SYNOPSIS +.P +.B #include +.P +.SS CONVERSION FORMATS +.B PGX: imagetopgx() \fR/\fB pgxtoimage() +.P +.B PXM: imagetopnm() \fR/\fB pnmtoimage() +.P +.B BMP: imagetobmp() \fR/\fB bmptoimage() +.P +.B TIF: imagetotif() \fR/\fB tiftoimage() +.P +.B RAW: imagetoraw() \fR/\fB rawtoimage() +.P +.B TGA: imagetotga() \fR/\fB tgatoimage() +.P +.B PNG: imagetopng() \fR/\fB pngtoimage() +.P +.B YUV: imagetoyuv() \fR/\fB yuvtoimage() \fR(MJ2) +.P +.SS READ +.B opj_set_default_decoder_parameters(opj_dparameters_t *\fIparams\fB); +.P +.B opj_dinfo_t *opj_create_decompress(OPJ_CODEC_FORMAT \fIformat\fB); +.P +.B opj_event_mgr_t *opj_set_event_mgr(opj_common_ptr \fIinfo\fB, opj_event_mgr_t *\fIevent_mgr\fB, void *\fIcontext\fB); +.P +.B void opj_setup_decoder(opj_dinfo_t *\fIdinfo\fB, opj_dparameters_t * \fIparams\fB); +.P +.B opj_cio_t *opj_cio_open(opj_common_ptr \fIinfo\fB, unsigned char *\fIbuf\fB, int \fIbuf_len\fB); +.P +.B opj_image_t *opj_decode(opj_dinfo_t *\fIdinfo\fB, opj_cio_t *\fIcio\fB); +.P +.B void opj_cio_close(opj_cio_t *\fIcio\fB); +.P +.B void opj_destroy_decompress(opj_dinfo_t *\fIdinfo\fB); +.P +.B void opj_image_destroy(opj_image_t *\fIimage\fB); +.P +.SS WRITE +.B void opj_set_default_encoder_parameters(opj_cparameters_t *\fIparams\fB); +.P +/* +.B opj_image_t *FORMATtoimage(const char *\fIfname\fB, opj_cparameters_t *\fIparams\fB); +.P +*/ +.br +.B opj_cinfo_t* opj_create_compress(OPJ_CODEC_FORMAT \fIformat\fB); +.P +.B opj_event_mgr_t *opj_set_event_mgr(opj_common_ptr \fIinfo\fB, opj_event_mgr_t *\fIevent_mgr\fB, void *\fIcontext\fB); +.P +.B void opj_setup_encoder(opj_cinfo_t *\fIcinfo\fB, opj_cparameters_t *\fIparams\fB, opj_image_t *\fIimage\fB); +.P +.B opj_cio_t *opj_cio_open(opj_common_ptr \fIcinfo\fB, \fINULL\fB, \fI0\fB); +.P +.B bool opj_encode(opj_cinfo_t *\fIcinfo\fB, opj_cio_t *\fIcio\fB, opj_image_t *\fIimage\fB, char *\fIindex\fB); +.P +.B void opj_cio_close(opj_cio_t *\fIcio\fB); +.P +.B void opj_destroy_compress(opj_cinfo_t *\fIcinfo\fB); +.P +.B void opj_image_destroy(opj_image_t *\fIimage\fB); +.P +.SS GENERAL +.P +.B void opj_image_create(int \fInumcmpts\fB, opj_image_cmptparm_t *\fIcmptparms\fB, OPJ_COLOR_SPACE \fIclrspc\fB); +.P +.B int cio_tell(opj_cio_t *\fIcio\fB); +.P +.B void cio_seek(opj_cio_t *\fIcio\fB, int \fIpos\fB); +.P +.B opj_image_t *opj_decode_with_info(opj_dinfo_t *\fIdinfo\fB, opj_cio_t *\fIcio\fB, opj_codestream_info_t *\fIcstr_info\fB); +.P +.B bool opj_encode_with_info(opj_cinfo_t *\fIcinfo\fB, opj_cio_t *\fIcio\fB, opj_image_t *\fIimage\fB, opj_codestream_info_t *\fIcstr_info\fB); +.P +.B void opj_destroy_cstr_info(opj_codestream_info_t *\fIcstr_info\fB); +.P +.B const char *opj_version(\fIvoid\fB); +.P +.SH OPJ_CODEC_FORMAT +.P +.B CODEC_J2K\fR or \fBCODEC_JPT\fR or \fBCODEC_JP2 +.P +.SH OPJ_COLOR_SPACE +.P +.B CLRSPC_UNKNOWN\fR or \fBCLRSPC_UNSPECIFIED\fR or \fBCLRSPC_SRGB\fR or \fBCLRSPC_GRAY\fR or \fBCLRSPC_SYCC +.P +.SH DECOMPRESSION PARAMETERS +.p +typedef struct opj_dparameters +.br +{ + /* + Set the number of highest resolution levels to be discarded. + The image resolution is effectively divided by 2 to the power + of the number of discarded levels. + The reduce factor is limited by the smallest total number of + decomposition levels among tiles. + if != 0, then original dimension divided by 2^(reduce); + if == 0 or not used, image is decoded to the full resolution + */ + \fBint\fR cp_reduce; + /* + Set the maximum number of quality layers to decode. + If there are less quality layers than the specified number, + all the quality layers are decoded. + if != 0, then only the first "layer" layers are decoded; + if == 0 or not used, all the quality layers are decoded + */ + \fBint\fR cp_layer; + + /*command line encoder parameters (not used inside the library) */ + /* input file name */ + \fBchar\fR infile[OPJ_PATH_LEN]; + /* output file name */ + \fBchar\fR outfile[OPJ_PATH_LEN]; + /* input file format: see OPJ_CODEC_FORMAT */ + \fBint\fR decod_format; + /* output file format */ + \fBint\fR cod_format; + + /*JPWL decoding parameters */ + /* activates the JPWL correction capabilities */ + \fBbool\fR jpwl_correct; + /* expected number of components */ + \fBint\fR jpwl_exp_comps; + /* maximum number of tiles */ + \fBint\fR jpwl_max_tiles; + + /* + Specify whether the decoding should be done on the entire + codestream, or be limited to the main header + Limiting the decoding to the main header makes it possible + to extract the characteristics of the codestream + if == NO_LIMITATION, the entire codestream is decoded; + if == LIMIT_TO_MAIN_HEADER, only the main header is decoded; + */ + \fBOPJ_LIMIT_DECODING\fR cp_limit_decoding; +.br +} opj_dparameters_t; + +.SH COMPRESSION PARAMETERS +.P +typedef struct opj_cparameters +.br +{ + /* size of tile: tile_size_on = false (not in argument) + or tile_size_on = true (in argument) */ + \fBbool\fR tile_size_on; + /* XTOsiz */ + \fBint\fR cp_tx0; + /* YTOsiz */ + \fBint\fR cp_ty0; + /* XTsiz */ + \fBint\fR cp_tdx; + /* YTsiz */ + \fBint\fR cp_tdy; + /* allocation by rate/distortion */ + \fBint\fR cp_disto_alloc; + /* allocation by fixed layer */ + \fBint\fR cp_fixed_alloc; + /* add fixed_quality */ + \fBint\fR cp_fixed_quality; + /* fixed layer */ + \fBint *\fRcp_matrice; + /* comment for coding */ + \fBchar *\fRcp_comment; + /* coding style */ + \fBint\fR csty; + /* progression order: + PROG_UNKNOWN, LRCP(default), RLCP, RPCL, PCRL, CPRL */ + \fBOPJ_PROG_ORDER\fR prog_order; + /* progression order changes */ + \fBopj_poc_t\fR POC[32]; + /* number of progression order changes (POC), default: 0 */ + \fBint\fR numpocs; + /* number of layers */ + \fBint\fR tcp_numlayers; + /* rates of layers */ + \fBfloat\fR tcp_rates[100]; + /* different psnr for successive layers */ + \fBfloat\fR tcp_distoratio[100]; + /* number of resolutions */ + \fBint\fR numresolution; + /* initial code block width, default: 64 */ + \fBint\fR cblockw_init; + /* initial code block height, default: 64 */ + \fBint\fR cblockh_init; + /* mode switch (cblk_style) */ + /* 1 : use the irreversible DWT 9-7, + 0 : use lossless compression (default) */ + \fBint\fR irreversible; + /* region of interest: affected component in [0..3], + -1 means no ROI */ + \fBint\fR roi_compno; + /* region of interest: upshift value */ + \fBint\fR roi_shift; + /* number of precinct size specifications */ + \fBint\fR res_spec; + /* initial precinct width */ + \fBint\fR prcw_init[J2K_MAXRLVLS]; + /* initial precinct height */ + \fBint\fR prch_init[J2K_MAXRLVLS]; + + /*command line encoder parameters (not used inside the library) */ + /* input file name */ + \fBchar\fR infile[OPJ_PATH_LEN]; + /* output file name */ + \fBchar\fR outfile[OPJ_PATH_LEN]; + /* DEPRECATED. Index generation is now handeld with the + opj_encode_with_info() function. Set to NULL */ + \fBint\fR index_on; + /* DEPRECATED. Index generation is now handeld with the + opj_encode_with_info() function. Set to NULL */ + \fBchar\fR index[OPJ_PATH_LEN]; + /* subimage encoding: origin image offset in x direction */ + \fBint\fR image_offset_x0; + /* subimage encoding: origin image offset in y direction */ + \fBint\fR image_offset_y0; + /* subsampling value for dx */ + \fBint\fR subsampling_dx; + /* subsampling value for dy */ + \fBint\fR subsampling_dy; + /* input file format */ + \fBint\fR decod_format; + /* output file format: see OPJ_CODEC_FORMAT */ + \fBint\fR cod_format; + + /*JPWL encoding parameters */ + /* enables writing of EPC in MH, thus activating JPWL */ + \fBbool\fR jpwl_epc_on; + /* error protection method for MH (0,1,16,32,37-128) */ + \fBint\fR jpwl_hprot_MH; + /* tile number of header protection specification (>=0) */ + \fBint\fR jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; + /* error protection methods for TPHs (0,1,16,32,37-128) */ + \fBint\fR jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS]; + /* tile number of packet protection specification (>=0) */ + \fBint\fR jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS]; + /* packet number of packet protection specification (>=0) */ + \fBint\fR jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS]; + /* error protection methods for packets (0,1,16,32,37-128) */ + \fBint\fR jpwl_pprot[JPWL_MAX_NO_PACKSPECS]; + /* enables writing of ESD, (0=no/1/2 bytes) */ + \fBint\fR jpwl_sens_size; + /* sensitivity addressing size (0=auto/2/4 bytes) */ + \fBint\fR jpwl_sens_addr; + /* sensitivity range (0-3) */ + \fBint\fR jpwl_sens_range; + /* sensitivity method for MH (-1=no,0-7) */ + \fBint\fR jpwl_sens_MH; + /* tile number of sensitivity specification (>=0) */ + \fBint\fR jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS]; + /* sensitivity methods for TPHs (-1=no,0-7) */ + \fBint\fR jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS]; + + /* Digital Cinema compliance: OFF-not compliant, + CINEMA2K_24, CINEMA2K_48, CINEMA4K_24 */ + \fBOPJ_CINEMA_MODE\fR cp_cinema; + /* Maximum rate for each component. + If == 0, component size limitation is not considered */ + \fBint\fR max_comp_size; + /* Profile name*/ + \fBOPJ_RSIZ_CAPABILITIES\fR cp_rsiz; + /* Tile part generation*/ + \fBchar\fR tp_on; + /* Flag for Tile part generation*/ + \fBchar\fR tp_flag; + /* MCT (multiple component transform) */ + \fBchar\fR tcp_mct; +.br +} opj_cparameters_t; + + +'\".SH OPTIONS +'\".SH BUGS +.SH AUTHORS +Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + +Copyright (c) 2002-2007, Professor Benoit Macq + +Copyright (c) 2001-2003, David Janssens + +Copyright (c) 2002-2003, Yannick Verschueren + +Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + +Copyright (c) 2005, Herve Drolon, FreeImage Team + +Copyright (c) 2006-2007, Parvatha Elangovan + +.P +.SH "SEE ALSO" +\fBimage_to_j2k\fR(1) \fBj2k_to_image\fR(1) \fBj2k_dump\fR(1) + +\fBJPWL_image_to_j2k\fR(1) \fBJPWL_j2k_to_image\fR(1) + +\fBextract_j2k_from_mj2\fR(1) \fBwrap_j2k_in_mj2\fR(1) +\fBframes_to_mj2\fR(1) \fBmj2_to_frames\fR(1) diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/CMakeLists.txt b/contrib/menuetlibc/openjpeg/indexer_JPIP/CMakeLists.txt new file mode 100644 index 0000000000..4dbb95b069 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/CMakeLists.txt @@ -0,0 +1,5 @@ +# index_create + +ADD_EXECUTABLE(index_create +bio.c cio.c int.c pi.c t2.c tgt.c tcd.c index_create.c jpip.c jp2.c +) diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/Makefile b/contrib/menuetlibc/openjpeg/indexer_JPIP/Makefile new file mode 100644 index 0000000000..40c049ea1b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/Makefile @@ -0,0 +1,23 @@ +CC = gcc + +LDFLAGS = -lm +CFLAGS = -Wall + +all: index_create + + +bio.o : bio.c bio.h +cio.o : cio.c cio.h +int.o : int.c +pi.o : pi.c pi.h int.h +index_create.o : index_create.c j2k.h cio.h tcd.h int.h +t2.o : t2.c t2.h tcd.h bio.h j2k.h pi.h tgt.h int.h cio.h +tgt.o : tgt.c bio.h tgt.h +tcd.o : tcd.c tcd.h t2.h int.h +jpip.o : jpip.c j2k.h cio.h tcd.h int.h +jp2.o : jp2.c j2k.h cio.h tcd.h int.h + +index_create : bio.o cio.o int.o pi.o t2.o tgt.o tcd.o index_create.o jpip.o jp2.o + +clean: + rm -rf *.o *.*~ *~ core.* diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/bio.c b/contrib/menuetlibc/openjpeg/indexer_JPIP/bio.c new file mode 100644 index 0000000000..2c989e5614 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/bio.c @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "bio.h" +#include + +static unsigned char *bio_start, *bio_end, *bio_bp; +static unsigned int bio_buf; +static int bio_ct; + +extern jmp_buf j2k_error; + +/// +/// Number of bytes written. +/// +int bio_numbytes() { + return bio_bp-bio_start; +} + +/// +/// Init decoder. +/// +/// Input buffer +/// Input buffer length +void bio_init_dec(unsigned char *bp, int len) { + bio_start=bp; + bio_end=bp+len; + bio_bp=bp; + bio_buf=0; + bio_ct=0; +} + +int bio_byteout() +{ + bio_buf = (bio_buf << 8) & 0xffff; + bio_ct = bio_buf == 0xff00 ? 7 : 8; + if (bio_bp >= bio_end) + return 1; + *bio_bp++ = bio_buf >> 8; + return 0; +} + +/// +/// Read byte. +/// +int bio_bytein() { + bio_buf=(bio_buf<<8)&0xffff; + bio_ct=bio_buf==0xff00?7:8; + if (bio_bp>=bio_end) return 1; //longjmp(j2k_error, 1); + bio_buf|=*bio_bp++; + return 0; +} + +/// +/// Read bit. +/// +int bio_getbit() { + if (bio_ct==0) { + bio_bytein(); + } + bio_ct--; + return (bio_buf>>bio_ct)&1; +} + +/// +/// Read bits. +/// +/// Number of bits to read +int bio_read(int n) { + int i, v; + v=0; + for (i=n-1; i>=0; i--) { + v+=bio_getbit()< +/// Flush bits. +/// +int bio_flush() { + bio_ct=0; + bio_byteout(); + if (bio_ct==7) { + bio_ct=0; + if ( bio_byteout()) return 1;; + } + return 0; +} + +/// +/// +int bio_inalign() { + bio_ct=0; + if ((bio_buf&0xff)==0xff) { + if( bio_bytein()) return 1; + bio_ct=0; + } + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/bio.h b/contrib/menuetlibc/openjpeg/indexer_JPIP/bio.h new file mode 100644 index 0000000000..eea6cff0a1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/bio.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003-2004, Yannick Verschueren + * Copyright (c) 2003-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __BIO_H +#define __BIO_H + +int bio_numbytes(); +void bio_init_dec(unsigned char *bp, int len); +int bio_read(int n); +int bio_flush(); +int bio_inalign(); + +#endif diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/cio.c b/contrib/menuetlibc/openjpeg/indexer_JPIP/cio.c new file mode 100644 index 0000000000..29f160ee16 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/cio.c @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "cio.h" +#include + +static unsigned char *cio_start, *cio_end, *cio_bp; + +extern jmp_buf j2k_error; + +/// +/// Number of bytes written. +/// +int cio_numbytes() { + return cio_bp-cio_start; +} + +/// +/// Get position in byte stream. +/// +int cio_tell() { + return cio_bp-cio_start; +} + +/// +/// Set position in byte stream. +/// +void cio_seek(int pos) { + cio_bp=cio_start+pos; +} + +/// +/// Number of bytes left before the end of the stream. +/// +int cio_numbytesleft() { + return cio_end-cio_bp; +} + +/// +/// Get pointer to the current position in the stream. +/// +unsigned char *cio_getbp() { + return cio_bp; +} + +/// +/// Initialize byte IO. +/// +void cio_init(unsigned char *bp, int len) { + cio_start=bp; + cio_end=bp+len; + cio_bp=bp; +} + +/// +/// Write a byte. +/// +void cio_byteout(unsigned char v) { + if (cio_bp>=cio_end) longjmp(j2k_error, 1); + *cio_bp++=v; + +} + +/// +/// Read a byte. +/// +unsigned char cio_bytein() { + if (cio_bp>=cio_end) longjmp(j2k_error, 1); + return *cio_bp++; +} + +/// +/// Write a byte. +/// +//void cio_write(unsigned int v, int n) { +void cio_write(long long v, int n) { + int i; + for (i=n-1; i>=0; i--) + { + cio_byteout((unsigned char)((v>>(i<<3))&0xff)); + } +} + +/// +/// Read some bytes. +/// +/* unsigned int cio_read(int n) { */ +long long cio_read(int n) { + int i; + /*unsigned int v;*/ + long long v; + v=0; + for (i=n-1; i>=0; i--) { + v+=cio_bytein()<<(i<<3); + } + return v; +} + +/// +/// Write some bytes. +/// +void cio_skip(int n) { + cio_bp+=n; +} diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/cio.h b/contrib/menuetlibc/openjpeg/indexer_JPIP/cio.h new file mode 100644 index 0000000000..3e29789760 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/cio.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003-2004, Yannick Verschueren + * Copyright (c) 2003-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __CIO_H +#define __CIO_H + +int cio_tell(); +void cio_seek(int pos); +int cio_numbytes(); +int cio_numbytesleft(); +unsigned char *cio_getbp(); +void cio_init(unsigned char *bp, int len); +/* void cio_write(unsigned int v, int n); */ +void cio_write(long long v, int n); +/* unsigned int cio_read(int n); */ +long long cio_read(int n); +void cio_skip(int n); + +#endif diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/fix.c b/contrib/menuetlibc/openjpeg/indexer_JPIP/fix.c new file mode 100644 index 0000000000..6bf08c6295 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/fix.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "fix.h" + +#ifdef _WIN32 +#include + +#define int64 __int64 +#else +#define int64 long long +#endif /* _WIN32 */ + +/// +/// Multiply two fixed-precision rational numbers. +/// +int fix_mul(int a, int b) { + return (int)((int64)a*(int64)b>>13); +} diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/fix.h b/contrib/menuetlibc/openjpeg/indexer_JPIP/fix.h new file mode 100644 index 0000000000..4b6e1b548e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/fix.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __FIX_H +#define __FIX_H + +int fix_mul(int a, int b); + +#endif diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/index_create.c b/contrib/menuetlibc/openjpeg/indexer_JPIP/index_create.c new file mode 100644 index 0000000000..518e70f459 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/index_create.c @@ -0,0 +1,1219 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003-2004, Yannick Verschueren + * Copyright (c) 2003-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + + +#include +#include +#include +#include +#include + +#include "j2k.h" +#include "cio.h" +#include "tcd.h" +#include "int.h" +#include "jpip.h" +#include "jp2.h" + +#define J2K_MS_SOC 0xff4f +#define J2K_MS_SOT 0xff90 +#define J2K_MS_SOD 0xff93 +#define J2K_MS_EOC 0xffd9 +#define J2K_MS_SIZ 0xff51 +#define J2K_MS_COD 0xff52 +#define J2K_MS_COC 0xff53 +#define J2K_MS_RGN 0xff5e +#define J2K_MS_QCD 0xff5c +#define J2K_MS_QCC 0xff5d +#define J2K_MS_POC 0xff5f +#define J2K_MS_TLM 0xff55 +#define J2K_MS_PLM 0xff57 +#define J2K_MS_PLT 0xff58 +#define J2K_MS_PPM 0xff60 +#define J2K_MS_PPT 0xff61 +#define J2K_MS_SOP 0xff91 +#define J2K_MS_EPH 0xff92 +#define J2K_MS_CRG 0xff63 +#define J2K_MS_COM 0xff64 + +#define J2K_STATE_MHSOC 0x0001 +#define J2K_STATE_MHSIZ 0x0002 +#define J2K_STATE_MH 0x0004 +#define J2K_STATE_TPHSOT 0x0008 +#define J2K_STATE_TPH 0x0010 +#define J2K_STATE_MT 0x0020 + +#define START_NB 5 +#define INCREMENT 5 + +jmp_buf j2k_error; + +static int j2k_state; +static int j2k_curtileno; +static j2k_tcp_t j2k_default_tcp; +static unsigned char *j2k_eot; + +static j2k_image_t *j2k_img; +static j2k_cp_t *j2k_cp; + +static unsigned char **j2k_tile_data; +static int *j2k_tile_len; + +static info_image_t img; + + +void j2k_clean() { + int tileno = 0; + int compno=0, resno=0, precno=0; + + tcd_free(j2k_img, j2k_cp); + for (tileno = 0; tileno < j2k_cp->tw * j2k_cp->th; tileno++) { + info_tile_t *tile_Idx = &img.tile[tileno]; + + for (compno = 0; compno < img.Comp; compno++) + { + info_compo_t *compo_Idx = &tile_Idx->compo[compno]; + for(resno = 0; resno < img.Decomposition + 1; resno++) + { + info_reso_t *reso_Idx = &compo_Idx->reso[resno]; + for (precno = 0; precno < img.tile[tileno].pw * img.tile[tileno].ph; precno++) + { + info_prec_t *prec_Idx = &reso_Idx->prec[precno]; + free(prec_Idx->layer); + } + free(reso_Idx->prec); + } + free(compo_Idx->reso); + } + free(tile_Idx->compo); + free(tile_Idx->marker); + free(tile_Idx->tile_parts); + free(tile_Idx->marker_mul.COC); + free(tile_Idx->marker_mul.RGN); + free(tile_Idx->marker_mul.QCC); + free(tile_Idx->marker_mul.PLT); + free(tile_Idx->marker_mul.PPT); + free(tile_Idx->marker_mul.COM); +} + free(img.tile); + free(img.marker); + free(img.marker_mul.COC); + free(img.marker_mul.RGN); + free(img.marker_mul.QCC); + free(img.marker_mul.PLM); + free(img.marker_mul.PPM); + free(img.marker_mul.COM); +} + + + +void j2k_read_soc() { + j2k_state=J2K_STATE_MHSIZ; +} + + + +void j2k_read_siz() { + int len, i; + info_tile_t *tile; + + len = cio_read(2); + + /* [MHIX BOX] */ + img.marker[img.num_marker].type = J2K_MS_SIZ; + img.marker[img.num_marker].start_pos = cio_tell()-2; + img.marker[img.num_marker].len = len; + img.num_marker++; + /* [MHIX BOX] */ + + cio_read(2); /* Rsiz (capabilities) */ + j2k_img->x1 = cio_read(4); /* Xsiz */ + j2k_img->y1 = cio_read(4); /* Ysiz */ + j2k_img->x0 = cio_read(4); /* X0siz */ + j2k_img->y0 = cio_read(4); /* Y0siz */ + j2k_cp->tdx = cio_read(4); /* XTsiz */ + j2k_cp->tdy = cio_read(4); /* YTsiz */ + j2k_cp->tx0 = cio_read(4); /* XT0siz */ + j2k_cp->ty0 = cio_read(4); /* YTOsiz */ + + j2k_img->numcomps = cio_read(2); /* Csiz */ + j2k_img->comps = (j2k_comp_t*)malloc(j2k_img->numcomps * sizeof(j2k_comp_t)); + for (i = 0; i < j2k_img->numcomps; i++) { + int tmp, w, h; + tmp = cio_read(1); + j2k_img->comps[i].prec = (tmp & 0x7f) + 1; + j2k_img->comps[i].sgnd = tmp >> 7; + j2k_img->comps[i].dx = cio_read(1); + j2k_img->comps[i].dy = cio_read(1); + w = int_ceildiv(j2k_img->x1-j2k_img->x0, j2k_img->comps[i].dx); + h = int_ceildiv(j2k_img->y1-j2k_img->y0, j2k_img->comps[i].dy); + j2k_img->comps[i].data = (int*)malloc(sizeof(int) * w * h); + } + j2k_cp->tw = int_ceildiv(j2k_img->x1 - j2k_cp->tx0, j2k_cp->tdx); + j2k_cp->th = int_ceildiv(j2k_img->y1 - j2k_cp->ty0, j2k_cp->tdy); + + j2k_cp->tcps = (j2k_tcp_t*)calloc((j2k_cp->tw * j2k_cp->th), sizeof(j2k_tcp_t)); + + for (i = 0; i < j2k_cp->tw * j2k_cp->th; i++) + { + j2k_cp->tcps[i].POC = 0; + j2k_cp->tcps[i].numpocs = 0; + // j2k_cp->tcps[i].first=1; + } + + /* Initialization for PPM marker */ + j2k_cp->ppm = 0; + j2k_cp->ppm_data = NULL; + j2k_cp->ppm_previous = 0; + j2k_cp->ppm_store = 0; + + j2k_default_tcp.tccps = (j2k_tccp_t*)malloc(j2k_img->numcomps * sizeof(j2k_tccp_t)); + for (i = 0; i < j2k_cp->tw * j2k_cp->th; i++) { + j2k_cp->tcps[i].tccps = (j2k_tccp_t*)malloc(j2k_img->numcomps * sizeof(j2k_tccp_t)); + } + j2k_tile_data = (unsigned char**)calloc(j2k_cp->tw * j2k_cp->th, sizeof(char*)); + j2k_tile_len = (int*)calloc(j2k_cp->tw * j2k_cp->th, sizeof(int)); + j2k_state = J2K_STATE_MH; + + /* */ + img.Im_w = j2k_img->x1 - j2k_img->x0; + img.Im_h = j2k_img->y1 - j2k_img->y0; + img.Tile_x = j2k_cp->tdx; + img.Tile_y = j2k_cp->tdy; + img.Comp = j2k_img->numcomps; + img.tw = j2k_cp->tw; + img.th = j2k_cp->th; + img.tile = (info_tile_t*)malloc(img.tw * img.th * sizeof(info_tile_t)); + + for (i = 0; i < img.tw * img.th; i++) + { + tile = &img.tile[i]; + tile->marker = (info_marker_t*)malloc(32 * sizeof(info_marker_t)); + tile->num_marker = 0; + tile->marker_mul.num_COC = 0; + tile->marker_mul.CzCOC = START_NB; + tile->marker_mul.num_RGN = 0; + tile->marker_mul.CzRGN = START_NB; + tile->marker_mul.num_QCC = 0; + tile->marker_mul.CzQCC = START_NB; + tile->marker_mul.num_PLT = 0; + tile->marker_mul.CzPLT = START_NB; + tile->marker_mul.num_PPT = 0; + tile->marker_mul.CzPPT = START_NB; + tile->marker_mul.num_COM = 0; + tile->marker_mul.CzCOM = START_NB; + } + /* */ + + + } + +void j2k_read_com() { + int len; + info_tile_t *tile; + info_marker_t *tmp; + + len = cio_read(2); + + /* [MHIX BOX] */ + if (j2k_state == J2K_STATE_MH) + { + if (!img.marker_mul.num_COM) + img.marker_mul.COM = (info_marker_t*)malloc(img.marker_mul.CzCOM * sizeof(info_marker_t)); + if (img.marker_mul.num_COM >= img.marker_mul.CzCOM) + { + tmp = (info_marker_t*)malloc(2 * img.marker_mul.CzCOM * sizeof(info_marker_t)); + memcpy(tmp,img.marker_mul.COM,img.marker_mul.CzCOM); + img.marker_mul.CzCOM *= 2; + free(img.marker_mul.COM); + img.marker_mul.COM = tmp; + } + + img.marker_mul.COM[img.marker_mul.num_COM].type = J2K_MS_COM; + img.marker_mul.COM[img.marker_mul.num_COM].start_pos = cio_tell()-2; + img.marker_mul.COM[img.marker_mul.num_COM].len = len; + img.marker_mul.num_COM++; + } else + { + tile = &img.tile[j2k_curtileno]; + if (!tile->marker_mul.num_COM) + tile->marker_mul.COM = (info_marker_t*)calloc(START_NB, sizeof(info_marker_t)); + if (tile->marker_mul.num_COM >= tile->marker_mul.CzCOM) + { + tmp = (info_marker_t*)malloc(2 * tile->marker_mul.CzCOM * sizeof(info_marker_t)); + memcpy(tmp,tile->marker_mul.COM,tile->marker_mul.CzCOM); + tile->marker_mul.CzCOM *= 2; + free(tile->marker_mul.COM); + tile->marker_mul.COM = tmp; + } + tile->marker_mul.COM[tile->marker_mul.num_COM].type = J2K_MS_COM; + tile->marker_mul.COM[tile->marker_mul.num_COM].start_pos = cio_tell()-2; + tile->marker_mul.COM[tile->marker_mul.num_COM].len = len; + tile->marker_mul.num_COM++; + } + /* [MHIX BOX] */ + + cio_skip(len - 2); +} + + + + +void j2k_read_cox(int compno) { + int i; + j2k_tcp_t *tcp; + j2k_tccp_t *tccp; + + tcp = j2k_state == J2K_STATE_TPH ? &j2k_cp->tcps[j2k_curtileno] : &j2k_default_tcp; + tccp = &tcp->tccps[compno]; + tccp->numresolutions = cio_read(1) + 1; + + img.Decomposition = tccp->numresolutions - 1; /* */ + + tccp->cblkw = cio_read(1) + 2; + tccp->cblkh = cio_read(1) + 2; + tccp->cblksty = cio_read(1); + tccp->qmfbid = cio_read(1); + if (tccp->csty&J2K_CP_CSTY_PRT) { + for (i = 0; i < tccp->numresolutions; i++) { + int tmp = cio_read(1); + tccp->prcw[i] = tmp&0xf; + tccp->prch[i] = tmp>>4; + } + } +} + + + + +void j2k_read_cod() { + int len, i, pos; + j2k_tcp_t *tcp; + info_tile_t *tile; + + tcp = j2k_state == J2K_STATE_TPH ? &j2k_cp->tcps[j2k_curtileno] : &j2k_default_tcp; + len = cio_read(2); + + /* [MHIX BOX] */ + if (j2k_state == J2K_STATE_MH) + { + img.marker[img.num_marker].type = J2K_MS_SIZ; + img.marker[img.num_marker].start_pos = cio_tell()-2; + img.marker[img.num_marker].len = len; + img.num_marker++; + } + else + { + tile = &img.tile[j2k_curtileno]; + tile->marker[tile->num_marker].type = J2K_MS_SIZ; + tile->marker[tile->num_marker].start_pos = cio_tell()-2; + tile->marker[tile->num_marker].len = len; + tile->num_marker++; + } + /* [MHIX BOX] */ + + tcp->csty = cio_read(1); + tcp->prg = cio_read(1); + tcp->numlayers = cio_read(2); + tcp->mct = cio_read(1); + + pos = cio_tell(); + for (i = 0; i < j2k_img->numcomps; i++) { + tcp->tccps[i].csty = tcp->csty&J2K_CP_CSTY_PRT; + cio_seek(pos); + j2k_read_cox(i); + } + + /* */ + img.Prog = tcp->prg; + img.Layer = tcp->numlayers; + /* */ +} + + + + +void j2k_read_coc() { + int len, compno; + j2k_tcp_t *tcp; + info_tile_t *tile; + info_marker_t *tmp; + + tcp = j2k_state == J2K_STATE_TPH ? &j2k_cp->tcps[j2k_curtileno] : &j2k_default_tcp; + len = cio_read(2); + + /* [MHIX BOX] */ + if (j2k_state == J2K_STATE_MH) + { + if (!img.marker_mul.num_COC) + img.marker_mul.COC = (info_marker_t*)malloc(img.marker_mul.CzCOC * sizeof(info_marker_t)); + if (img.marker_mul.num_COC >= img.marker_mul.CzCOC) + { + tmp = (info_marker_t*)malloc((INCREMENT + img.marker_mul.CzCOC) * sizeof(info_marker_t)); + memcpy(tmp,img.marker_mul.COC,img.marker_mul.CzCOC); + img.marker_mul.CzCOC += INCREMENT; + free(img.marker_mul.COC); + img.marker_mul.COC = tmp; + } + img.marker_mul.COC[img.marker_mul.num_COC].type = J2K_MS_COC; + img.marker_mul.COC[img.marker_mul.num_COC].start_pos = cio_tell()-2; + img.marker_mul.COC[img.marker_mul.num_COC].len = len; + img.marker_mul.num_COC++; + } else + { + tile = &img.tile[j2k_curtileno]; + if (!tile->marker_mul.num_COC) + tile->marker_mul.COC = (info_marker_t*)malloc(tile->marker_mul.CzCOC * sizeof(info_marker_t)); + if (tile->marker_mul.num_COC >= tile->marker_mul.CzCOC) + { + tmp = (info_marker_t*)malloc((INCREMENT + tile->marker_mul.CzCOC) * sizeof(info_marker_t)); + memcpy(tmp,tile->marker_mul.COC,tile->marker_mul.CzCOC); + tile->marker_mul.CzCOC += INCREMENT; + free(tile->marker_mul.COC); + tile->marker_mul.COC = tmp; + } + tile->marker_mul.COC[tile->marker_mul.num_COC].type = J2K_MS_COC; + tile->marker_mul.COC[tile->marker_mul.num_COC].start_pos = cio_tell() - 2; + tile->marker_mul.COC[tile->marker_mul.num_COC].len = len; + tile->marker_mul.num_COC++; + } + /* [MHIX BOX] */ + + compno =cio_read(j2k_img->numcomps <= 256 ? 1 : 2); + + tcp->tccps[compno].csty = cio_read(1); + j2k_read_cox(compno); +} + + + + +void j2k_read_qcx(int compno, int len) { + int tmp; + j2k_tcp_t *tcp; + j2k_tccp_t *tccp; + int bandno, numbands; + + tcp = j2k_state == J2K_STATE_TPH ? &j2k_cp->tcps[j2k_curtileno] : &j2k_default_tcp; + tccp = &tcp->tccps[compno]; + tmp = cio_read(1); + tccp->qntsty = tmp & 0x1f; + tccp->numgbits = tmp >> 5; + numbands = tccp->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT ? len - 1 : (len - 1) / 2); + for (bandno = 0; bandno < numbands; bandno++) { + int expn, mant; + if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) { /* WHY STEPSIZES WHEN NOQNT ? */ + expn = cio_read(1) >> 3; + mant = 0; + } else { + tmp = cio_read(2); + expn = tmp >> 11; + mant = tmp & 0x7ff; + } + tccp->stepsizes[bandno].expn = expn; + tccp->stepsizes[bandno].mant = mant; + } +} + + + + +void j2k_read_qcd() { + int len, i, pos; + info_tile_t *tile; + + len = cio_read(2); + + /* [MHIX BOX] */ + if (j2k_state == J2K_STATE_MH) + { + img.marker[img.num_marker].type = J2K_MS_QCD; + img.marker[img.num_marker].start_pos = cio_tell()-2; + img.marker[img.num_marker].len = len; + img.num_marker++; + } else + { + tile = &img.tile[j2k_curtileno]; + tile->marker[tile->num_marker].type = J2K_MS_QCD; + tile->marker[tile->num_marker].start_pos = cio_tell()-2; + tile->marker[tile->num_marker].len = len; + tile->num_marker++; + } + /* [MHIX BOX] */ + + + pos=cio_tell(); + for (i = 0; i < j2k_img->numcomps; i++) { + cio_seek(pos); + j2k_read_qcx(i, len - 2); + } +} + + + + +void j2k_read_qcc() { + int len, compno; + info_tile_t *tile; + info_marker_t *tmp; + + len = cio_read(2); + /* [MHIX BOX] */ + if (j2k_state == J2K_STATE_MH) + { + if (!img.marker_mul.num_QCC) + img.marker_mul.QCC = (info_marker_t*)malloc(img.marker_mul.CzQCC * sizeof(info_marker_t)); + if (img.marker_mul.num_QCC >= img.marker_mul.CzQCC) + { + tmp = (info_marker_t*)malloc((INCREMENT + img.marker_mul.CzQCC) * sizeof(info_marker_t)); + memcpy(tmp,img.marker_mul.QCC,img.marker_mul.CzQCC); + img.marker_mul.CzQCC += INCREMENT; + free(img.marker_mul.QCC); + img.marker_mul.QCC = tmp; + } + img.marker_mul.QCC[img.marker_mul.num_QCC].type = J2K_MS_QCC; + img.marker_mul.QCC[img.marker_mul.num_QCC].start_pos = cio_tell() - 2; + img.marker_mul.QCC[img.marker_mul.num_QCC].len = len; + img.marker_mul.num_QCC++; + } else + { + tile = &img.tile[j2k_curtileno]; + if (!tile->marker_mul.num_QCC) + tile->marker_mul.QCC = (info_marker_t*)malloc(tile->marker_mul.CzQCC * sizeof(info_marker_t)); + if (tile->marker_mul.num_QCC >= tile->marker_mul.CzQCC) + { + tmp = (info_marker_t*)malloc((INCREMENT + tile->marker_mul.CzQCC) * sizeof(info_marker_t)); + memcpy(tmp,tile->marker_mul.QCC,tile->marker_mul.CzQCC); + tile->marker_mul.CzQCC += INCREMENT; + free(tile->marker_mul.QCC); + tile->marker_mul.QCC = tmp; + } + tile->marker_mul.QCC[tile->marker_mul.num_QCC].type = J2K_MS_QCC; + tile->marker_mul.QCC[tile->marker_mul.num_QCC].start_pos = cio_tell()-2; + tile->marker_mul.QCC[tile->marker_mul.num_QCC].len = len; + tile->marker_mul.num_QCC++; + } + /* [MHIX BOX] */ + + compno = cio_read(j2k_img->numcomps <= 256 ? 1 : 2); + j2k_read_qcx(compno, len - 2 - (j2k_img->numcomps <= 256 ? 1 : 2)); +} + + + + +void j2k_read_poc() { + int len, numpchgs, i, old_poc; + j2k_tcp_t *tcp; + j2k_tccp_t *tccp; + info_tile_t *tile; + + tcp = j2k_state == J2K_STATE_TPH ? &j2k_cp->tcps[j2k_curtileno] : &j2k_default_tcp; + old_poc = tcp->POC ? tcp->numpocs+1 : 0; + tcp->POC = 1; + tccp = &tcp->tccps[0]; + len = cio_read(2); + + /* [MHIX BOX] */ + if (j2k_state == J2K_STATE_MH) + { + img.marker[img.num_marker].type = J2K_MS_POC; + img.marker[img.num_marker].start_pos = cio_tell()-2; + img.marker[img.num_marker].len = len; + img.num_marker++; + } else + { + tile = &img.tile[j2k_curtileno]; + tile->marker[tile->num_marker].type = J2K_MS_POC; + tile->marker[tile->num_marker].start_pos = cio_tell()-2; + tile->marker[tile->num_marker].len = len; + tile->num_marker++; + } + /* [MHIX BOX] */ + + numpchgs = (len - 2) / (5 + 2 * (j2k_img->numcomps <= 256 ? 1 : 2)); + for (i = 0; i < numpchgs; i++) { + j2k_poc_t *poc; + poc = &tcp->pocs[i]; + poc->resno0 = cio_read(1); + poc->compno0 = cio_read(j2k_img->numcomps <= 256 ? 1 : 2); + poc->layno1 = int_min(cio_read(2), tcp->numlayers); + poc->resno1 = int_min(cio_read(1), tccp->numresolutions); + poc->compno1 = int_min(cio_read(j2k_img->numcomps <= 256 ? 1 : 2), j2k_img->numcomps); + poc->prg = cio_read(1); + } + + tcp->numpocs = numpchgs + old_poc - 1; +} + + + + +void j2k_read_crg() { + int len, i, Xcrg_i, Ycrg_i; + + len = cio_read(2); + + /* [MHIX BOX] */ + img.marker[img.num_marker].type = J2K_MS_CRG; + img.marker[img.num_marker].start_pos = cio_tell()-2; + img.marker[img.num_marker].len = len; + img.num_marker++; + /* [MHIX BOX] */ + + for (i = 0; i < j2k_img->numcomps; i++) + { + Xcrg_i = cio_read(2); + Ycrg_i = cio_read(2); + } +} + + + + +void j2k_read_tlm() { + int len, Ztlm, Stlm, ST, SP, tile_tlm, i; + long int Ttlm_i, Ptlm_i; + info_marker_t *tmp; + + len = cio_read(2); + + /* [MHIX BOX] */ + if (!img.marker_mul.num_TLM) + img.marker_mul.TLM = (info_marker_t*)malloc(img.marker_mul.CzTLM * sizeof(info_marker_t)); + if (img.marker_mul.num_TLM >= img.marker_mul.CzTLM) + { + tmp = (info_marker_t*)malloc((INCREMENT + img.marker_mul.CzTLM) * sizeof(info_marker_t)); + memcpy(tmp,img.marker_mul.TLM,img.marker_mul.CzTLM); + img.marker_mul.CzTLM += INCREMENT; + free(img.marker_mul.TLM); + img.marker_mul.TLM = tmp; + } + img.marker_mul.TLM[img.marker_mul.num_TLM].type = J2K_MS_TLM; + img.marker_mul.TLM[img.marker_mul.num_TLM].start_pos = cio_tell()-2; + img.marker_mul.TLM[img.marker_mul.num_TLM].len = len; + img.marker_mul.num_TLM++; + /* [MHIX BOX] */ + + Ztlm = cio_read(1); + Stlm = cio_read(1); + ST = ((Stlm >> 4) & 0x01) + ((Stlm >> 4) & 0x02); + SP = (Stlm >> 6) & 0x01; + tile_tlm = (len - 4) / ((SP + 1) * 2 + ST); + for (i = 0; i < tile_tlm; i++) + { + Ttlm_i = cio_read(ST); + Ptlm_i = cio_read(SP ? 4 : 2); + } +} + + + + +void j2k_read_plm() { + int len, i, Z_plm, N_plm, add, packet_len=0; + info_marker_t *tmp; + + len=cio_read(2); + + /* [MHIX BOX] */ + if (!img.marker_mul.num_PLM) + img.marker_mul.PLM = (info_marker_t*)malloc(img.marker_mul.CzPLM * sizeof(info_marker_t)); + if (img.marker_mul.num_PLM >= img.marker_mul.CzPLM) + { + tmp = (info_marker_t*)malloc((INCREMENT + img.marker_mul.CzPLM) * sizeof(info_marker_t)); + memcpy(tmp,img.marker_mul.PLM,img.marker_mul.CzPLM); + img.marker_mul.CzPLM += INCREMENT; + free(img.marker_mul.PLM); + img.marker_mul.PLM = tmp; + } + img.marker_mul.PLM[img.marker_mul.num_PLM].type = J2K_MS_PLM; + img.marker_mul.PLM[img.marker_mul.num_PLM].start_pos = cio_tell()-2; + img.marker_mul.PLM[img.marker_mul.num_PLM].len = len; + img.marker_mul.num_PLM++; + /* [MHIX BOX] */ + + Z_plm = cio_read(1); + len -= 3; + while (len > 0) + { + N_plm = cio_read(4); + len -= 4; + for (i = N_plm ; i > 0 ; i--) + { + add = cio_read(1); + len--; + packet_len = (packet_len << 7) + add; + if ((add & 0x80) == 0) + { + /* New packet */ + packet_len = 0; + } + if (len <= 0) break; + } + } +} + + + + +void j2k_read_plt() { + int len, i, Zplt, packet_len=0, add; + info_tile_t *tile; + info_marker_t *tmp; +; + len = cio_read(2); + + /* [MHIX BOX] */ + tile = &img.tile[j2k_curtileno]; + if (!tile->marker_mul.num_PLT) + tile->marker_mul.PLT = (info_marker_t*)malloc(tile->marker_mul.CzPLT * sizeof(info_marker_t)); + if (tile->marker_mul.num_PLT >= tile->marker_mul.CzPLT) + { + tmp = (info_marker_t*)malloc((INCREMENT + tile->marker_mul.CzPLT) * sizeof(info_marker_t)); + memcpy(tmp,tile->marker_mul.PLT,tile->marker_mul.CzPLT); + tile->marker_mul.CzPLT += INCREMENT; + free(tile->marker_mul.PLT); + tile->marker_mul.PLT = tmp; + } + + tile->marker_mul.PLT[tile->marker_mul.num_PLT].type = J2K_MS_PLT; + tile->marker_mul.PLT[tile->marker_mul.num_PLT].start_pos = cio_tell()-2; + tile->marker_mul.PLT[tile->marker_mul.num_PLT].len = len; + tile->marker_mul.num_PLT++; + /* [MHIX BOX] */ + + Zplt = cio_read(1); + for (i = len-3; i > 0; i--) + { + add = cio_read(1); + packet_len = (packet_len << 7) + add; + if ((add & 0x80) == 0) + { + /* New packet */ + packet_len = 0; + } + } +} + + + + +void j2k_read_ppm() { + int len, Z_ppm, i, j; + int N_ppm; + info_marker_t *tmp; + + len = cio_read(2); + + /* [MHIX BOX] */ + if (!img.marker_mul.num_PPM) + img.marker_mul.PPM = (info_marker_t*)malloc(img.marker_mul.CzPPM * sizeof(info_marker_t)); + if (img.marker_mul.num_PPM >= img.marker_mul.CzPPM) + { + tmp = (info_marker_t*)malloc((INCREMENT + img.marker_mul.CzPPM) * sizeof(info_marker_t)); + memcpy(tmp,img.marker_mul.PPM,img.marker_mul.CzPPM); + img.marker_mul.CzPPM += INCREMENT; + free(img.marker_mul.PPM); + img.marker_mul.PPM = tmp; + } + img.marker_mul.PLM[img.marker_mul.num_PPM].type = J2K_MS_PPM; + img.marker_mul.PLM[img.marker_mul.num_PPM].start_pos = cio_tell()-2; + img.marker_mul.PLM[img.marker_mul.num_PPM].len = len; + img.marker_mul.num_PPM++; + /* [MHIX BOX] */ + + j2k_cp->ppm = 1; + + Z_ppm = cio_read(1); /* Z_ppm */ + len -= 3; + while (len > 0) + { + if (j2k_cp->ppm_previous == 0) + { + N_ppm = cio_read(4); /* N_ppm */ + len -= 4; + } else + { + N_ppm = j2k_cp->ppm_previous; + } + + j = j2k_cp->ppm_store; + if (Z_ppm == 0) /* First PPM marker */ + j2k_cp->ppm_data = (unsigned char*)calloc(N_ppm, sizeof(unsigned char)); + else /* NON-first PPM marker */ + j2k_cp->ppm_data = (unsigned char*)realloc(j2k_cp->ppm_data, (N_ppm + j2k_cp->ppm_store) * sizeof(unsigned char)); + + for (i = N_ppm ; i > 0 ; i--) /* Read packet header */ + { + j2k_cp->ppm_data[j] = cio_read(1); + j++; + len--; + if (len == 0) break; /* Case of non-finished packet header in present marker but finished in next one */ + } + + j2k_cp->ppm_previous = i - 1; + j2k_cp->ppm_store = j; + } +} + + + + +void j2k_read_ppt() { + int len, Z_ppt, i, j = 0; + j2k_tcp_t *tcp; + info_tile_t *tile; + len=cio_read(2); + + /* [MHIX BOX] */ + tile = & img.tile[j2k_curtileno]; + tile->marker[tile->num_marker].type = J2K_MS_PPT; + tile->marker[tile->num_marker].start_pos = cio_tell()-2; + tile->marker[tile->num_marker].len = len; + tile->num_marker++; + /* [MHIX BOX] */ + + Z_ppt = cio_read(1); + tcp = &j2k_cp->tcps[j2k_curtileno]; + tcp->ppt = 1; + if (Z_ppt == 0) /* First PPT marker */ + { + tcp->ppt_data = (unsigned char*)calloc(len - 3, sizeof(unsigned char)); + tcp->ppt_store = 0; + } + else /* NON-first PPT marker */ + tcp->ppt_data = (unsigned char*)realloc(tcp->ppt_data, (len - 3 + tcp->ppt_store) * sizeof(unsigned char)); + + j = tcp->ppt_store; + for (i = len - 3 ; i > 0 ; i--) + { + tcp->ppt_data[j] = cio_read(1); + j++; + } + tcp->ppt_store = j; +} + + + + +void j2k_read_sot() { + int len, tileno, totlen, partno, numparts, i; + j2k_tcp_t *tcp; + j2k_tccp_t *tmp; + info_tile_t *tile; + info_tile_part_t *tilepart_tmp; + + + //fprintf(stderr,"SOT\n"); + len = cio_read(2); + tileno = cio_read(2); + /* [MHIX BOX] */ + tile = & img.tile[tileno]; + tile->marker[tile->num_marker].type = J2K_MS_SOT; + tile->marker[tile->num_marker].start_pos = cio_tell() - 4; + tile->marker[tile->num_marker].len = len; + tile->num_marker++; + /* [MHIX BOX] */ + + totlen = cio_read(4); + if (!totlen) totlen = cio_numbytesleft() + 8; + partno = cio_read(1); + numparts = cio_read(1); + + /* */ + if (tileno == 0 && partno == 0 ) + img.Main_head_end = cio_tell() - 7; /* Correction End = First byte of first SOT */ + + img.tile[tileno].num_tile = tileno; + /* */ + + tile->numparts = partno + 1; /* INDEX : Number of tile_parts for the tile */ + img.num_max_tile_parts = int_max(tile->numparts, img.num_max_tile_parts); /* INDEX : Maximum number of tile_part per tile */ + + if (partno == 0) + { + tile->tile_parts = (info_tile_part_t*)malloc(START_NB * sizeof(info_tile_part_t*)); + tile->Cztile_parts = START_NB; + } + if (partno >= tile->Cztile_parts) + { + tilepart_tmp = (info_tile_part_t*)malloc((INCREMENT + tile->Cztile_parts) * sizeof(info_tile_part_t)); + memcpy(tilepart_tmp, tile->tile_parts, tile->Cztile_parts); + tile->Cztile_parts += INCREMENT; + free(tile->tile_parts); + tile->tile_parts = tilepart_tmp; + } + + tile->tile_parts[partno].start_pos = cio_tell() - 12; /* INDEX : start_pos of the tile_part */ + tile->tile_parts[partno].length = totlen; /* INDEX : length of the tile_part */ + tile->tile_parts[partno].end_pos = totlen + cio_tell() - 12; /* INDEX : end position of the tile_part */ + + + j2k_curtileno = tileno; + j2k_eot = cio_getbp() - 12 + totlen; + j2k_state = J2K_STATE_TPH; + tcp = &j2k_cp->tcps[j2k_curtileno]; + + tile->tile_parts[numparts].num_reso_AUX = tcp->tccps[0].numresolutions; /* INDEX : AUX value for TPIX */ + + if (partno == 0) + // if (tcp->first == 1) + { + tmp = tcp->tccps; + *tcp = j2k_default_tcp; + /* Initialization PPT */ + tcp->ppt = 0; + tcp->ppt_data = NULL; + + tcp->tccps = tmp; + for (i = 0; i < j2k_img->numcomps; i++) { + tcp->tccps[i] = j2k_default_tcp.tccps[i]; + } + //j2k_cp->tcps[j2k_curtileno].first=0; + } +} + + + +void j2k_read_rgn() { + int len, compno, roisty; + j2k_tcp_t *tcp; + info_tile_t *tile; + info_marker_t *tmp; + // fprintf(stderr,"RGN\n"); + tcp = j2k_state == J2K_STATE_TPH ? &j2k_cp->tcps[j2k_curtileno] : &j2k_default_tcp; + len = cio_read(2); + + /* [MHIX BOX]*/ + if (j2k_state == J2K_STATE_MH) + { + if (!img.marker_mul.num_RGN) + img.marker_mul.RGN = (info_marker_t*)malloc(img.marker_mul.CzRGN * sizeof(info_marker_t)); + if (img.marker_mul.num_RGN >= img.marker_mul.CzRGN) + { + tmp = (info_marker_t*)malloc((INCREMENT + img.marker_mul.CzRGN) * sizeof(info_marker_t)); + memcpy(tmp,img.marker_mul.RGN, img.marker_mul.CzRGN); + img.marker_mul.CzRGN += INCREMENT; + free(img.marker_mul.RGN); + img.marker_mul.RGN = tmp; + } + img.marker_mul.RGN[img.marker_mul.num_RGN].type = J2K_MS_RGN; + img.marker_mul.RGN[img.marker_mul.num_RGN].start_pos = cio_tell() - 2; + img.marker_mul.RGN[img.marker_mul.num_RGN].len = len; + img.marker_mul.num_RGN++; + } else + { + tile = &img.tile[j2k_curtileno]; + if (!tile->marker_mul.num_RGN) + tile->marker_mul.RGN = (info_marker_t*)malloc(tile->marker_mul.CzRGN * sizeof(info_marker_t)); + if (tile->marker_mul.num_RGN >= tile->marker_mul.CzRGN) + { + tmp = (info_marker_t*)malloc((INCREMENT + tile->marker_mul.CzRGN) * sizeof(info_marker_t)); + memcpy(tmp,tile->marker_mul.RGN,tile->marker_mul.CzRGN); + tile->marker_mul.CzRGN += INCREMENT; + free(tile->marker_mul.RGN); + tile->marker_mul.RGN = tmp; + } + + tile->marker_mul.RGN[tile->marker_mul.num_RGN].type = J2K_MS_RGN; + tile->marker_mul.RGN[tile->marker_mul.num_RGN].start_pos = cio_tell() - 2; + tile->marker_mul.RGN[tile->marker_mul.num_RGN].len = len; + tile->marker_mul.num_RGN++; + } + /* [MHIX BOX] */ + + compno = cio_read(j2k_img->numcomps <= 256 ? 1 : 2); + roisty = cio_read(1); + tcp->tccps[compno].roishift = cio_read(1); +} + + + + + +void j2k_read_sod() { + int len; + unsigned char *data; + info_tile_t *tile; + info_tile_part_t *tile_part; + // fprintf(stderr,"SOD\n"); + /* [MHIX BOX] */ + tile = &img.tile[j2k_curtileno]; + tile->marker[tile->num_marker].type = J2K_MS_SOD; + tile->marker[tile->num_marker].start_pos = cio_tell(); + tile->marker[tile->num_marker].len = 0; + tile->num_marker++; + /* [MHIX BOX] */ + + tile_part = &tile->tile_parts[tile->numparts - 1]; /* INDEX : Current tilepart of a tile */ + tile_part->length_header = cio_tell() - 1 - tile_part->start_pos; /* INDEX : length of the tile-part header */ + tile_part->end_header = cio_tell() - 1; /* INDEX : end header position of the tile-part header */ + + len = int_min(j2k_eot - cio_getbp(), cio_numbytesleft()); + + j2k_tile_len[j2k_curtileno] += len; + data = (unsigned char*)realloc(j2k_tile_data[j2k_curtileno], j2k_tile_len[j2k_curtileno]); + memcpy(data, cio_getbp(), len); + j2k_tile_data[j2k_curtileno] = data; + cio_skip(len); + j2k_state = J2K_STATE_TPHSOT; +} + +void j2k_read_eoc() { + int tileno; + tcd_init(j2k_img, j2k_cp, &img); + for (tileno = 0; tilenotw * j2k_cp->th; tileno++) { + tcd_decode_tile(j2k_tile_data[tileno], j2k_tile_len[tileno], tileno, &img); + } + + j2k_state = J2K_STATE_MT; + longjmp(j2k_error, 1); +} + + + + +void j2k_read_unk() { + fprintf(stderr, "warning: unknown marker\n"); +} + + + + +int j2k_index_JPIP(char *Idx_file, char *J2K_file, int len, int version){ + FILE *dest; + unsigned char *index; + int pos_iptr, end_pos; + int len_cidx, pos_cidx; + int len_jp2c, pos_jp2c; + int len_fidx, pos_fidx; + + dest=fopen(Idx_file, "wb"); + if (!dest) { + fprintf(stderr, "Failed to open %s for reading !!\n", Idx_file); + return 0; + } + + /* INDEX MODE JPIP */ + index = (unsigned char*)malloc(len); + cio_init(index, len); + jp2_write_jp(); + jp2_write_ftyp(); + + jp2_write_jp2h(j2k_img); + jp2_write_dbtl(Idx_file); + + pos_iptr=cio_tell(); + cio_skip(24); /* IPTR further ! */ + + pos_jp2c = cio_tell(); + len_jp2c = jp2_write_jp2c(J2K_file); + + pos_cidx = cio_tell(); + len_cidx = jpip_write_cidx(pos_jp2c + 8,img, j2k_cp, version); /* Correction len_jp2C --> pos_jp2c + 8 */ + + + pos_fidx = cio_tell(); + len_fidx = jpip_write_fidx(pos_jp2c, len_jp2c, pos_cidx, len_cidx); + +end_pos = cio_tell(); + + cio_seek(pos_iptr); + jpip_write_iptr(pos_fidx,len_fidx); + cio_seek(end_pos); + + fwrite(index, 1, cio_tell(), dest); + free(index); + + fclose(dest); + return 1; +} + + + +typedef struct { + int id; + int states; + void (*handler)(); +} j2k_dec_mstabent_t; + +j2k_dec_mstabent_t j2k_dec_mstab[]={ + {J2K_MS_SOC, J2K_STATE_MHSOC, j2k_read_soc}, + {J2K_MS_SOT, J2K_STATE_MH|J2K_STATE_TPHSOT, j2k_read_sot}, + {J2K_MS_SOD, J2K_STATE_TPH, j2k_read_sod}, + {J2K_MS_EOC, J2K_STATE_TPHSOT, j2k_read_eoc}, + {J2K_MS_SIZ, J2K_STATE_MHSIZ, j2k_read_siz}, + {J2K_MS_COD, J2K_STATE_MH|J2K_STATE_TPH, j2k_read_cod}, + {J2K_MS_COC, J2K_STATE_MH|J2K_STATE_TPH, j2k_read_coc}, + {J2K_MS_RGN, J2K_STATE_MH|J2K_STATE_TPH, j2k_read_rgn}, + {J2K_MS_QCD, J2K_STATE_MH|J2K_STATE_TPH, j2k_read_qcd}, + {J2K_MS_QCC, J2K_STATE_MH|J2K_STATE_TPH, j2k_read_qcc}, + {J2K_MS_POC, J2K_STATE_MH|J2K_STATE_TPH, j2k_read_poc}, + {J2K_MS_TLM, J2K_STATE_MH, j2k_read_tlm}, + {J2K_MS_PLM, J2K_STATE_MH, j2k_read_plm}, + {J2K_MS_PLT, J2K_STATE_TPH, j2k_read_plt}, + {J2K_MS_PPM, J2K_STATE_MH, j2k_read_ppm}, + {J2K_MS_PPT, J2K_STATE_TPH, j2k_read_ppt}, + {J2K_MS_SOP, 0, 0}, + {J2K_MS_CRG, J2K_STATE_MH, j2k_read_crg}, + {J2K_MS_COM, J2K_STATE_MH|J2K_STATE_TPH, j2k_read_com}, + {0, J2K_STATE_MH|J2K_STATE_TPH, j2k_read_unk} +}; + +j2k_dec_mstabent_t *j2k_dec_mstab_lookup(int id) { + j2k_dec_mstabent_t *e; + for (e = j2k_dec_mstab; e->id != 0; e++) { + if (e->id == id) { + break; + } + } + return e; +} + +int j2k_decode(unsigned char *src, int len, j2k_image_t **image, j2k_cp_t **cp) { + if (setjmp(j2k_error)) { + if (j2k_state != J2K_STATE_MT) { + fprintf(stderr, "WARNING: incomplete bitstream\n"); + return 0; + } + return cio_numbytes(); + } + j2k_img = (j2k_image_t*)calloc(1, sizeof(j2k_image_t)); + j2k_cp = (j2k_cp_t*)calloc(1, sizeof(j2k_cp_t)); + *image = j2k_img; + *cp = j2k_cp; + j2k_state = J2K_STATE_MHSOC; + cio_init(src, len); + for (;;) { + j2k_dec_mstabent_t *e; + int id = cio_read(2); + if (id >> 8 != 0xff) { + fprintf(stderr, "%.8x: expected a marker instead of %x\n", cio_tell() - 2, id); + return 0; + } + e = j2k_dec_mstab_lookup(id); + if (!(j2k_state & e->states)) { + fprintf(stderr, "%.8x: unexpected marker %x\n", cio_tell() - 2, id); + return 0; + } + if (e->handler) { + (*e->handler)(); + } + } + +} + + +#ifdef _WIN32 +#include + +BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { + switch (ul_reason_for_call) { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} +#endif /* _WIN32 */ + +int main(int argc, char **argv) +{ + FILE *src; + int totlen; + unsigned char *j2kfile; + j2k_image_t *imgg; + j2k_cp_t *cp; + int version; + + if (argc != 4) + { + fprintf(stderr,"\nUSAGE : ./index_create J2K-file JP2-file version\n\nVersion : 0, 1, 2 or 3\n 0 : [faix] 4-byte and no AUX fields\n 1 : [faix] 8-byte and no AUX fields\n 2 : [faix] 4-byte and AUX fields\n 3 : [faix] 8-byte and AUX fields\n\nReference Document : annex I from JPIP-FCD-version 2 (SC 29 N5727)\n\n"); + return 1; + } + + src=fopen(argv[1], "rb"); + if (!src) { + fprintf(stderr, "Failed to open %s for reading !!\n", argv[1]); + return 1; + } + + /* length of the codestream */ + fseek(src, 0, SEEK_END); + totlen = ftell(src); + fseek(src, 0, SEEK_SET); + + j2kfile = (unsigned char*)malloc(totlen); + fread(j2kfile, 1, totlen, src); + fclose(src); + + img.marker = (info_marker_t*)malloc(32 * sizeof(info_marker_t)); + img.num_marker = 0; + img.num_max_tile_parts = 0; + img.marker_mul.num_COC = 0; + img.marker_mul.CzCOC = START_NB; + img.marker_mul.num_RGN = 0; + img.marker_mul.CzRGN = START_NB; + img.marker_mul.num_QCC = 0; + img.marker_mul.CzQCC = START_NB; + img.marker_mul.num_TLM = 0; + img.marker_mul.CzTLM = START_NB; + img.marker_mul.num_PLM = 0; + img.marker_mul.CzPLM = START_NB; + img.marker_mul.num_PPM = 0; + img.marker_mul.CzPPM = START_NB; + img.marker_mul.num_COM = 0; + img.marker_mul.CzCOM = START_NB; + + /* decode */ + + if (!j2k_decode(j2kfile, totlen, &imgg, &cp)) { + fprintf(stderr, "Index_creator: failed to decode image!\n"); + free(j2kfile); + return 1; + } + free(j2kfile); + + // fseek(src, 0, SEEK_SET); + img.codestream_size = totlen; + sscanf(argv[3], "%d", &version); + if (version > 3) + { + fprintf(stderr,"Error : value of version unauthorized !! Value accepted : 0, 1, 2 or 3 !!\n"); + return 0; + } + + j2k_index_JPIP(argv[2], argv[1], totlen * 2 > 60000 ? totlen * 2 : 60000, version); + + j2k_clean(); + return 0; +} + diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/int.c b/contrib/menuetlibc/openjpeg/indexer_JPIP/int.c new file mode 100644 index 0000000000..29f778c966 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/int.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +/// +/// Get the minimum of two integers. +/// +int int_min(int a, int b) { + return a +/// Get the maximum of two integers. +/// +int int_max(int a, int b) { + return a>b?a:b; +} + +/// +/// Clamp an integer inside an interval. +/// +int int_clamp(int a, int min, int max) { + if (amax) return max; + return a; +} + +/// +/// Get absolute value of integer. +/// +int int_abs(int a) { + return a<0?-a:a; +} + +/// +/// Divide an integer and round upwards. +/// +int int_ceildiv(int a, int b) { + return (a+b-1)/b; +} + +/// +/// Divide an integer by a power of 2 and round upwards. +/// +int int_ceildivpow2(int a, int b) { + return (a+(1<>b; +} + +/// +/// Divide an integer by a power of 2 and round downwards. +/// +int int_floordivpow2(int a, int b) { + return a>>b; +} + +/// +/// Get logarithm of an integer and round downwards. +/// +int int_floorlog2(int a) { + int l; + for (l=0; a>1; l++) { + a>>=1; + } + return l; +} diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/int.h b/contrib/menuetlibc/openjpeg/indexer_JPIP/int.h new file mode 100644 index 0000000000..4921ff4d1d --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/int.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __INT_H +#define __INT_H + +int int_min(int a, int b); +int int_max(int a, int b); +int int_clamp(int a, int min, int max); +int int_abs(int a); +int int_ceildiv(int a, int b); +int int_ceildivpow2(int a, int b); +int int_floordivpow2(int a, int b); +int int_floorlog2(int a); + +#endif diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/j2k.h b/contrib/menuetlibc/openjpeg/indexer_JPIP/j2k.h new file mode 100644 index 0000000000..6c9a3c6f5b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/j2k.h @@ -0,0 +1,288 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003-2004, Yannick Verschueren + * Copyright (c) 2003-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#define VERSION "0.0.8" + +#ifdef _WIN32 +#ifdef LIBJ2K_EXPORTS +#define LIBJ2K_API __declspec(dllexport) +#else +#define LIBJ2K_API __declspec(dllimport) +#endif +#else +#define LIBJ2K_API +#endif + +#ifndef __J2K_H +#define __J2K_H + +#define J2K_MAXRLVLS 33 +#define J2K_MAXBANDS (3*J2K_MAXRLVLS+1) + +#define J2K_CP_CSTY_PRT 0x01 +#define J2K_CP_CSTY_SOP 0x02 +#define J2K_CP_CSTY_EPH 0x04 +#define J2K_CCP_CSTY_PRT 0x01 +#define J2K_CCP_CBLKSTY_LAZY 0x01 +#define J2K_CCP_CBLKSTY_RESET 0x02 +#define J2K_CCP_CBLKSTY_TERMALL 0x04 +#define J2K_CCP_CBLKSTY_VSC 0x08 +#define J2K_CCP_CBLKSTY_PTERM 0x10 +#define J2K_CCP_CBLKSTY_SEGSYM 0x20 +#define J2K_CCP_QNTSTY_NOQNT 0 +#define J2K_CCP_QNTSTY_SIQNT 1 +#define J2K_CCP_QNTSTY_SEQNT 2 + +typedef struct +{ + int dx, dy; /* XRsiz, YRsiz */ + int prec; /* precision */ + int bpp; /* deapth of image in bits */ + int sgnd; /* signed */ + int *data; /* image-component data */ +} j2k_comp_t; + +typedef struct { + int version; + int x0, y0; /* XOsiz, YOsiz */ + int x1, y1; /* Xsiz, Ysiz */ + int numcomps; /* number of components */ + int index_on; /* 0 = no index || 1 = index */ + j2k_comp_t *comps; /* image-components */ +} j2k_image_t; + +typedef struct { + int expn; /* exponent */ + int mant; /* mantissa */ +} j2k_stepsize_t; + +typedef struct { + int csty; /* coding style */ + int numresolutions; /* number of resolutions */ + int cblkw; /* width of code-blocks */ + int cblkh; /* height of code-blocks */ + int cblksty; /* code-block coding style */ + int qmfbid; /* discrete wavelet transform identifier */ + int qntsty; /* quantisation style */ + j2k_stepsize_t stepsizes[J2K_MAXBANDS]; /* stepsizes used for quantisation */ + int numgbits; /* number of guard bits */ + int roishift; /* Region of Interest shift */ + int prcw[J2K_MAXRLVLS]; /* Precinct width */ + int prch[J2K_MAXRLVLS]; /* Precinct height */ +} j2k_tccp_t; + +typedef struct { + int resno0, compno0; + int layno1, resno1, compno1; + int prg; + int tile; + char progorder[4]; +} j2k_poc_t; + +typedef struct { + int csty; /* coding style */ + int prg; /* progression order */ + int numlayers; /* number of layers */ + int mct; /* multi-component transform identifier */ + int rates[100]; /* rates of layers */ + int numpocs; /* number of progression order changes */ + int POC; /* Precise if a POC marker has been used O:NO, 1:YES */ + j2k_poc_t pocs[32]; /* progression order changes */ + unsigned char *ppt_data; /* packet header store there for futur use in t2_decode_packet */ + int ppt; /* If ppt == 1 --> there was a PPT marker for the present tile */ + int ppt_store; /* Use in case of multiple marker PPT (number of info already store) */ + j2k_tccp_t *tccps; /* tile-component coding parameters */ +} j2k_tcp_t; + +typedef struct { + int tx0, ty0; /* XTOsiz, YTOsiz */ + int tdx, tdy; /* XTsiz, YTsiz */ + int tw, th; + unsigned char *ppm_data; /* packet header store there for futur use in t2_decode_packet */ + int ppm; /* If ppm == 1 --> there was a PPM marker for the present tile */ + int ppm_store; /* Use in case of multiple marker PPM (number of info already store) */ + int ppm_previous; /* Use in case of multiple marker PPM (case on non-finished previous info) */ + j2k_tcp_t *tcps; /* tile coding parameters */ +} j2k_cp_t; + + + + + +/* Packet information : Layer level */ +typedef struct { + int len; /* Length of the body of the packet */ + int len_header; /* Length of the header of the packet */ + int offset; /* Offset of the body of the packet */ + int offset_header; /* Offset of the header of the packet */ +} info_layer_t; + + +/* Access to packet information : precinct level */ +typedef struct { + info_layer_t *layer; +} info_prec_t; + + +/* Access to packet information : resolution level */ +typedef struct { + info_prec_t *prec; +} info_reso_t; + + +/* Access to packet information : component level */ +typedef struct { + info_reso_t *reso; +} info_compo_t; + + +/* Information about the marker */ +typedef struct { + int type; /* type of marker [SIZ, QCD, POC, PPM, CRG, COD] appearing only once */ + int start_pos; /* Start position of the marker */ + int len; /* Length of the marker */ +} info_marker_t; + + +/* Multiple marker in tile header */ +typedef struct{ + info_marker_t *COC; /* COC markers */ + int num_COC; /* Number of COC marker */ + int CzCOC; /* Current size of the vector COC */ + + info_marker_t *RGN; /* RGN markers */ + int num_RGN; /* Number of RGN marker */ + int CzRGN; /* Current size of the vector RGN */ + + info_marker_t *QCC; /* QCC markers */ + int num_QCC; /* Number of QCC marker */ + int CzQCC; /* Current size of the vector QCC */ + + info_marker_t *PLT; /* PLT markers */ + int num_PLT; /* Number of PLT marker */ + int CzPLT; /* Current size of the vector PLT */ + + info_marker_t *PPT; /* PPT markers */ + int num_PPT; /* Number of PPT marker */ + int CzPPT; /* Current size of the vector PPT */ + + info_marker_t *COM; /* COM markers */ + int num_COM; /* Number of COM marker */ + int CzCOM; /* Current size of the vector COC */ +} info_marker_mul_tile_t; + + +/* Information about each tile_part for a particulary tile */ +typedef struct{ + int start_pos; /* Start position of the tile_part */ + int length; /* Length of the tile_part header + body */ + int length_header; /* Length of the header */ + int end_pos; /* End position of the tile part */ + int end_header; /* End position of the tile part header */ + + int num_reso_AUX; /* Number of resolution level completed */ +} info_tile_part_t; + + +/* Information about each tile */ +typedef struct { + int num_tile; /* Number of Tile */ + int pw, ph; /* number of precinct by tile */ + int num_packet; /* number of packet in the tile */ + info_compo_t *compo; /* component [packet] */ + + info_marker_t *marker; /* information concerning markers inside image [only one apparition] */ + info_marker_mul_tile_t marker_mul; /* information concerning markers inside image [multiple apparition] */ + int num_marker; /* number of marker */ + + int numparts; /* number of tile_part for this tile */ + info_tile_part_t *tile_parts; /* Information about each tile_part */ + int Cztile_parts; /* Current size of the tile_parts vector */ +} info_tile_t; /* index struct */ + + +/* Multiple marker in main header */ +typedef struct{ + info_marker_t *COC; /* COC markers */ + int num_COC; /* Number of COC marker */ + int CzCOC; /* Current size of the vector COC */ + + info_marker_t *RGN; /* RGN markers */ + int num_RGN; /* Number of RGN marker */ + int CzRGN; /* Current size of the vector RGN */ + + info_marker_t *QCC; /* QCC markers */ + int num_QCC; /* Number of QCC marker */ + int CzQCC; /* Current size of the vector QCC */ + + info_marker_t *TLM; /* TLM markers */ + int num_TLM; /* Number of TLM marker */ + int CzTLM; /* Current size of the vector TLM */ + + info_marker_t *PLM; /* PLM markers */ + int num_PLM; /* Number of PLM marker */ + int CzPLM; /* Current size of the vector PLM */ + + info_marker_t *PPM; /* PPM markers */ + int num_PPM; /* Number of PPM marker */ + int CzPPM; /* Current size of the vector PPM */ + + info_marker_t *COM; /* COM markers */ + int num_COM; /* Number of COM marker */ + int CzCOM; /* Current size of the vector COM */ +} info_marker_mul_t; /* index struct */ + + +/* Information about image */ +typedef struct { + int Im_w, Im_h; /* Image width and Height */ + int Tile_x, Tile_y; /* Number of Tile in X and Y */ + int tw, th; + int pw, ph; /* nombre precinct in X and Y */ + int pdx, pdy; /* size of precinct in X and Y */ + + int Prog; /* progression order */ + int Comp; /* Component numbers */ + int Layer; /* number of layer */ + int Decomposition; /* number of decomposition */ + + int Main_head_end; /* Main header position */ + int codestream_size; /* codestream's size */ + + info_marker_t *marker; /* information concerning markers inside image [only one apparition] */ + info_marker_mul_t marker_mul; /* information concerning markers inside image [multiple apparition] */ + int num_marker; /* number of marker */ + + int num_packet_max; /* Maximum number of packet */ + + int num_max_tile_parts; /* Maximum number of tile-part */ + info_tile_t *tile; /* information concerning tiles inside image */ +} info_image_t; /* index struct */ + + +#endif diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/jp2.c b/contrib/menuetlibc/openjpeg/indexer_JPIP/jp2.c new file mode 100644 index 0000000000..ff2d22e2fa --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/jp2.c @@ -0,0 +1,302 @@ +/* + * Copyright (c) 2003-2004, Yannick Verschueren + * Copyright (c) 2003-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include +#include +#include + +#include "j2k.h" +#include "cio.h" +#include "tcd.h" +#include "int.h" + +#define JPIP_JPIP 0x6a706970 + +#define JP2_JP 0x6a502020 +#define JP2_FTYP 0x66747970 +#define JP2_JP2H 0x6a703268 +#define JP2_IHDR 0x69686472 +#define JP2_COLR 0x636f6c72 +#define JP2_JP2C 0x6a703263 +#define JP2_URL 0x75726c20 +#define JP2_DBTL 0x6474626c +#define JP2_BPCC 0x62706363 +#define JP2 0x6a703220 + + +void jp2_write_url(char *Idx_file) +{ + int len, lenp; + unsigned int i; + char str[256]; + + sprintf(str, "%s", Idx_file); + lenp=cio_tell(); + cio_skip(4); + cio_write(JP2_URL, 4); // DBTL + cio_write(0,1); // VERS + cio_write(0,3); // FLAG + + for (i=0; iy1-j2k_img->x0,4); // HEIGHT + cio_write(j2k_img->x1-j2k_img->x0,4); // WIDTH + cio_write(j2k_img->numcomps,2); // NC + + depth_0=j2k_img->comps[0].prec-1; + sign=j2k_img->comps[0].sgnd; + + for(i=1;inumcomps;i++) + { + depth=j2k_img->comps[i].prec-1; + sign=j2k_img->comps[i].sgnd; + if(depth_0!=depth) BPC_ok=0; + } + + if (BPC_ok) + cio_write(depth_0+(sign<<7),1); + else + cio_write(255,1); + + cio_write(7,1); // C : Always 7 + cio_write(1,1); // UnkC, colorspace unknow + cio_write(0,1); // IPR, no intellectual property + + len=cio_tell()-lenp; + cio_seek(lenp); + cio_write(len,4); // L + cio_seek(lenp+len); + + return BPC_ok; +} + +void jp2_write_bpcc(j2k_image_t *j2k_img) +{ + int len, lenp, i; + + lenp=cio_tell(); + cio_skip(4); + cio_write(JP2_BPCC, 4); // BPCC + + for(i=0;inumcomps;i++) + cio_write(j2k_img->comps[i].prec-1+(j2k_img->comps[i].sgnd<<7),1); + + len=cio_tell()-lenp; + cio_seek(lenp); + cio_write(len,4); // L + cio_seek(lenp+len); +} + +void jp2_write_colr(int BPC_ok, j2k_image_t *j2k_img) +{ + int len, lenp, meth; + + lenp=cio_tell(); + cio_skip(4); + cio_write(JP2_COLR, 4); // COLR + + if ((j2k_img->numcomps==1 || j2k_img->numcomps==3) && (BPC_ok && j2k_img->comps[0].prec==8)) + meth=1; + else + meth=2; + + cio_write(meth,1); // METH + cio_write(0,1); // PREC + cio_write(0,1); // APPROX + + if (meth==1) + cio_write(j2k_img->numcomps>1?16:17,4); // EnumCS + + if (meth==2) + cio_write(0,1); // PROFILE (??) + + len=cio_tell()-lenp; + cio_seek(lenp); + cio_write(len,4); // L + cio_seek(lenp+len); +} + +/* + * Write the JP2H box + * + * JP2 Header box + * + */ +void jp2_write_jp2h(j2k_image_t *j2k_img) +{ + int len, lenp, BPC_ok; + + lenp=cio_tell(); + cio_skip(4); + cio_write(JP2_JP2H, 4); /* JP2H */ + + BPC_ok=jp2_write_ihdr(j2k_img); + + if (!BPC_ok) + jp2_write_bpcc(j2k_img); + jp2_write_colr(BPC_ok, j2k_img); + + len=cio_tell()-lenp; + cio_seek(lenp); + cio_write(len,4); /* L */ + cio_seek(lenp+len); +} + +/* + * Write the FTYP box + * + * File type box + * + */ +void jp2_write_ftyp() +{ + int len, lenp; + + lenp=cio_tell(); + cio_skip(4); + cio_write(JP2_FTYP, 4); /* FTYP */ + + cio_write(JP2,4); /* BR */ + cio_write(0,4); /* MinV */ + cio_write(JP2,4); /* CL0 : JP2 */ + cio_write(JPIP_JPIP,4); /* CL1 : JPIP */ + + len=cio_tell()-lenp; + cio_seek(lenp); + cio_write(len,4); /* L */ + cio_seek(lenp+len); +} + +/* + * Read the FTYP box + * + * File type box + * + */ +void jp2_read_ftyp(int length) +{ + int BR, MinV, type, i; + + BR = cio_read(4); /* BR */ + MinV = cio_read(4); /* MinV */ + length-=8; + + for (i=length/4;i>0;i--) + type = cio_read(4); /* CLi : JP2, JPIP */ +} + +int jp2_write_jp2c(char *J2K_file) +{ + int len, lenp, totlen, i; + FILE *src; + char *j2kfile; + + lenp=cio_tell(); + cio_skip(4); + cio_write(JP2_JP2C, 4); // JP2C + + src=fopen(J2K_file, "rb"); + fseek(src, 0, SEEK_END); + totlen=ftell(src); + fseek(src, 0, SEEK_SET); + + j2kfile=(char*)malloc(totlen); + fread(j2kfile, 1, totlen, src); + fclose(src); + + for (i=0;i +#include +#include +#include +#include + +#include "j2k.h" +#include "cio.h" +#include "tcd.h" +#include "int.h" + +#define JPIP_CIDX 0x63696478 /* Codestream index */ +#define JPIP_CPTR 0x63707472 /* Codestream Finder Box */ +#define JPIP_MANF 0x6d616e66 /* Manifest Box */ +#define JPIP_FAIX 0x66616978 /* Fragment array Index box */ +#define JPIP_MHIX 0x6d686978 /* Main Header Index Table */ +#define JPIP_TPIX 0x74706978 /* Tile-part Index Table box */ +#define JPIP_THIX 0x74686978 /* Tile header Index Table box */ +#define JPIP_PPIX 0x70706978 /* Precinct Packet Index Table box */ +#define JPIP_PHIX 0x70686978 /* Packet Header index Table */ +#define JPIP_FIDX 0x66696478 /* File Index */ +#define JPIP_FPTR 0x66707472 /* File Finder */ +#define JPIP_PRXY 0x70727879 /* Proxy boxes */ +#define JPIP_IPTR 0x69707472 /* Index finder box */ +#define JPIP_PHLD 0x70686c64 /* Place holder */ + +#define JP2C 0x6a703263 + +//static info_marker_t marker_jpip[32], marker_local_jpip[32]; /* SIZE to precise ! */ +//static int num_marker_jpip, num_marker_local_jpip; + +/* + * Write the CPTR box + * + * Codestream finder box (box) + * + */ +void jpip_write_cptr(int offset, info_image_t img) +{ + int len, lenp; + + lenp=cio_tell(); + cio_skip(4); /* L [at the end] */ + cio_write(JPIP_CPTR,4); /* T */ + cio_write(0,2); /* DR A PRECISER !! */ + cio_write(0,2); /* CONT */ + cio_write(offset,8); /* COFF A PRECISER !! */ + cio_write(img.codestream_size,8); /* CLEN */ + len=cio_tell()-lenp; + cio_seek(lenp); + cio_write(len, 4); /* L */ + cio_seek(lenp+len); +} + +/* + * Read the CPTR box + * + * Codestream finder box (box) + * + */ +void jpip_read_cptr() +{ + int DR, CONT; + long long Coff, codestream_size; + + DR = cio_read(2); /* DR */ + CONT = cio_read(2); /* CONT */ + Coff = cio_read(8); /* COFF */ + codestream_size = cio_read(8); /* CLEN */ +} + +/* + * Write the MANF box + * + * Manifest box (box) + * + */ +void jpip_write_manf(int second, int v, info_marker_t *marker) +{ + int len, lenp, i; + lenp=cio_tell(); + cio_skip(4); /* L [at the end] */ + cio_write(JPIP_MANF,4); /* T */ + + if (second) /* Write only during the second pass */ + { + for(i=0;i= 0; i--) /* COC */ + { + cio_write(img.marker_mul.COC[i].type, 2); + cio_write(i, 2); + cio_write(img.marker_mul.COC[i].start_pos, 8); + cio_write(img.marker_mul.COC[i].len, 2); + } + + for(i = img.marker_mul.num_RGN - 1; i >= 0; i--) /* RGN */ + { + cio_write(img.marker_mul.RGN[i].type, 2); + cio_write(i, 2); + cio_write(img.marker_mul.RGN[i].start_pos, 8); + cio_write(img.marker_mul.RGN[i].len, 2); + } + + for(i = img.marker_mul.num_QCC - 1; i >= 0; i--) /* QCC */ + { + cio_write(img.marker_mul.QCC[i].type, 2); + cio_write(i, 2); + cio_write(img.marker_mul.QCC[i].start_pos, 8); + cio_write(img.marker_mul.QCC[i].len, 2); + } + + for(i = img.marker_mul.num_TLM - 1; i >= 0; i--) /* TLM */ + { + cio_write(img.marker_mul.TLM[i].type, 2); + cio_write(i, 2); + cio_write(img.marker_mul.TLM[i].start_pos, 8); + cio_write(img.marker_mul.TLM[i].len, 2); + } + + for(i = img.marker_mul.num_PLM - 1; i >= 0; i--) /* PLM */ + { + cio_write(img.marker_mul.PLM[i].type, 2); + cio_write(i, 2); + cio_write(img.marker_mul.PLM[i].start_pos, 8); + cio_write(img.marker_mul.PLM[i].len, 2); + } + + for(i = img.marker_mul.num_PPM - 1; i >= 0; i--) /* PPM */ + { + cio_write(img.marker_mul.PPM[i].type, 2); + cio_write(i, 2); + cio_write(img.marker_mul.PPM[i].start_pos, 8); + cio_write(img.marker_mul.PPM[i].len, 2); + } + + for(i = img.marker_mul.num_COM - 1; i >= 0; i--) /* COM */ + { + cio_write(img.marker_mul.COM[i].type, 2); + cio_write(i, 2); + cio_write(img.marker_mul.COM[i].start_pos, 8); + cio_write(img.marker_mul.COM[i].len, 2); + } + } + else /* TILE HEADER */ + { + tile = &img.tile[tileno]; + cio_write(tile->tile_parts[0].length_header, 8); /* TLEN */ + + for(i = 0; i < tile->num_marker; i++) /* Marker restricted to 1 apparition */ + { + cio_write(tile->marker[i].type, 2); + cio_write(0, 2); + cio_write(tile->marker[i].start_pos, 8); + cio_write(tile->marker[i].len, 2); + } + + /* Marker NOT restricted to 1 apparition */ + for(i = tile->marker_mul.num_COC - 1; i >= 0; i--) /* COC */ + { + cio_write(tile->marker_mul.COC[i].type, 2); + cio_write(i, 2); + cio_write(tile->marker_mul.COC[i].start_pos, 8); + cio_write(tile->marker_mul.COC[i].len, 2); + } + + for(i = tile->marker_mul.num_RGN - 1; i >= 0; i--) /* RGN */ + { + cio_write(tile->marker_mul.RGN[i].type, 2); + cio_write(i, 2); + cio_write(tile->marker_mul.RGN[i].start_pos, 8); + cio_write(tile->marker_mul.RGN[i].len, 2); + } + + for(i = tile->marker_mul.num_QCC - 1; i >= 0; i--) /* QCC */ + { + cio_write(tile->marker_mul.QCC[i].type, 2); + cio_write(i, 2); + cio_write(tile->marker_mul.QCC[i].start_pos, 8); + cio_write(tile->marker_mul.QCC[i].len, 2); + } + + for(i = tile->marker_mul.num_PLT - 1; i >= 0; i--) /* PLT */ + { + cio_write(tile->marker_mul.PLT[i].type,2); + cio_write(i,2); + cio_write(tile->marker_mul.PLT[i].start_pos,8); + cio_write(tile->marker_mul.PLT[i].len,2); + } + + for(i = tile->marker_mul.num_PPT - 1; i >= 0; i--) /* PPT */ + { + cio_write(tile->marker_mul.PPT[i].type, 2); + cio_write(i, 2); + cio_write(tile->marker_mul.PPT[i].start_pos, 8); + cio_write(tile->marker_mul.PPT[i].len, 2); + } + + for(i = tile->marker_mul.num_COM - 1; i >= 0; i--) /* COM */ + { + cio_write(tile->marker_mul.COM[i].type, 2); + cio_write(i, 2); + cio_write(tile->marker_mul.COM[i].start_pos, 8); + cio_write(tile->marker_mul.COM[i].len, 2); + } + } + + len=cio_tell()-lenp; + cio_seek(lenp); + cio_write(len, 4); /* L */ + cio_seek(lenp+len); + + return len; +} + +/* + * Read the MHIX box + * + * Main Header Index Table (box) + * + */ +void jpip_read_mhix(int len) +{ + int i, v, marker_type, marker_start_pos, marker_len, marker_remains; + + v = (len - 8) / 14; + + for (i=0; icompo[compno]; + int correction; + + num_packet=0; + + if(j2k_cp->tcps[tileno].csty&J2K_CP_CSTY_EPH) + correction=3; + else + correction=1; + for(resno=0;resnoreso[resno]; + for (precno=0;precnoprec[precno]; + for(layno=0;laynolayer[layno]; + cio_write(layer_Idx->offset,(version & 0x01)?8:4); /* start position */ + cio_write((layer_Idx->len_header-correction)?0:layer_Idx->len,(version & 0x01)?8:4); /* length */ + if (version & 0x02) + cio_write(0,4); /* Aux_i,j : Auxiliary value */ + num_packet++; + } + } + } + /* PADDING */ + while (num_packet < img.num_packet_max) + { + cio_write(0,(version & 0x01)?8:4); /* start position */ + cio_write(0,(version & 0x01)?8:4); /* length */ + if (version & 0x02) + cio_write(0,4); /* Aux_i,j : Auxiliary value */ + num_packet++; + } + } + + break; + + case 3: /* PHIX NOT FINISHED !! */ + cio_write(img.num_packet_max,(version & 0x01)?8:4); /* NMAX */ + cio_write(img.tw*img.th,(version & 0x01)?8:4); /* M */ + for(tileno=0;tilenocompo[compno]; + int correction; + + num_packet = 0; + if(j2k_cp->tcps[tileno].csty&J2K_CP_CSTY_EPH) + correction=3; + else + correction=1; + for(resno=0;resnoreso[resno]; + for (precno=0;precnoprec[precno]; + for(layno=0;laynolayer[layno]; + cio_write(layer_Idx->offset_header,(version & 0x01)?8:4); /* start position */ + cio_write((layer_Idx->len_header-correction)?0:layer_Idx->len_header,(version & 0x01)?8:4); /* length */ + if (version & 0x02) + cio_write(0,4); /* Aux_i,j : Auxiliary value */ + num_packet++; + } + } + } + /* PADDING */ + while (num_packettw*j2k_cp->th); + + for ( i = 0; i < 2 ; i++ ) + { + if (i) cio_seek(lenp); + + lenp = cio_tell(); + cio_skip(4); /* L [at the end] */ + cio_write(JPIP_THIX, 4); /* THIX */ + jpip_write_manf(i, j2k_cp->tw*j2k_cp->th, marker); + num_marker_local_jpip=img.Comp; + + for (tileno = 0; tileno < j2k_cp->tw*j2k_cp->th; tileno++) + { + marker[tileno].len = jpip_write_mhix(img, 1, tileno); + marker[tileno].type = JPIP_MHIX; + } + + len=cio_tell()-lenp; + cio_seek(lenp); + cio_write(len, 4); /* L */ + cio_seek(lenp+len); + } + + free(marker); + + return len; +} +/* + * Write the PPIX box + * + * Precinct Packet Index table box (superbox) + * + */ +int jpip_write_ppix(info_image_t img,j2k_cp_t *j2k_cp) +{ + int len, lenp, compno, i; + info_marker_t *marker; + int num_marker_local_jpip; + marker = (info_marker_t*)calloc(sizeof(info_marker_t), img.Comp); + + for (i=0;i<2;i++) + { + if (i) cio_seek(lenp); + + lenp=cio_tell(); + cio_skip(4); /* L [at the end] */ + cio_write(JPIP_PPIX, 4); /* PPIX */ + jpip_write_manf(i,img.Comp,marker); + num_marker_local_jpip=img.Comp; + + for (compno=0; compno +#include + + +/* */ +/* Create a packet iterator. */ +/* */ +pi_iterator_t *pi_create(j2k_image_t * img, j2k_cp_t * cp, int tileno) +{ + int p, q; + int compno, resno, pino; + int maxres = 0; + pi_iterator_t *pi; + j2k_tcp_t *tcp; + j2k_tccp_t *tccp; + + tcp = &cp->tcps[tileno]; + pi = (pi_iterator_t *) malloc((tcp->numpocs + 1) * sizeof(pi_iterator_t)); + + for (pino = 0; pino < tcp->numpocs + 1; pino++) { /* change */ + p = tileno % cp->tw; + q = tileno / cp->tw; + + pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, img->x0); + pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, img->y0); + pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, img->x1); + pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, img->y1); + pi[pino].numcomps = img->numcomps; + pi[pino].comps = (pi_comp_t *) malloc(img->numcomps * sizeof(pi_comp_t)); + + for (compno = 0; compno < pi->numcomps; compno++) { + int tcx0, tcy0, tcx1, tcy1; + pi_comp_t *comp = &pi[pino].comps[compno]; + tccp = &tcp->tccps[compno]; + comp->dx = img->comps[compno].dx; + comp->dy = img->comps[compno].dy; + comp->numresolutions = tccp->numresolutions; + comp->resolutions = + (pi_resolution_t *) malloc(comp->numresolutions * + sizeof(pi_resolution_t)); + tcx0 = int_ceildiv(pi->tx0, comp->dx); + tcy0 = int_ceildiv(pi->ty0, comp->dy); + tcx1 = int_ceildiv(pi->tx1, comp->dx); + tcy1 = int_ceildiv(pi->ty1, comp->dy); + if (comp->numresolutions > maxres) { + maxres = comp->numresolutions; + } + for (resno = 0; resno < comp->numresolutions; resno++) { + int levelno; + int rx0, ry0, rx1, ry1; + int px0, py0, px1, py1; + pi_resolution_t *res = &comp->resolutions[resno]; + if (tccp->csty & J2K_CCP_CSTY_PRT) { + res->pdx = tccp->prcw[resno]; + res->pdy = tccp->prch[resno]; + } else { + res->pdx = 15; + res->pdy = 15; + } + levelno = comp->numresolutions - 1 - resno; + rx0 = int_ceildivpow2(tcx0, levelno); + ry0 = int_ceildivpow2(tcy0, levelno); + rx1 = int_ceildivpow2(tcx1, levelno); + ry1 = int_ceildivpow2(tcy1, levelno); + px0 = int_floordivpow2(rx0, res->pdx) << res->pdx; + py0 = int_floordivpow2(ry0, res->pdy) << res->pdy; + px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx; + py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy; + res->pw = (px1 - px0) >> res->pdx; + res->ph = (py1 - py0) >> res->pdy; + } + } + + tccp = &tcp->tccps[0]; + pi[pino].step_p=1; + pi[pino].step_c=100*pi[pino].step_p; + pi[pino].step_r=img->numcomps*pi[pino].step_c; + pi[pino].step_l=maxres*pi[pino].step_r; + + if (pino==0) + pi[pino].include=(short int*)calloc(img->numcomps*maxres*tcp->numlayers*100,sizeof(short int)); + else + pi[pino].include=pi[pino-1].include; + + /*if (pino == tcp->numpocs) {*/ + if (tcp->POC == 0) { + pi[pino].first = 1; + pi[pino].poc.resno0 = 0; + pi[pino].poc.compno0 = 0; + pi[pino].poc.layno1 = tcp->numlayers; + pi[pino].poc.resno1 = maxres; + pi[pino].poc.compno1 = img->numcomps; + pi[pino].poc.prg = tcp->prg; + } else { + pi[pino].first = 1; + pi[pino].poc.resno0 = tcp->pocs[pino].resno0; + pi[pino].poc.compno0 = tcp->pocs[pino].compno0; + pi[pino].poc.layno1 = tcp->pocs[pino].layno1; + pi[pino].poc.resno1 = tcp->pocs[pino].resno1; + pi[pino].poc.compno1 = tcp->pocs[pino].compno1; + pi[pino].poc.prg = tcp->pocs[pino].prg; + } + } + return pi; +} + +/* */ +/* Get next packet in layer=resolution-component-precinct order. */ +/* */ +int pi_next_lrcp(pi_iterator_t * pi) +{ + pi_comp_t *comp; + pi_resolution_t *res; + + if (!pi->first) { + comp = &pi->comps[pi->compno]; + res = &comp->resolutions[pi->resno]; + goto skip; + } else { + pi->first = 0; + } + for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) { + for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; + pi->resno++) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; + pi->compno++) { + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolutions) { + + continue; + } + res = &comp->resolutions[pi->resno]; + for (pi->precno = 0; pi->precno < res->pw * res->ph; pi->precno++) { + if (!pi->include[pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p]){ + pi->include[pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p] = 1; + return 1; + } + skip:; + } + } + } + } + return 0; +} + +/* */ +/* Get next packet in resolution-layer-component-precinct order. */ +/* */ +int pi_next_rlcp(pi_iterator_t * pi) +{ + pi_comp_t *comp; + pi_resolution_t *res; + if (!pi->first) { + comp = &pi->comps[pi->compno]; + res = &comp->resolutions[pi->resno]; + goto skip; + } else { + pi->first = 0; + } + for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { + for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; + pi->compno++) { + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolutions) { + continue; + } + res = &comp->resolutions[pi->resno]; + for (pi->precno = 0; pi->precno < res->pw * res->ph; pi->precno++) { + if (!pi->include[pi->layno*pi->step_l+pi->resno*pi->step_r+pi->compno*pi->step_c+pi->precno*pi->step_p]){ + pi->include[pi->layno*pi->step_l+pi->resno*pi->step_r+pi->compno*pi->step_c+pi->precno*pi->step_p] = 1; + return 1; + } + skip:; + } + } + } + } + return 0; +} + +/* */ +/* Get next packet in resolution-precinct-component-layer order. */ +/* */ +int pi_next_rpcl(pi_iterator_t * pi) +{ + pi_comp_t *comp; + pi_resolution_t *res; + if (!pi->first) { + goto skip; + } else { + int compno, resno; + pi->first = 0; + pi->dx = 0; + pi->dy = 0; + for (compno = 0; compno < pi->numcomps; compno++) { + comp = &pi->comps[compno]; + for (resno = 0; resno < comp->numresolutions; resno++) { + int dx, dy; + res = &comp->resolutions[resno]; + dx = + comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); + dy = + comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); + pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); + pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); + } + } + } + for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { + for (pi->y = pi->ty0; pi->y < pi->ty1; + pi->y += pi->dy - (pi->y % pi->dy)) { + for (pi->x = pi->tx0; pi->x < pi->tx1; + pi->x += pi->dx - (pi->x % pi->dx)) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; + pi->compno++) { + int levelno; + int trx0, try0; + int rpx, rpy; + int prci, prcj; + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolutions) { + continue; + } + res = &comp->resolutions[pi->resno]; + levelno = comp->numresolutions - 1 - pi->resno; + trx0 = int_ceildiv(pi->tx0, comp->dx << levelno); + try0 = int_ceildiv(pi->ty0, comp->dy << levelno); + rpx = res->pdx + levelno; + rpy = res->pdy + levelno; + if (! + (pi->x % (comp->dx << rpx) == 0 + || (pi->x == pi->tx0 && (trx0 << levelno) % (1 << rpx)))) { + continue; + } + if (! + (pi->y % (comp->dy << rpy) == 0 + || (pi->y == pi->ty0 && (try0 << levelno) % (1 << rpx)))) { + continue; + } + prci = + int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), + res->pdx) - int_floordivpow2(trx0, res->pdx); + prcj = + int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), + res->pdy) - int_floordivpow2(try0, res->pdy); + pi->precno = prci + prcj * res->pw; + for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) { + if (!pi->include[pi->layno*pi->step_l+pi->resno*pi->step_r+pi->compno*pi->step_c+pi->precno*pi->step_p]){ + pi->include[pi->layno*pi->step_l+pi->resno*pi->step_r+pi->compno*pi->step_c+pi->precno*pi->step_p] = 1; + return 1; + } + skip:; + } + } + } + } + } + return 0; +} + +/* */ +/* Get next packet in precinct-component-resolution-layer order. */ +/* */ +int pi_next_pcrl(pi_iterator_t * pi) +{ + pi_comp_t *comp; + pi_resolution_t *res; + if (!pi->first) { + comp = &pi->comps[pi->compno]; + goto skip; + } else { + int compno, resno; + pi->first = 0; + pi->dx = 0; + pi->dy = 0; + for (compno = 0; compno < pi->numcomps; compno++) { + comp = &pi->comps[compno]; + for (resno = 0; resno < comp->numresolutions; resno++) { + int dx, dy; + res = &comp->resolutions[resno]; + dx = + comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); + dy = + comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); + pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); + pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); + } + } + } + for (pi->y = pi->ty0; pi->y < pi->ty1; + pi->y += pi->dy - (pi->y % pi->dy)) { + for (pi->x = pi->tx0; pi->x < pi->tx1; + pi->x += pi->dx - (pi->x % pi->dx)) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; + pi->compno++) { + comp = &pi->comps[pi->compno]; + for (pi->resno = pi->poc.resno0; + pi->resno < int_min(pi->poc.resno1, comp->numresolutions); + pi->resno++) { + int levelno; + int trx0, try0; + int rpx, rpy; + int prci, prcj; + res = &comp->resolutions[pi->resno]; + levelno = comp->numresolutions - 1 - pi->resno; + trx0 = int_ceildiv(pi->tx0, comp->dx << levelno); + try0 = int_ceildiv(pi->ty0, comp->dy << levelno); + rpx = res->pdx + levelno; + rpy = res->pdy + levelno; + if (! + (pi->x % (comp->dx << rpx) == 0 + || (pi->x == pi->tx0 && (trx0 << levelno) % (1 << rpx)))) { + continue; + } + if (! + (pi->y % (comp->dy << rpy) == 0 + || (pi->y == pi->ty0 && (try0 << levelno) % (1 << rpx)))) { + continue; + } + prci = + int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), + res->pdx) - int_floordivpow2(trx0, res->pdx); + prcj = + int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), + res->pdy) - int_floordivpow2(try0, res->pdy); + pi->precno = prci + prcj * res->pw; + for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) { + if (! pi->include[pi->layno*pi->step_l+pi->resno*pi->step_r+pi->compno*pi->step_c+pi->precno*pi->step_p]){ + pi->include[pi->layno*pi->step_l+pi->resno*pi->step_r+pi->compno*pi->step_c+pi->precno*pi->step_p] = 1; + return 1; + } + skip:; + } + } + } + } + } + return 0; +} + +/* */ +/* Get next packet in component-precinct-resolution-layer order. */ +/* */ +int pi_next_cprl(pi_iterator_t * pi) +{ + pi_comp_t *comp; + pi_resolution_t *res; + if (!pi->first) { + comp = &pi->comps[pi->compno]; + goto skip; + } else { + pi->first = 0; + } + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; + pi->compno++) { + int resno; + comp = &pi->comps[pi->compno]; + pi->dx = 0; + pi->dy = 0; + for (resno = 0; resno < comp->numresolutions; resno++) { + int dx, dy; + res = &comp->resolutions[resno]; + dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); + dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); + pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); + pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); + } + for (pi->y = pi->ty0; pi->y < pi->ty1; + pi->y += pi->dy - (pi->y % pi->dy)) { + for (pi->x = pi->tx0; pi->x < pi->tx1; + pi->x += pi->dx - (pi->x % pi->dx)) { + for (pi->resno = pi->poc.resno0; + pi->resno < int_min(pi->poc.resno1, comp->numresolutions); + pi->resno++) { + int levelno; + int trx0, try0; + int rpx, rpy; + int prci, prcj; + res = &comp->resolutions[pi->resno]; + levelno = comp->numresolutions - 1 - pi->resno; + trx0 = int_ceildiv(pi->tx0, comp->dx << levelno); + try0 = int_ceildiv(pi->ty0, comp->dy << levelno); + rpx = res->pdx + levelno; + rpy = res->pdy + levelno; + if (! + (pi->x % (comp->dx << rpx) == 0 + || (pi->x == pi->tx0 && (trx0 << levelno) % (1 << rpx)))) { + continue; + } + if (! + (pi->y % (comp->dy << rpy) == 0 + || (pi->y == pi->ty0 && (try0 << levelno) % (1 << rpx)))) { + continue; + } + prci = + int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), + res->pdx) - int_floordivpow2(trx0, res->pdx); + prcj = + int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), + res->pdy) - int_floordivpow2(try0, res->pdy); + pi->precno = prci + prcj * res->pw; + for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) { + if (! pi->include[pi->layno*pi->step_l+pi->resno*pi->step_r+pi->compno*pi->step_c+pi->precno*pi->step_p]){ + pi->include[pi->layno*pi->step_l+pi->resno*pi->step_r+pi->compno*pi->step_c+pi->precno*pi->step_p] = 1; + return 1; + } + skip:; + } + } + } + } + } + return 0; +} + +/* */ +/* Get next packet. */ +/* */ +int pi_next(pi_iterator_t * pi) +{ + switch (pi->poc.prg) { + case 0: + return pi_next_lrcp(pi); + case 1: + return pi_next_rlcp(pi); + case 2: + return pi_next_rpcl(pi); + case 3: + return pi_next_pcrl(pi); + case 4: + return pi_next_cprl(pi); + } + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/pi.h b/contrib/menuetlibc/openjpeg/indexer_JPIP/pi.h new file mode 100644 index 0000000000..b300b9e341 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/pi.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __PI_H +#define __PI_H + +#include "j2k.h" +#include "tcd.h" + +typedef struct { + int pdx, pdy; + int pw, ph; +} pi_resolution_t; + +typedef struct { + int dx, dy; + int numresolutions; + pi_resolution_t *resolutions; +} pi_comp_t; + +typedef struct { + short int *include; + int step_l, step_r, step_c, step_p; + int compno, resno, precno, layno; /* component, resolution, precinct and layer that indentify the packet */ + int first; + j2k_poc_t poc; + int numcomps; + pi_comp_t *comps; + int tx0, ty0, tx1, ty1; + int x, y, dx, dy; +} pi_iterator_t; /* packet iterator */ + +/* + * Create a packet iterator + * img: raw image for which the packets will be listed + * cp: coding paremeters + * tileno: number that identifies the tile for which to list the packets + * return value: returns a packet iterator that points to the first packet of the tile + */ +pi_iterator_t *pi_create(j2k_image_t * img, j2k_cp_t * cp, int tileno); + +/* + * Modify the packet iterator to point to the next packet + * pi: packet iterator to modify + * return value: returns 0 if pi pointed to the last packet or else returns 1 + */ +int pi_next(pi_iterator_t * pi); + +#endif diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/t2.c b/contrib/menuetlibc/openjpeg/indexer_JPIP/t2.c new file mode 100644 index 0000000000..14a44bea0e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/t2.c @@ -0,0 +1,389 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "t2.h" +#include "tcd.h" +#include "bio.h" +#include "j2k.h" +#include "pi.h" +#include "tgt.h" +#include "int.h" +#include "cio.h" +#include +#include +#include +#include + +#define RESTART 0x04 + +extern jmp_buf j2k_error; + +int t2_getcommacode() { + int n; + for (n=0; bio_read(1); n++) {} + return n; +} + +int t2_getnumpasses() +{ + int n; + if (!bio_read(1)) return 1; + if (!bio_read(1)) return 2; + if ((n=bio_read(2))!=3) return 3+n; + if ((n=bio_read(5))!=31) return 6+n; + return 37+bio_read(7); +} + +void t2_init_seg(tcd_seg_t *seg, int cblksty) { + seg->numpasses=0; + seg->len=0; + seg->maxpasses=cblksty&J2K_CCP_CBLKSTY_TERMALL?1:100; +} + +int t2_decode_packet(unsigned char *src, int len, tcd_tile_t *tile, j2k_cp_t * cp, j2k_tcp_t *tcp, int compno, int resno, int precno, int layno, info_layer_t *layer_Idx) { + int bandno, cblkno; + tcd_tilecomp_t *tilec = &tile->comps[compno]; + tcd_resolution_t *res = &tilec->resolutions[resno]; + unsigned char *c = src; + unsigned char *d = c; + int e; + int present; + + if (layno == 0) { + for (bandno = 0; bandno < res->numbands; bandno++) { + tcd_band_t *band = &res->bands[bandno]; + tcd_precinct_t *prc = &band->precincts[precno]; + tgt_reset(prc->incltree); + tgt_reset(prc->imsbtree); + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + tcd_cblk_t *cblk = &prc->cblks[cblkno]; + cblk->numsegs = 0; + } + } + } + /* INDEX */ + layer_Idx->len_header = 0; + + /* When the marker PPT/PPM is used the packet header are store in PPT/PPM marker + This part deal with this caracteristic + step 1: Read packet header in the saved structure + step 2: (futher) return to codestream for decoding */ + if (cp->ppm == 1) /* PPM */ + { + c = cp->ppm_data; + d = c; + bio_init_dec(c, 1000); + } else + { + if (tcp->ppt == 1) /* PPT */ + { + c = tcp->ppt_data; + d = c; + bio_init_dec(c, 1000); + } else /* Normal Case */ + { + if (tcp->csty & J2K_CP_CSTY_SOP) + { + if ((*c) != 255 || (*(c+1) != 145)) {printf("Error : expected SOP marker [1]!!!\n");} + c += 6; + } + bio_init_dec(c, src + len - c); + layer_Idx->len_header = -6; + } + } + + present = bio_read(1); + + if (!present) + { + bio_inalign(); + /* Normal case */ + c += bio_numbytes(); + if (tcp->csty & J2K_CP_CSTY_EPH) + { + if ((*c) != 255 || (*(c+1) != 146)) {printf("Error : expected EPH marker [1]!!!\n");} + c += 2; + } + /* INDEX */ + layer_Idx->len_header += (c-d); + + /* PPT and PPM dealing */ + if (cp->ppm == 1) /* PPM */ + { + cp->ppm_data = c; + return 0; + } + if (tcp->ppt == 1) /* PPT */ + { + tcp->ppt_data = c; + return 0; + } + return c - src; + } + + for (bandno=0; bandnonumbands; bandno++) { + tcd_band_t *band = &res->bands[bandno]; + tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + int included, increment, n; + tcd_cblk_t *cblk = &prc->cblks[cblkno]; + tcd_seg_t *seg; + if (!cblk->numsegs) { + included = tgt_decode(prc->incltree, cblkno, layno+1); + } else { + included = bio_read(1); + } + if (!included) { + cblk->numnewpasses = 0; + continue; + } + if (!cblk->numsegs) { + int i, numimsbs; + for (i = 0; !tgt_decode(prc->imsbtree, cblkno, i); i++) {} + numimsbs = i-1; + cblk->numbps = band->numbps - numimsbs; + cblk->numlenbits = 3; + } + cblk->numnewpasses = t2_getnumpasses(); + increment = t2_getcommacode(); + cblk->numlenbits += increment; + if (!cblk->numsegs) { + seg = &cblk->segs[0]; + t2_init_seg(seg, tcp->tccps[compno].cblksty); + } else { + seg = &cblk->segs[cblk->numsegs - 1]; + if (seg->numpasses == seg->maxpasses) { + t2_init_seg(++seg, tcp->tccps[compno].cblksty); + } + } + n = cblk->numnewpasses; + do { + seg->numnewpasses = int_min(seg->maxpasses-seg->numpasses, n); + seg->newlen = bio_read(cblk->numlenbits + int_floorlog2(seg->numnewpasses)); + n -= seg->numnewpasses; + if (n > 0) { + t2_init_seg(++seg, tcp->tccps[compno].cblksty); + } + } while (n > 0); + } + } + if(bio_inalign()) return -999; + c += bio_numbytes(); + + if (tcp->csty & J2K_CP_CSTY_EPH) { /* EPH marker */ + if ((*c) != 255 || (*(c+1) != 146)) {printf("Error : expected EPH marker [2]!!!\n"); } + c += 2; + } + + /* INDEX */ + layer_Idx->len_header += (c-d); + + /* PPT Step 2 : see above for details */ + if (cp->ppm == 1) + { + cp->ppm_data = c; /* Update pointer */ + + /* INDEX */ + layer_Idx->len_header = c-d; + + c = src; + d = c; + if (tcp->csty & J2K_CP_CSTY_SOP) + { + if ((*c) != 255 || (*(c+1) != 145)) {printf("Error : expected SOP marker [2] !!!\n"); } + c += 6; + } + bio_init_dec(c, src + len - c); + } else + { + if (tcp->ppt == 1) + { + tcp->ppt_data = c; /* Update pointer */ + /* INDEX */ + layer_Idx->len_header = c-d; + + c = src; + d = c; + if (tcp->csty & J2K_CP_CSTY_SOP) /* SOP marker */ + { + if ((*c) != 255 || (*(c+1) != 145)) {printf("Error : expected SOP marker [2] !!!\n"); } + c += 6; + } + bio_init_dec(c, src + len - c); + + } + } + + for (bandno = 0; bandno < res->numbands; bandno++) { + tcd_band_t *band = &res->bands[bandno]; + tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cw*prc->ch; cblkno++) { + tcd_cblk_t *cblk = &prc->cblks[cblkno]; + tcd_seg_t *seg; + if (!cblk->numnewpasses) continue; + if (!cblk->numsegs) { + seg = &cblk->segs[cblk->numsegs++]; + cblk->len = 0; + } else { + seg = &cblk->segs[cblk->numsegs-1]; + if (seg->numpasses == seg->maxpasses) { + seg++; + cblk->numsegs++; + } + } + do { + if (c + seg->newlen > src + len) return -999; + memcpy(cblk->data + cblk->len, c, seg->newlen); + if (seg->numpasses == 0) { + seg->data = cblk->data + cblk->len; + } + c += seg->newlen; + cblk->len += seg->newlen; + seg->len += seg->newlen; + seg->numpasses += seg->numnewpasses; + cblk->numnewpasses -= seg->numnewpasses; + if (cblk->numnewpasses > 0) { + seg++; + cblk->numsegs++; + } + } while (cblk->numnewpasses > 0); + } + } + /* */ + e = c-d; + layer_Idx->len = e; + /* */ + + return c-src; +} + +void t2_init_info_packets(info_image_t *img, j2k_cp_t *cp) +{ + int compno, tileno, resno, precno, layno; + + for(compno = 0; compno < img->Comp; compno++) + { + for(tileno = 0; tileno < img->tw*img->th; tileno++) + { + info_tile_t *tile_Idx = &img->tile[tileno]; + info_compo_t *compo_Idx = &tile_Idx->compo[compno]; + for(resno = 0; resno < img->Decomposition + 1 ; resno++) + { + info_reso_t *reso_Idx = &compo_Idx->reso[resno]; + for (precno = 0; precno < img->tile[tileno].pw * img->tile[tileno].ph; precno++) + { + info_prec_t *prec_Idx = &reso_Idx->prec[precno]; + for(layno = 0; layno < img->Layer ; layno++) + { + info_layer_t *layer_Idx = &prec_Idx->layer[layno]; + layer_Idx->offset = 0; /* start position */ + layer_Idx->len_header = 0; /* length */ + } + } + } + } + } +} + +int t2_decode_packets(unsigned char *src, int len, j2k_image_t *img, j2k_cp_t *cp, int tileno, tcd_tile_t *tile, info_image_t *imgg) { + unsigned char *c = src; + pi_iterator_t *pi; + int pino, compno,e; + int partno; + info_tile_part_t *tile_part; + int position; + int length_read; + info_tile_t *tile_Idx; + info_compo_t *compo_Idx; + info_reso_t *reso_Idx; + info_prec_t *prec_Idx; + info_layer_t *layer_Idx; + + t2_init_info_packets(imgg, cp); /* Initialize the packets information : LEN and OFFSET to 0 */ + + tile_Idx = &imgg->tile[tileno]; + tile_Idx->num_packet = 0; + pi = pi_create(img, cp, tileno); + partno = 0; + tile_part = &tile_Idx->tile_parts[partno]; + position = tile_part->end_header + 1; + length_read = 0; + + for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) + { + while (pi_next(&pi[pino])) + { + compo_Idx = &tile_Idx->compo[pi[pino].compno]; + reso_Idx = &compo_Idx->reso[pi[pino].resno]; + prec_Idx = &reso_Idx->prec[pi[pino].precno]; + layer_Idx = &prec_Idx->layer[pi[pino].layno]; + + layer_Idx->offset = position; + layer_Idx->offset_header = position; + + e = t2_decode_packet(c, src+len-c, tile, cp, &cp->tcps[tileno], pi[pino].compno, pi[pino].resno, pi[pino].precno, pi[pino].layno,layer_Idx); + if (e == -999) + { + break; + } else + c += e; + position += e; + + /* Update position in case of multiple tile-parts for a tile >> */ + length_read += e; + if (length_read >= (tile_part->end_pos - tile_part->end_header)) + { + partno++; + tile_part = &tile_Idx->tile_parts[partno]; + position = tile_part->end_header + 1; + length_read = 0; + } + /* << end_update */ + + tile_Idx->num_packet++; + } + + // FREE space memory taken by pi + for (compno = 0; compno < pi[pino].numcomps; compno++) + { + free(pi[pino].comps[compno].resolutions); + } + free(pi[pino].comps); + } + + free(pi[0].include); + free(pi); + + if (e==-999) + return e; + else + { + imgg->num_packet_max=int_max(imgg->num_packet_max,tile_Idx->num_packet); + return c-src; + } +} diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/t2.h b/contrib/menuetlibc/openjpeg/indexer_JPIP/t2.h new file mode 100644 index 0000000000..f495107947 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/t2.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __T2_H +#define __T2_H + +#include "tcd.h" +#include "j2k.h" + +/* + * Decode the packets of a tile from a source buffer + * src: the source buffer + * len: length of the source buffer + * img: destination image + * cp: image coding parameters + * tileno: number that identifies the tile for which to decode the packets + * tile: tile for which to decode the packets + */ +int t2_decode_packets(unsigned char *src, int len, j2k_image_t *img, j2k_cp_t *cp, int tileno, tcd_tile_t *tile, info_image_t *imgg); + +#endif diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/tcd.c b/contrib/menuetlibc/openjpeg/indexer_JPIP/tcd.c new file mode 100644 index 0000000000..c4045c7330 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/tcd.c @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "tcd.h" +#include "int.h" +#include "t2.h" +#include +#include +#include +#include +#include +#include +#include + +static tcd_image_t tcd_image; + +static j2k_image_t *tcd_img; +static j2k_cp_t *tcd_cp; + +extern jmp_buf j2k_error; + +void tcd_init(j2k_image_t *img, j2k_cp_t *cp, info_image_t *imgg) { + int tileno, compno, resno, bandno, precno, cblkno; + tcd_img=img; + tcd_cp=cp; + tcd_image.tw=cp->tw; + tcd_image.th=cp->th; + tcd_image.tiles=(tcd_tile_t*)malloc(cp->tw*cp->th*sizeof(tcd_tile_t)); + for (tileno=0; tilenotw*cp->th; tileno++) { + j2k_tcp_t *tcp=&cp->tcps[tileno]; + tcd_tile_t *tile=&tcd_image.tiles[tileno]; + // cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) + int p=tileno%cp->tw; // si numerotation matricielle .. + int q=tileno/cp->tw; // .. coordonnees de la tile (q,p) q pour ligne et p pour colonne + info_tile_t *tile_Idx=&imgg->tile[tileno]; // INDEX + + // 4 borders of the tile rescale on the image if necessary + tile->x0=int_max(cp->tx0+p*cp->tdx, img->x0); + tile->y0=int_max(cp->ty0+q*cp->tdy, img->y0); + tile->x1=int_min(cp->tx0+(p+1)*cp->tdx, img->x1); + tile->y1=int_min(cp->ty0+(q+1)*cp->tdy, img->y1); + + tile->numcomps=img->numcomps; + tile->comps=(tcd_tilecomp_t*)malloc(img->numcomps*sizeof(tcd_tilecomp_t)); + tile_Idx->compo=(info_compo_t*)malloc(img->numcomps*sizeof(info_compo_t)); // INDEX + for (compno=0; compnonumcomps; compno++) { + j2k_tccp_t *tccp=&tcp->tccps[compno]; + tcd_tilecomp_t *tilec=&tile->comps[compno]; + info_compo_t *compo_Idx=&tile_Idx->compo[compno]; // INDEX + + // border of each tile component (global) + tilec->x0=int_ceildiv(tile->x0, img->comps[compno].dx); + tilec->y0=int_ceildiv(tile->y0, img->comps[compno].dy); + tilec->x1=int_ceildiv(tile->x1, img->comps[compno].dx); + tilec->y1=int_ceildiv(tile->y1, img->comps[compno].dy); + + tilec->data=(int*)malloc(sizeof(int)*(tilec->x1-tilec->x0)*(tilec->y1-tilec->y0)); + tilec->numresolutions=tccp->numresolutions; + tilec->resolutions=(tcd_resolution_t*)malloc(tilec->numresolutions*sizeof(tcd_resolution_t)); + compo_Idx->reso=(info_reso_t*)malloc(tilec->numresolutions*sizeof(info_reso_t)); // INDEX + for (resno=0; resnonumresolutions; resno++) { + int pdx, pdy; + int levelno=tilec->numresolutions-1-resno; + int tlprcxstart, tlprcystart, brprcxend, brprcyend; + int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend; + int cbgwidthexpn, cbgheightexpn; + int cblkwidthexpn, cblkheightexpn; + tcd_resolution_t *res=&tilec->resolutions[resno]; + info_reso_t *res_Idx=&compo_Idx->reso[resno]; // INDEX + int precno_Idx; // INDEX + + // border for each resolution level (global) + res->x0=int_ceildivpow2(tilec->x0, levelno); + res->y0=int_ceildivpow2(tilec->y0, levelno); + res->x1=int_ceildivpow2(tilec->x1, levelno); + res->y1=int_ceildivpow2(tilec->y1, levelno); + + res->numbands=resno==0?1:3; + // p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) + if (tccp->csty&J2K_CCP_CSTY_PRT) { + pdx=tccp->prcw[resno]; + pdy=tccp->prch[resno]; + } else { + pdx=15; + pdy=15; + } + // p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000) + tlprcxstart=int_floordivpow2(res->x0, pdx)<y0, pdy)<x1, pdx)<y1, pdy)<pw=(brprcxend-tlprcxstart)>>pdx; + res->ph=(brprcyend-tlprcystart)>>pdy; + + // + imgg->tile[tileno].pw=res->pw; + imgg->tile[tileno].ph=res->ph; + + res_Idx->prec=(info_prec_t*)malloc(res->pw*res->ph*sizeof(info_prec_t)); + for (precno_Idx=0;precno_Idxpw*res->ph;precno_Idx++) + { + info_prec_t *prec_Idx = &res_Idx->prec[precno_Idx]; + prec_Idx->layer=(info_layer_t*)malloc(imgg->Layer*sizeof(info_layer_t)); + } + + imgg->pw=res->pw; // old parser version + imgg->ph=res->ph; // old parser version + imgg->pdx=1<pdy=1< + + if (resno==0) { + tlcbgxstart=tlprcxstart; + tlcbgystart=tlprcystart; + brcbgxend=brprcxend; + brcbgyend=brprcyend; + cbgwidthexpn=pdx; + cbgheightexpn=pdy; + } else { + tlcbgxstart=int_ceildivpow2(tlprcxstart, 1); + tlcbgystart=int_ceildivpow2(tlprcystart, 1); + brcbgxend=int_ceildivpow2(brprcxend, 1); + brcbgyend=int_ceildivpow2(brprcyend, 1); + cbgwidthexpn=pdx-1; + cbgheightexpn=pdy-1; + } + + cblkwidthexpn=int_min(tccp->cblkw, cbgwidthexpn); + cblkheightexpn=int_min(tccp->cblkh, cbgheightexpn); + + for (bandno=0; bandnonumbands; bandno++) { + int x0b, y0b; + tcd_band_t *band=&res->bands[bandno]; + band->bandno=resno==0?0:bandno+1; + x0b=(band->bandno==1)||(band->bandno==3)?1:0; + y0b=(band->bandno==2)||(band->bandno==3)?1:0; + + if (band->bandno==0) { + // band border (global) + band->x0=int_ceildivpow2(tilec->x0, levelno); + band->y0=int_ceildivpow2(tilec->y0, levelno); + band->x1=int_ceildivpow2(tilec->x1, levelno); + band->y1=int_ceildivpow2(tilec->y1, levelno); + } else { + // band border (global) + band->x0=int_ceildivpow2(tilec->x0-(1<y0=int_ceildivpow2(tilec->y0-(1<x1=int_ceildivpow2(tilec->x1-(1<y1=int_ceildivpow2(tilec->y1-(1<precincts=(tcd_precinct_t*)malloc(res->pw*res->ph*sizeof(tcd_precinct_t)); + + for (precno=0; precnopw*res->ph; precno++) { + int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend; + int cbgxstart=tlcbgxstart+(precno%res->pw)*(1<pw)*(1<precincts[precno]; + // precinct size (global) + prc->x0=int_max(cbgxstart, band->x0); + prc->y0=int_max(cbgystart, band->y0); + prc->x1=int_min(cbgxend, band->x1); + prc->y1=int_min(cbgyend, band->y1); + + tlcblkxstart=int_floordivpow2(prc->x0, cblkwidthexpn)<y0, cblkheightexpn)<x1, cblkwidthexpn)<y1, cblkheightexpn)<cw=(brcblkxend-tlcblkxstart)>>cblkwidthexpn; + prc->ch=(brcblkyend-tlcblkystart)>>cblkheightexpn; + + prc->cblks=(tcd_cblk_t*)malloc(prc->cw*prc->ch*sizeof(tcd_cblk_t)); + + prc->incltree=tgt_create(prc->cw, prc->ch); + prc->imsbtree=tgt_create(prc->cw, prc->ch); + + for (cblkno=0; cblknocw*prc->ch; cblkno++) { + int cblkxstart=tlcblkxstart+(cblkno%prc->cw)*(1<cw)*(1<cblks[cblkno]; + // code-block size (global) + cblk->x0=int_max(cblkxstart, prc->x0); + cblk->y0=int_max(cblkystart, prc->y0); + cblk->x1=int_min(cblkxend, prc->x1); + cblk->y1=int_min(cblkyend, prc->y1); + } + } + } + } + } + } +} + + +void tcd_free(j2k_image_t *img, j2k_cp_t *cp) { + int tileno, compno, resno, bandno, precno; + tcd_img=img; + tcd_cp=cp; + tcd_image.tw=cp->tw; + tcd_image.th=cp->th; + for (tileno=0; tilenotcps[curtileno]; + tcd_tile_t *tile=&tcd_image.tiles[tileno]; + for (compno=0; compnonumcomps; compno++) + { + tcd_tilecomp_t *tilec=&tile->comps[compno]; + for (resno=0; resnonumresolutions; resno++) + { + tcd_resolution_t *res=&tilec->resolutions[resno]; + for (bandno=0; bandnonumbands; bandno++) + { + tcd_band_t *band=&res->bands[bandno]; + for (precno=0; precnopw*res->ph; precno++) + { + tcd_precinct_t *prc=&band->precincts[precno]; + + if (prc->incltree!=NULL) + tgt_destroy(prc->incltree); + if (prc->imsbtree!=NULL) + tgt_destroy(prc->imsbtree); + free(prc->cblks); + } // for (precno + free(band->precincts); + } // for (bandno + } // for (resno + free(tilec->resolutions); + } // for (compno + free(tile->comps); + } // for (tileno + free(tcd_image.tiles); +} + + +int tcd_decode_tile(unsigned char *src, int len, int tileno, info_image_t *imgg) { + int l; + int eof=0; + tcd_tile_t *tile; + + tile = &tcd_image.tiles[tileno]; + + l = t2_decode_packets(src, len, tcd_img, tcd_cp, tileno, tile, imgg); + + if (l==-999) + { + eof=1; + fprintf(stderr, "tcd_decode: incomplete bistream\n"); + } + + if (eof) { + longjmp(j2k_error, 1); + } + + l=1; + return l; +} diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/tcd.h b/contrib/menuetlibc/openjpeg/indexer_JPIP/tcd.h new file mode 100644 index 0000000000..9a31723ba9 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/tcd.h @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __TCD_H +#define __TCD_H + +#include "j2k.h" +#include "tgt.h" + +typedef struct { + int numpasses; + int len; + unsigned char *data; + int maxpasses; + int numnewpasses; + int newlen; +} tcd_seg_t; + +typedef struct { + int rate; + double distortiondec; +} tcd_pass_t; + +typedef struct { + int numpasses; + int len; + unsigned char *data; +} tcd_layer_t; + +typedef struct { + int x0, y0, x1, y1; + int numbps; + int numlenbits; + int len; + int numpasses; + int numnewpasses; + int numsegs; + tcd_seg_t segs[100]; + unsigned char data[8192]; + int numpassesinlayers; + tcd_layer_t layers[100]; + int totalpasses; + tcd_pass_t passes[100]; +} tcd_cblk_t; + +typedef struct { + int x0, y0, x1, y1; + int cw, ch; + tcd_cblk_t *cblks; + tgt_tree_t *incltree; + tgt_tree_t *imsbtree; +} tcd_precinct_t; + +typedef struct { + int x0, y0, x1, y1; + int bandno; + tcd_precinct_t *precincts; + int numbps; + int stepsize; +} tcd_band_t; + +typedef struct { + int x0, y0, x1, y1; + int previous_x0, previous_y0, previous_x1, previous_y1; // usefull for the DWT + int cas_col, cas_row; // usefull for the DWT + int pw, ph; + int numbands; + tcd_band_t bands[3]; +} tcd_resolution_t; + +typedef struct { + int x0, y0, x1, y1; + int previous_row, previous_col; // usefull for the DWT + int numresolutions; + tcd_resolution_t *resolutions; + int *data; +} tcd_tilecomp_t; + +typedef struct { + int x0, y0, x1, y1; + int numcomps; + //int PPT; + //int len_ppt; + tcd_tilecomp_t *comps; +} tcd_tile_t; + +typedef struct { + int tw, th; + tcd_tile_t *tiles; +} tcd_image_t; + +/* + * Initialize the tile coder/decoder + * img: raw image + * cp: coding parameters + * imgg: creation of index file + */ + +void tcd_init(j2k_image_t *img, j2k_cp_t *cp, info_image_t *imgg); + +void tcd_free(j2k_image_t *img, j2k_cp_t *cp); + +/* + * Decode a tile from a buffer into a raw image + * src: source buffer + * len: length of the source buffer + * tileno: number that identifies the tile that will be decoded + * imgg : Structure for index file + */ +int tcd_decode_tile(unsigned char *src, int len, int tileno, info_image_t *imgg); + +#endif diff --git a/contrib/menuetlibc/openjpeg/indexer_JPIP/tgt.c b/contrib/menuetlibc/openjpeg/indexer_JPIP/tgt.c new file mode 100644 index 0000000000..c2b46824a6 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/indexer_JPIP/tgt.c @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2001-2002, David Janssens + * Copyright (c) 2003, Yannick Verschueren + * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "tgt.h" +#include "bio.h" +#include +#include + +/// +/// Reset tag-tree. +/// +void tgt_reset(tgt_tree_t *tree) +{ + int i; + for (i=0; inumnodes; i++) { + tree->nodes[i].value=999; + tree->nodes[i].low=0; + tree->nodes[i].known=0; + } +} + +/// +/// Create tag-tree. +/// +tgt_tree_t *tgt_create(int numleafsh, int numleafsv) +{ + int nplh[32]; + int nplv[32]; + tgt_node_t *node; + tgt_node_t *parentnode; + tgt_node_t *parentnode0; + tgt_tree_t *tree; + int i, j, k; + int numlvls; + int n; + + tree=(tgt_tree_t*)malloc(sizeof(tgt_tree_t)); + tree->numleafsh=numleafsh; + tree->numleafsv=numleafsv; + + numlvls=0; + nplh[0]=numleafsh; + nplv[0]=numleafsv; + tree->numnodes=0; + do { + n=nplh[numlvls]*nplv[numlvls]; + nplh[numlvls+1]=(nplh[numlvls]+1)/2; + nplv[numlvls+1]=(nplv[numlvls]+1)/2; + tree->numnodes+=n; + ++numlvls; + } while (n>1); + + tree->nodes=(tgt_node_t*)malloc(tree->numnodes*sizeof(tgt_node_t)); + + node=tree->nodes; + parentnode=&tree->nodes[tree->numleafsh*tree->numleafsv]; + parentnode0=parentnode; + + for (i=0; i=0) { + node->parent=parentnode; + ++node; + if (--k >= 0) { + node->parent=parentnode; + ++node; + } + ++parentnode; + } + if ((j&1)||j==nplv[i]-1) { + parentnode0=parentnode; + } else { + parentnode=parentnode0; + parentnode0+=nplh[i]; + } + } + } + node->parent=0; + + tgt_reset(tree); + + return tree; +} + +/// +/// Destroy tag-tree. +/// +void tgt_destroy(tgt_tree_t *t) { + free(t->nodes); + free(t); +} + +/// +/// Set the value of a leaf of the tag-tree. +/// +void tgt_setvalue(tgt_tree_t *tree, int leafno, int value) { + tgt_node_t *node; + node=&tree->nodes[leafno]; + while (node && node->value>value) { + node->value=value; + node=node->parent; + } +} + +/// +/// Decode the value of a leaf of the tag-tree. +/// +int tgt_decode(tgt_tree_t *tree, int leafno, int threshold) +{ + tgt_node_t *stk[31]; + tgt_node_t **stkptr; + tgt_node_t *node; + int low; + + stkptr=stk; + node=&tree->nodes[leafno]; + while (node->parent) { + *stkptr++=node; + node=node->parent; + } + + low=0; + for (;;) { + if (low>node->low) { + node->low=low; + } else { + low=node->low; + } + while (lowvalue) { + if (bio_read(1)) { + node->value=low; + } else { + ++low; + } + } + node->low=low; + if (stkptr==stk) { + break; + } + node=*--stkptr; + } + + return (node->value&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/menuetlibc/openjpeg/jp3d/CMakeLists.txt b/contrib/menuetlibc/openjpeg/jp3d/CMakeLists.txt new file mode 100644 index 0000000000..1491d1c30f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/CMakeLists.txt @@ -0,0 +1,15 @@ +# jp3d + +# Headers file are located here: +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_SOURCE_DIR}/codec + ${CMAKE_CURRENT_SOURCE_DIR}/libjp3dvm + ) + + +SUBDIRS( + libjp3dvm + codec +) + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.dsp b/contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.dsp new file mode 100755 index 0000000000..39c8b68a5a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.dsp @@ -0,0 +1,273 @@ +# Microsoft Developer Studio Project File - Name="DllOpenJPEG" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=DllOpenJPEG - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "DllOpenJPEG.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "DllOpenJPEG.mak" CFG="DllOpenJPEG - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "DllOpenJPEG - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "DllOpenJPEG - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "DllOpenJPEG - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLOPENJPEG_EXPORTS" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPJ_EXPORTS" /FD /c +# SUBTRACT CPP /YX /Yc /Yu +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/OpenJPEG.dll" +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=if not exist dist mkdir dist copy libopenjpeg\openjpeg3d.h dist copy Release\OpenJPEG.dll dist copy Release\OpenJPEG.lib dist +# End Special Build Tool + +!ELSEIF "$(CFG)" == "DllOpenJPEG - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLOPENJPEG_EXPORTS" /Yu"stdafx.h" /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPJ_EXPORTS" /FD /GZ /c +# SUBTRACT CPP /YX /Yc /Yu +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/OpenJPEGd.dll" /pdbtype:sept +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=if not exist dist mkdir dist copy libopenjpeg\openjpeg3d.h dist copy Debug\OpenJPEGd.dll dist copy Debug\OpenJPEGd.lib dist +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "DllOpenJPEG - Win32 Release" +# Name "DllOpenJPEG - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\libopenjpeg\bio.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\cio.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\dwt.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\event.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\image.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\j2k.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\j2k_lib.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\jp2.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\jpt.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\mct.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\mqc.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\openjpeg.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\pi.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\raw.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\t1.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\t2.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\tcd.c +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\tgt.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\libopenjpeg\bio.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\cio.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\dwt.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\event.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\fix.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\image.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\int.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\j2k.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\j2k_lib.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\jp2.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\jpt.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\mct.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\mqc.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\openjpeg3d.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\opj_includes.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\pi.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\raw.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\t1.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\t2.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\tcd.h +# End Source File +# Begin Source File + +SOURCE=.\libopenjpeg\tgt.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\OpenJPEG.rc +# End Source File +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.sln b/contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.sln new file mode 100755 index 0000000000..7b97dad9b2 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DllOpenJPEG", "DllJp3dVM.vcproj", "{790A6CE5-CE92-4A59-ADF7-54A92760BD6C}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {790A6CE5-CE92-4A59-ADF7-54A92760BD6C}.Debug.ActiveCfg = Debug|Win32 + {790A6CE5-CE92-4A59-ADF7-54A92760BD6C}.Debug.Build.0 = Debug|Win32 + {790A6CE5-CE92-4A59-ADF7-54A92760BD6C}.Release.ActiveCfg = Release|Win32 + {790A6CE5-CE92-4A59-ADF7-54A92760BD6C}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.vcproj b/contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.vcproj new file mode 100755 index 0000000000..f8ca5e1ca4 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/DllJp3dVM.vcproj @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/LICENSE.txt b/contrib/menuetlibc/openjpeg/jp3d/LICENSE.txt new file mode 100755 index 0000000000..4716ce35f3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/LICENSE.txt @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, HervŽ Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez, Image Processing Laboratory (LPI) - University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/LibJp3dVM.sln b/contrib/menuetlibc/openjpeg/jp3d/LibJp3dVM.sln new file mode 100755 index 0000000000..7309c7ab86 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/LibJp3dVM.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibJp3dVM", "LibJp3dVM.vcproj", "{6F3FB035-8F4E-4794-B091-0F0A20223BE7}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.ActiveCfg = Debug|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.Build.0 = Debug|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.ActiveCfg = Release|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/contrib/menuetlibc/openjpeg/jp3d/LibJp3dVM.vcproj b/contrib/menuetlibc/openjpeg/jp3d/LibJp3dVM.vcproj new file mode 100755 index 0000000000..d3b0465687 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/LibJp3dVM.vcproj @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/Makefile b/contrib/menuetlibc/openjpeg/jp3d/Makefile new file mode 100644 index 0000000000..dbe822a062 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/Makefile @@ -0,0 +1,580 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# jp3d/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +pkgdatadir = $(datadir)/openjpeg-1.4.0 +pkgincludedir = $(includedir)/openjpeg-1.4.0 +pkglibdir = $(libdir)/openjpeg-1.4.0 +pkglibexecdir = $(libexecdir)/openjpeg-1.4.0 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +subdir = jp3d +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf +AUTOHEADER = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader +AUTOMAKE = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11 +AWK = mawk +BUILD_NR = 0 +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JP3D_BUILD_NR = 0 +JP3D_MAJOR_NR = 1 +JP3D_MINOR_NR = 3 +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBPNG_CONFIG = /usr/bin/libpng-config +LIBS = -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAJOR_NR = 1 +MAKEINFO = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo +MINOR_NR = 4 +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = openjpeg-1.4.0 +PACKAGE_BUGREPORT = http://code.google.com/p/openjpeg/ +PACKAGE_NAME = OpenJPEG +PACKAGE_STRING = OpenJPEG 1.4.0 +PACKAGE_TARNAME = openjpeg-1.4.0 +PACKAGE_URL = http://www.openjpeg.org/ +PACKAGE_VERSION = 1.4.0 +PATH_SEPARATOR = : +PKGCONFIG = /usr/bin/pkg-config +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 1.4.0 +abs_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/jp3d +abs_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/jp3d +abs_top_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_top_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh +jp3d_dir = +jpwl_dir = +lcms1includes = -I/usr/include +lcms1libs = -llcms +lcms2includes = +lcms2libs = +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pngincludes = -I/usr/include/libpng12 +pnglibs = -L/usr/lib/x86_64-linux-gnu -lpng12 +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +tiffincludes = +tifflibs = -ltiff +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +with_doxygen = no +SUBDIRS = libjp3dvm codec +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign jp3d/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign jp3d/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/jp3d/Makefile.am b/contrib/menuetlibc/openjpeg/jp3d/Makefile.am new file mode 100644 index 0000000000..dc3f81d6d1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = libjp3dvm codec diff --git a/contrib/menuetlibc/openjpeg/jp3d/Makefile.in b/contrib/menuetlibc/openjpeg/jp3d/Makefile.in new file mode 100644 index 0000000000..34b2d6a8cd --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/Makefile.in @@ -0,0 +1,580 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = jp3d +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_NR = @BUILD_NR@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JP3D_BUILD_NR = @JP3D_BUILD_NR@ +JP3D_MAJOR_NR = @JP3D_MAJOR_NR@ +JP3D_MINOR_NR = @JP3D_MINOR_NR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBPNG_CONFIG = @LIBPNG_CONFIG@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAJOR_NR = @MAJOR_NR@ +MAKEINFO = @MAKEINFO@ +MINOR_NR = @MINOR_NR@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG = @PKGCONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +jp3d_dir = @jp3d_dir@ +jpwl_dir = @jpwl_dir@ +lcms1includes = @lcms1includes@ +lcms1libs = @lcms1libs@ +lcms2includes = @lcms2includes@ +lcms2libs = @lcms2libs@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pngincludes = @pngincludes@ +pnglibs = @pnglibs@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +tiffincludes = @tiffincludes@ +tifflibs = @tifflibs@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_doxygen = @with_doxygen@ +SUBDIRS = libjp3dvm codec +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign jp3d/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign jp3d/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/jp3d/Makefile.nix b/contrib/menuetlibc/openjpeg/jp3d/Makefile.nix new file mode 100644 index 0000000000..5b0796f31a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/Makefile.nix @@ -0,0 +1,108 @@ +#jp3d Makefile +include ../config.nix + +TARGET = openjp3dvm +COMPILERFLAGS = -O3 -Wall -ffast-math -std=c99 -fPIC + +SRCS = ./libjp3dvm/bio.c ./libjp3dvm/cio.c ./libjp3dvm/dwt.c \ + ./libjp3dvm/event.c ./libjp3dvm/jp3d.c ./libjp3dvm/jp3d_lib.c \ + ./libjp3dvm/volume.c ./libjp3dvm/mct.c ./libjp3dvm/mqc.c \ + ./libjp3dvm/openjpeg.c ./libjp3dvm/pi.c ./libjp3dvm/raw.c \ + ./libjp3dvm/t1.c ./libjp3dvm/t1_3d.c ./libjp3dvm/t2.c \ + ./libjp3dvm/tcd.c ./libjp3dvm/tgt.c + +INCLS = ./libjp3dvm/t1_3d.h ./libjp3dvm/bio.h ./libjp3dvm/cio.h \ + ./libjp3dvm/dwt.h ./libjp3dvm/event.h ./libjp3dvm/fix.h \ + ./libjp3dvm/int.h ./libjp3dvm/jp3d.h ./libjp3dvm/jp3d_lib.h \ + ./libjp3dvm/volume.h ./libjp3dvm/mct.h ./libjp3dvm/mqc.h \ + ./libjp3dvm/openjpeg3d.h ./libjp3dvm/pi.h ./libjp3dvm/raw.h \ + ./libjp3dvm/t1.h ./libjp3dvm/t2.h ./libjp3dvm/tcd.h \ + ./libjp3dvm/tgt.h ./libjp3dvm/opj_includes.h + +INCLUDE = -I.. -Ilibjp3dvm + +INSTALL_LIBDIR = $(prefix)/lib +headerdir = openjpeg3d-$(JP3D_MAJOR).$(JP3D_MINOR) +INSTALL_INCLUDE = $(prefix)/include/$(headerdir) + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix + +LIBRARIES = -lstdc++ + +MODULES = $(SRCS:.c=.o) +CFLAGS = $(COMPILERFLAGS) $(INCLUDE) + +LIBNAME = lib$(TARGET) + +ifeq ($(ENABLE_SHARED),yes) +SHAREDLIB = $(LIBNAME).so.$(JP3D_MAJOR).$(JP3D_MINOR).$(JP3D_BUILD) +else +STATICLIB = $(LIBNAME).a +endif + +default: all + +all: Jp3dVM + make -C codec -f Makefile.nix all + install -d ../bin +ifeq ($(ENABLE_SHARED),yes) + install -m 755 $(SHAREDLIB) ../bin + (cd ../bin && \ + ln -sf $(SHAREDLIB) $(LIBNAME).so.$(JP3D_MAJOR).$(JP3D_MINOR)) + (cd ../bin && \ + ln -sf $(LIBNAME).so.$(JP3D_MAJOR).$(JP3D_MINOR) $(LIBNAME).so) +else + install -m 644 $(STATICLIB) ../bin +endif + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +Jp3dVM: $(STATICLIB) $(SHAREDLIB) + +.c.o: + $(CC) $(CFLAGS) -c $< -o $@ + +ifeq ($(ENABLE_SHARED),yes) +$(SHAREDLIB): $(MODULES) + $(CC) -s -shared -Wl,-soname,$(LIBNAME) -o $@ $(MODULES) $(LIBRARIES) +else +$(STATICLIB): $(MODULES) + $(AR) r $@ $(MODULES) +endif + +install: Jp3dVM + install -d '$(DESTDIR)$(INSTALL_LIBDIR)' +ifeq ($(ENABLE_SHARED),yes) + install -m 755 -o root -g root $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)' + (cd $(DESTDIR)$(INSTALL_LIBDIR) && \ + ln -sf $(SHAREDLIB) $(LIBNAME).so.$(JP3D_MAJOR).$(JP3D_MINOR) ) + (cd $(DESTDIR)$(INSTALL_LIBDIR) && \ + ln -sf $(LIBNAME).so.$(JP3D_MAJOR).$(JP3D_MINOR) $(LIBNAME).so ) +else + install -m 644 -o root -g root $(STATICLIB) '$(DESTDIR)$(INSTALL_LIBDIR)' + (cd $(DESTDIR)$(INSTALL_LIBDIR) && ranlib $(STATICLIB)) +endif + install -d $(DESTDIR)$(INSTALL_INCLUDE) + rm -f $(DESTDIR)$(INSTALL_INCLUDE)/openjpeg3d.h + install -m 644 -o root -g root libjp3dvm/openjpeg3d.h \ + $(DESTDIR)$(INSTALL_INCLUDE)/openjpeg3d.h + (cd $(DESTDIR)$(prefix)/include && \ + ln -sf $(headerdir)/openjpeg3d.h openjpeg3d.h) + make -C codec -f Makefile.nix install + +uninstall: +ifeq ($(ENABLE_SHARED),yes) + (cd $(DESTDIR)$(INSTALL_LIBDIR) && \ + rm -f $(LIBNAME).so $(LIBNAME).so.$(JP3D_MAJOR).$(JP3D_MINOR) $(SHAREDLIB)) +else + rm -f $(DESTDIR)$(INSTALL_LIBDIR)/$(STATICLIB) +endif + rm -f $(DESTDIR)$(prefix)/include/openjpeg3d.h + rm -rf $(DESTDIR)$(INSTALL_INCLUDE) + make -C codec -f Makefile.nix uninstall + +clean: + rm -f core u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) + make -C codec -f Makefile.nix clean diff --git a/contrib/menuetlibc/openjpeg/jp3d/README.txt b/contrib/menuetlibc/openjpeg/jp3d/README.txt new file mode 100755 index 0000000000..ce04072e87 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/README.txt @@ -0,0 +1,285 @@ +=============================================================================== + JPEG2000 Part 10 (ISO/IEC 15444-10 JP3D) Verification Model + + Version 1.1 +=============================================================================== + + +1. Scope +================ + +This document describes the installation and the use of the JP3D VM decoder and encoder under several operating systems (Linux, Unix, Windows, ...). Version 1.1 contains a complete JPEG 2000 Part 10 encoder, as well as a decoder. +The supported functionalities are compliant with the JPEG2000 part 10 algorithm as described in the WD 6.0. +The provided encoder and the decoder are compatible also with the International standard IS 15444-1 (core coding system). +This implementation has been developped from OpenJPEG implementation of JPEG2000 standard, and for this reason it is written in C language. + +If you find some bugs or if you have problems using the encoder/decoder, please send an e-mail to jp3d@lpi.tel.uva.es + +2. Installing the code +====================================================== + +- After decompressing the zip file provided, you should find +at least the following files in the created 'jp3d_vm' directory: + + * libjp3dvm - This directory contains all library related code + * codec - This directory contains all codec related code + * tcltk - This directory contains the API scripts + * README - The file you are reading + * LICENCE - Copyright statement of the JP3D VM software + +2.1. Compiling the source code in Windows +------------------------------------------- + +This version has been compiled with Visual Studio 2003 using +the projects included in the distribution: + + * LibJp3dVM.vcproj - Creates the library with all the JP3D functionalities + * jp3d_vm_enc.vcproj - Test encoder + * jp3d_vm_dec.vcproj - Test decoder + +2.2. Compiling the source code in Unix-like systems +------------------------------------------- + +Library compilation +------------------------ +This version of the library has been tested under the following OS: +- Fedora Core + +The installation process is as simple as this : +1) Enter the 'jp3d_vm' directory +2) Build the distribution : +make +make install +3) Clean all files produced during the build process +make clean + +Codec compilation +------------------------ +Once you've built the library, you should compile the JP3D codec. + +1) Go to the 'codec' directory +2) Build the encoder and decoder programs: + +gcc convert.c volume_to_jp3d.c -o jp3d_vm_enc -I ../libjp3dvm/ -lm -ljp3dvm +gcc convert.c jp3d_to_volume.c -o jp3d_vm_dec -I ../libjp3dvm/ -lm -ljp3dvm + +Note: You should add '-L ../libjp3dvm/' to those lines if you +did not use the 'install' target (and the 'clean' target neither...). + +3. Running the JP3D VM +==================================================== + +3.1. JP3D ENCODER +==================================================== + +Required arguments +------------------------ + + * Input file(s): -i Involume [*.bin, *.pgx] + +Specifies the volume to compress. Accepted formats are *.BIN (raw binary data) or *.PGX files. +Both formats need some particular settings: + + a) BIN format. As it has no header, volume characteristics will be obtained from a .IMG file. Its location will be specified through the following argument: + -m Involumeinfo.IMG + This file shall have the following structure, with the appropiate value in each case (bit per voxel, color map, dimensions in X,Y,Z): + o Bpp %d + o Color Map %d + o Dimensions %d %d %d + + b) PGX format. Program will consider it as a volume slice. In order to denote a volume through a sequence of slices, you can define the input filename with the common pattern of the set of PGX files followed by a dash (as a wildcard character for the sequence numbers). + + * Output file: -o Outfile [*.jp3d, *j2k] + +Specifies the name of the file where the codestream will be saved. +Part 1 compliant codestream will be created when an outfile has .j2k format. + +Options +-------- + + * Rate values : -r 20,10,5 + This option offers the possibility to define the compression rate to apply. + Each value is a factor of compression (i.e. 20 : 1) and will generate a different quality layer. A lossless compression will be signified by the value 1. + NOTE : The order used to define the different levels of compression is important and must be from left to right in descending order. + + * Quality values : -q 30,35,40 + This option offers the possibility to define the quality level to achieve. Each value is a psnr, to be given in dB, and represents a quality layer. + NOTE : The order used to define the different psnr-values is important and must be from left to right in ascending order. + + + * Number of resolutions : -n 3,3,2 + This option offers the possibility to define the number of resolution levels computed for each dimension of the volume through the discret wavelet transform (DWT). Resolution in axial dimension can have a different value than in horizontal and vertical cases, but must be lower. + DEFAULT VALUE : 3,3,1 + + + * Switch modes : -M 3 + This option offers the possibility to use a mode switch during the encoding process: + o BYPASS(LAZY) [1] + o RESET [2] + o RESTART(TERMALL) [4] + o VSC [8] + o ERTERM(SEGTERM) [16] + o SEGMARK(SEGSYM) [32] + o 3D_CONTEXT [64] + For several mode switch just sum corresponding values: i.e. -M 38 => RESTART(4) + RESET(2) + SEGMARK(32) + DEFAULT VALUE: 0 + + + * Progression order : -p LRCP + This option offers the possibility to specify the progression order. Possible progression orders are : LRCP, RLCP, RPCL, PCRL and CPRL. + DEFAULT VALUE: LRCP. + + + * Code-block size : -b 32,32,32 + This option offers the possibility to define the size of the code-block. The dimension must respect the constraint defined in the JPEG-2000 standard. The maximum value autorized is 64x64x64. + DEFAULT VALUE: 64,64,64 + + + * Precinct size : -c [128,128,128],[128,128,128],... + This option offers the possibility to define the size of the precincts at each resolution. Multiple records may be supplied, in which case the first record refers to the highest resolution level and subsequent records to lower resolution levels. The last specified record is right-shifted for each remaining lower resolution levels. + NOTE : specified values must be power of 2. + DEFAULT VALUE: 2^15 x 2^15 x 2^15 + + + * Tile size : -t 512,512,512 + This option offers the possibility to divide the volume in several tiles. The three values define the width, the heigth and the depth of the tile respectivily. + DEFAULT VALUE: Volume dimensions (one tile) + + + * Subsampling factor : -s 2,2,2 + This option offers the possibility to apply a subsampling factor for X, Y and Z axis. Value higher than 2 can be a source of error ! + DEFAULT VALUE: 1,1,1 + + + * SOP marker before each packet : -SOP + This option offers the possibility to add a specific marker before each packet. It is the marker SOP (Start of packet). If the option is not used no SOP marker will be added. + + + * EPH marker after each packet header : -EPH + This option offers the possibility to add a specific marker at the head of each packet header. It is the marker EPH (End of packet Header). If the option is not used no EPH marker will be added. + + + * Offset of the volume origin : -d 150,300,10 + This option offers the possibility to move the origine of the volume in X, Y and/or Z axis. The division in tile could be modified as the anchor point for tiling will be different than the volume origin. + NOTE : the offset of the volume can not be higher than the tile dimension if the tile option is used. + DEFAULT VALUE: 0,0,0 + + + * Offset of the tile origin : -T 100,75,5 + This option offers the possibility to move the anchor point of the volume in X, Y and/or Z axis. + NOTE : the tile anchor point can not be on the volume area. + DEFAULT VALUE: 0,0,0 + + + * Display the help menu : -help + This option displays on screen the content of this page + +Additional options +---------------------------------- + + * Encoding information file: -x index_name.idx + This option offers the possibility to create a text file with some structured information generated through the encoding. The name of the file must be specified, with .idx extension. The information structure is the following: + o Volume size: + + VolW + VolH + VolD + o Progression Order: + + Prog + o Tile size: + + TileW + TileH + TileD + o Number of components: + + NumComp + o Number of layers: + + NumLayer + o Number of decompositions (=(number of resolutions - 1)): + + NumDWTx + NumDWTy + NumDWTz + o Precinct size: + + [Precinct_width(NumDWT),Precinct_height(NumDWT),Precinct_depth(NumDWT)] + + [Precinct_width(NumDWT-1),Precinct_height(NumDWT-1),Precinct_depth(NumDWT-1)] + + ... + + [Precinct_width(0),Precinct_height(0),Precinct_depth(0)] + o Main Header end position: + + MH_EndPos + o Codestream size: + + CSSize + o Tile 0 information: + + TileNum (0) + + StartPos + + TileHeader_EndPos + + EndPos + + TotalDisto (this is the sum of the distortion reductions brought by each packet belonging to this tile) + + NumPix (this is the number of pixels in the tile) + + MaxMSE (=TotalDisto/NumPix) + o Tile1 information: + + TileNum (1) + + ... + o ... + o Tile N information: + + TileNum (N) + + ... + o Packet 0 from Tile 0 information: + + PackNum (0) + + TileNum (0) + + LayerNum + + ResNum + + CompNum + + PrecNum + + StartPos + + EndPos + + Disto (distortion reduction brought by this packet) + o Packet 1 from Tile 0 information: + + PackNum (1) + + ... + o ... + o Packet M from Tile 0 information + o Packet 0 from Tile 1 information + o ... + o Packet M from Tile N information + o Maximum distortion reduction on the whole volume: + + MaxDisto + o Total distortion on the whole volume (sum of the distortion reductions from all packets in the volume): + + TotalDisto + +3.2. JP3D DECODER +==================================================== + +Required arguments +------------------------ + + * Infile : -i compressed file + Currently accepts JP3D and J2K-files. The file type is identified based on its suffix (*.jp3d, *.j2k). + + + * Outfile(s) : -o decompressed file(s) + Currently accepts BIN-files and PGX-files. Binary data is written to the file (not ascii). + If a BIN-file is defined, decoder will create automatically the volume characteristic file appending a .IMG extension to the provided output filename. + If a PGX-file is defined, decoder will understand this as a file pattern, appending corresponding indice from 0 to the number of decoded slices. + NOTE : There will be as many output files as there are components: an indice starting from 0 will then be appended to the output filename, just before the extension. + + +Options available +------------------------ + + * Reduce factor : -r 1,1,0 + Set the number of highest resolution levels to be discarded in each dimension. The decoded volume size is effectively divided by 2 to the power of the number of discarded levels. + NOTE : The reduce factor is limited by the smallest total number of decomposition levels among tiles. + + + * Layer number : -l 2 + Set the maximum number of quality layers to decode. If there are less quality layers than the specified number, all the quality layers are decoded. + + + * Performance comparisons : -O original-file + This option offers the possibility to compute some quality results for the decompressed volume, like the PSNR value achieved or the global SSIM value. Needs the original file in order to compare with the new one. + NOTE: Only valid when -r option is 0,0,0 (both original and decompressed volumes have same resolutions) + NOTE: If original file is .BIN file, the volume characteristics file shall be defined with the -m option. + (i.e. -O original-BIN-file -m original-IMG-file) + + + * Byte order (Big-endian / Little-endian) : -BE + This option offers the possibility to save the decompressed volume with a predefined byte order. + DEFAULT VALUE: Little-endian + + + * Display the help menu : -help + This option displays on screen the content of this page + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/convert.Po b/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/convert.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/convert.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/getopt.Po b/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/getopt.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/getopt.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/jp3d_to_volume.Po b/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/jp3d_to_volume.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/jp3d_to_volume.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/volume_to_jp3d.Po b/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/volume_to_jp3d.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/.deps/volume_to_jp3d.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/CMakeLists.txt b/contrib/menuetlibc/openjpeg/jp3d/codec/CMakeLists.txt new file mode 100644 index 0000000000..6c33b963bc --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/CMakeLists.txt @@ -0,0 +1,47 @@ +# Build the demo app, small examples + +# First thing define the common source: +SET(common_SRCS + convert.c + ) +# Then check if getopt is present: +INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake) +SET(DONT_HAVE_GETOPT 1) +IF(UNIX) #I am pretty sure only *nix sys have this anyway + CHECK_INCLUDE_FILE("getopt.h" CMAKE_HAVE_GETOPT_H) + # Seems like we need the contrary: + IF(CMAKE_HAVE_GETOPT_H) + SET(DONT_HAVE_GETOPT 0) + ENDIF(CMAKE_HAVE_GETOPT_H) +ENDIF(UNIX) + +# If not getopt was found then add it to the lib: +IF(DONT_HAVE_GETOPT) + ADD_DEFINITIONS(-DDONT_HAVE_GETOPT) + SET(common_SRCS + ${common_SRCS} + getopt.c + ) +ENDIF(DONT_HAVE_GETOPT) + +IF(WIN32) + IF(BUILD_SHARED_LIBS) + ADD_DEFINITIONS(-DOPJ_EXPORTS) + ELSE(BUILD_SHARED_LIBS) + ADD_DEFINITIONS(-DOPJ_STATIC) + ENDIF(BUILD_SHARED_LIBS) +ENDIF(WIN32) + +# Loop over all executables: +FOREACH(exe jp3d_to_volume volume_to_jp3d) + ADD_EXECUTABLE(${exe} ${exe}.c ${common_SRCS}) + TARGET_LINK_LIBRARIES(${exe} ${OPENJPEG_LIBRARY_NAME}_JP3D) # ${TIFF_LIBRARIES}) + # On unix you need to link to the math library: + IF(UNIX) + TARGET_LINK_LIBRARIES(${exe} m) + ENDIF(UNIX) + # Install exe + INSTALL_TARGETS(/bin/ ${exe}) +ENDFOREACH(exe) + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile b/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile new file mode 100644 index 0000000000..86bbe3b240 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile @@ -0,0 +1,564 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# jp3d/codec/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +#jp3d/codec/ + + +pkgdatadir = $(datadir)/openjpeg-1.4.0 +pkgincludedir = $(includedir)/openjpeg-1.4.0 +pkglibdir = $(libdir)/openjpeg-1.4.0 +pkglibexecdir = $(libexecdir)/openjpeg-1.4.0 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +am__append_1 = -DOPJ_EXPORTS +#am__append_2 = -DOPJ_STATIC +bin_PROGRAMS = jp3d_to_volume$(EXEEXT) volume_to_jp3d$(EXEEXT) +subdir = jp3d/codec +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_jp3d_to_volume_OBJECTS = getopt.$(OBJEXT) convert.$(OBJEXT) \ + jp3d_to_volume.$(OBJEXT) +jp3d_to_volume_OBJECTS = $(am_jp3d_to_volume_OBJECTS) +jp3d_to_volume_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +jp3d_to_volume_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + ../libjp3dvm/libopenjp3dvm.la +am_volume_to_jp3d_OBJECTS = getopt.$(OBJEXT) convert.$(OBJEXT) \ + volume_to_jp3d.$(OBJEXT) +volume_to_jp3d_OBJECTS = $(am_volume_to_jp3d_OBJECTS) +volume_to_jp3d_LDADD = $(LDADD) +volume_to_jp3d_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + ../libjp3dvm/libopenjp3dvm.la +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(jp3d_to_volume_SOURCES) $(volume_to_jp3d_SOURCES) +DIST_SOURCES = $(jp3d_to_volume_SOURCES) $(volume_to_jp3d_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf +AUTOHEADER = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader +AUTOMAKE = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11 +AWK = mawk +BUILD_NR = 0 +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall $(INCLUDES) $(am__append_1) $(am__append_2) +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JP3D_BUILD_NR = 0 +JP3D_MAJOR_NR = 1 +JP3D_MINOR_NR = 3 +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBPNG_CONFIG = /usr/bin/libpng-config +LIBS = -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAJOR_NR = 1 +MAKEINFO = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo +MINOR_NR = 4 +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = openjpeg-1.4.0 +PACKAGE_BUGREPORT = http://code.google.com/p/openjpeg/ +PACKAGE_NAME = OpenJPEG +PACKAGE_STRING = OpenJPEG 1.4.0 +PACKAGE_TARNAME = openjpeg-1.4.0 +PACKAGE_URL = http://www.openjpeg.org/ +PACKAGE_VERSION = 1.4.0 +PATH_SEPARATOR = : +PKGCONFIG = /usr/bin/pkg-config +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 1.4.0 +abs_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/jp3d/codec +abs_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/jp3d/codec +abs_top_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_top_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh +jp3d_dir = +jpwl_dir = +lcms1includes = -I/usr/include +lcms1libs = -llcms +lcms2includes = +lcms2libs = +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pngincludes = -I/usr/include/libpng12 +pnglibs = -L/usr/lib/x86_64-linux-gnu -lpng12 +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +tiffincludes = +tifflibs = -ltiff +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. +with_doxygen = no +USERLIBS = +INCLUDES = -I. -I../libjp3dvm +LDADD = $(USERLIBS) ../libjp3dvm/libopenjp3dvm.la +jp3d_to_volume_SOURCES = getopt.c convert.c jp3d_to_volume.c +volume_to_jp3d_SOURCES = getopt.c convert.c volume_to_jp3d.c +REPBIN = $(bin_PROGRAMS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign jp3d/codec/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign jp3d/codec/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +jp3d_to_volume$(EXEEXT): $(jp3d_to_volume_OBJECTS) $(jp3d_to_volume_DEPENDENCIES) + @rm -f jp3d_to_volume$(EXEEXT) + $(LINK) $(jp3d_to_volume_OBJECTS) $(jp3d_to_volume_LDADD) $(LIBS) +volume_to_jp3d$(EXEEXT): $(volume_to_jp3d_OBJECTS) $(volume_to_jp3d_DEPENDENCIES) + @rm -f volume_to_jp3d$(EXEEXT) + $(LINK) $(volume_to_jp3d_OBJECTS) $(volume_to_jp3d_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/convert.Po +include ./$(DEPDIR)/getopt.Po +include ./$(DEPDIR)/jp3d_to_volume.Po +include ./$(DEPDIR)/volume_to_jp3d.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) all-local +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS + + +all-local: + $(INSTALL) -d ../../bin + $(INSTALL) $(bin_PROGRAMS) ../../bin + @(for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> ../.report.txt ; \ + done) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.am b/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.am new file mode 100644 index 0000000000..819b91a3b3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.am @@ -0,0 +1,27 @@ +#jp3d/codec/ + +USERLIBS = +INCLUDES = -I. -I../libjp3dvm +CFLAGS = -Wall $(INCLUDES) + +if with_sharedlibs +CFLAGS += -DOPJ_EXPORTS +else +CFLAGS += -DOPJ_STATIC +endif + +bin_PROGRAMS = jp3d_to_volume volume_to_jp3d +LDADD = $(USERLIBS) ../libjp3dvm/libopenjp3dvm.la + +jp3d_to_volume_SOURCES = getopt.c convert.c jp3d_to_volume.c + +volume_to_jp3d_SOURCES = getopt.c convert.c volume_to_jp3d.c + +REPBIN=$(bin_PROGRAMS) + +all-local: + $(INSTALL) -d ../../bin + $(INSTALL) $(bin_PROGRAMS) ../../bin + @(for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> ../.report.txt ; \ + done) diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.in b/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.in new file mode 100644 index 0000000000..dd4b2f87fa --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.in @@ -0,0 +1,564 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +#jp3d/codec/ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@with_sharedlibs_TRUE@am__append_1 = -DOPJ_EXPORTS +@with_sharedlibs_FALSE@am__append_2 = -DOPJ_STATIC +bin_PROGRAMS = jp3d_to_volume$(EXEEXT) volume_to_jp3d$(EXEEXT) +subdir = jp3d/codec +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_jp3d_to_volume_OBJECTS = getopt.$(OBJEXT) convert.$(OBJEXT) \ + jp3d_to_volume.$(OBJEXT) +jp3d_to_volume_OBJECTS = $(am_jp3d_to_volume_OBJECTS) +jp3d_to_volume_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +jp3d_to_volume_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + ../libjp3dvm/libopenjp3dvm.la +am_volume_to_jp3d_OBJECTS = getopt.$(OBJEXT) convert.$(OBJEXT) \ + volume_to_jp3d.$(OBJEXT) +volume_to_jp3d_OBJECTS = $(am_volume_to_jp3d_OBJECTS) +volume_to_jp3d_LDADD = $(LDADD) +volume_to_jp3d_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + ../libjp3dvm/libopenjp3dvm.la +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(jp3d_to_volume_SOURCES) $(volume_to_jp3d_SOURCES) +DIST_SOURCES = $(jp3d_to_volume_SOURCES) $(volume_to_jp3d_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_NR = @BUILD_NR@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = -Wall $(INCLUDES) $(am__append_1) $(am__append_2) +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JP3D_BUILD_NR = @JP3D_BUILD_NR@ +JP3D_MAJOR_NR = @JP3D_MAJOR_NR@ +JP3D_MINOR_NR = @JP3D_MINOR_NR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBPNG_CONFIG = @LIBPNG_CONFIG@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAJOR_NR = @MAJOR_NR@ +MAKEINFO = @MAKEINFO@ +MINOR_NR = @MINOR_NR@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG = @PKGCONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +jp3d_dir = @jp3d_dir@ +jpwl_dir = @jpwl_dir@ +lcms1includes = @lcms1includes@ +lcms1libs = @lcms1libs@ +lcms2includes = @lcms2includes@ +lcms2libs = @lcms2libs@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pngincludes = @pngincludes@ +pnglibs = @pnglibs@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +tiffincludes = @tiffincludes@ +tifflibs = @tifflibs@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_doxygen = @with_doxygen@ +USERLIBS = +INCLUDES = -I. -I../libjp3dvm +LDADD = $(USERLIBS) ../libjp3dvm/libopenjp3dvm.la +jp3d_to_volume_SOURCES = getopt.c convert.c jp3d_to_volume.c +volume_to_jp3d_SOURCES = getopt.c convert.c volume_to_jp3d.c +REPBIN = $(bin_PROGRAMS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign jp3d/codec/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign jp3d/codec/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +jp3d_to_volume$(EXEEXT): $(jp3d_to_volume_OBJECTS) $(jp3d_to_volume_DEPENDENCIES) + @rm -f jp3d_to_volume$(EXEEXT) + $(LINK) $(jp3d_to_volume_OBJECTS) $(jp3d_to_volume_LDADD) $(LIBS) +volume_to_jp3d$(EXEEXT): $(volume_to_jp3d_OBJECTS) $(volume_to_jp3d_DEPENDENCIES) + @rm -f volume_to_jp3d$(EXEEXT) + $(LINK) $(volume_to_jp3d_OBJECTS) $(volume_to_jp3d_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convert.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jp3d_to_volume.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/volume_to_jp3d.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) all-local +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS + + +all-local: + $(INSTALL) -d ../../bin + $(INSTALL) $(bin_PROGRAMS) ../../bin + @(for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> ../.report.txt ; \ + done) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.nix b/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.nix new file mode 100644 index 0000000000..e34ad39ca5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/Makefile.nix @@ -0,0 +1,37 @@ +#jp3d/codec/Makefile + +include ../../config.nix + +INSTALL_BIN = $(prefix)/bin +CFLAGS = -Wall -I. -I../libjp3dvm -lstdc++ # -g -p -pg +#USERLIBS = -lm + +ifeq ($(ENABLE_SHARED),yes) +ELIB = ../libopenjp3dvm.so.$(JP3D_MAJOR).$(JP3D_MINOR).$(JP3D_BUILD) +else +ELIB = ../libopenjp3dvm.a +endif + +all: jp3d_to_volume volume_to_jp3d + install -d ../../bin + install jp3d_to_volume volume_to_jp3d ../../bin + +jp3d_to_volume: jp3d_to_volume.c $(ELIB) + $(CC) $(CFLAGS) getopt.c convert.c jp3d_to_volume.c \ + -o jp3d_to_volume $(ELIB) $(USERLIBS) + +volume_to_jp3d: volume_to_jp3d.c $(ELIB) + $(CC) $(CFLAGS) getopt.c convert.c volume_to_jp3d.c \ + -o volume_to_jp3d $(ELIB) $(USERLIBS) + +clean: + rm -f jp3d_to_volume volume_to_jp3d + +install: all + install -d $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root jp3d_to_volume $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root volume_to_jp3d $(DESTDIR)$(INSTALL_BIN) + +uninstall: + rm -f $(DESTDIR)$(INSTALL_BIN)/jp3d_to_volume + rm -f $(DESTDIR)$(INSTALL_BIN)/volume_to_jp3d diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/convert.c b/contrib/menuetlibc/openjpeg/jp3d/codec/convert.c new file mode 100755 index 0000000000..92a8163a0b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/convert.c @@ -0,0 +1,997 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#include +#include +#include +#include "../libjp3dvm/openjpeg3d.h" +#ifdef _WIN32 +#include "windirent.h" +#else +#include +#endif /* _WIN32 */ + + + +void dump_volume(FILE *fd, opj_volume_t * vol) { + int compno; + fprintf(fd, "volume {\n"); + fprintf(fd, " x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", vol->x0, vol->y0, vol->z0,vol->x1, vol->y1, vol->z1); + fprintf(fd, " numcomps=%d\n", vol->numcomps); + for (compno = 0; compno < vol->numcomps; compno++) { + opj_volume_comp_t *comp = &vol->comps[compno]; + fprintf(fd, " comp %d {\n", compno); + fprintf(fd, " dx=%d, dy=%d, dz=%d\n", comp->dx, comp->dy, comp->dz); + fprintf(fd, " prec=%d\n", comp->prec); + fprintf(fd, " sgnd=%d\n", comp->sgnd); + fprintf(fd, " }\n"); + } + fprintf(fd, "}\n"); +} + +/* + * Get logarithm of an integer and round downwards. + * + * log2(a) + */ +static int int_floorlog2(int a) { + int l; + for (l = 0; a > 1; l++) { + a >>= 1; + } + return l; +} + +/* + * Divide an integer by a power of 2 and round upwards. + * + * a divided by 2^b + */ +static int int_ceildivpow2(int a, int b) { + return (a + (1 << b) - 1) >> b; +} + +/* + * Divide an integer and round upwards. + * + * a divided by b + */ +static int int_ceildiv(int a, int b) { + return (a + b - 1) / b; +} + + +/* -->> -->> -->> -->> + +PGX IMAGE FORMAT + +<<-- <<-- <<-- <<-- */ + + +unsigned char readuchar(FILE * f) +{ + unsigned char c1; + fread(&c1, 1, 1, f); + return c1; +} + +unsigned short readushort(FILE * f, int bigendian) +{ + unsigned char c1, c2; + fread(&c1, 1, 1, f); + fread(&c2, 1, 1, f); + if (bigendian) + return (c1 << 8) + c2; + else + return (c2 << 8) + c1; +} + +unsigned int readuint(FILE * f, int bigendian) +{ + unsigned char c1, c2, c3, c4; + fread(&c1, 1, 1, f); + fread(&c2, 1, 1, f); + fread(&c3, 1, 1, f); + fread(&c4, 1, 1, f); + if (bigendian) + return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; + else + return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1; +} +/*****************************************/ +static unsigned short ShortSwap(unsigned short v) +{ + unsigned char c1, c2; + c1 = v & 0xff; + c2 = (v >> 8) & 0xff; + return (c1 << 8) + c2; +} + +static unsigned int LongSwap (unsigned int i) +{ + unsigned char b1, b2, b3, b4; + b1 = i & 255; + b2 = ( i >> 8 ) & 255; + b3 = ( i>>16 ) & 255; + b4 = ( i>>24 ) & 255; + return ((int)b1 << 24) + ((int)b2 << 16) + ((int)b3 << 8) + b4; +} +/*****************************************/ + +opj_volume_t* pgxtovolume(char *relpath, opj_cparameters_t *parameters) { + + FILE *f = NULL; + int w, h, prec; + unsigned long offset; + int i, s, numcomps, maxvalue, sliceno, slicepos, maxslice = 0; + + OPJ_COLOR_SPACE color_space; + opj_volume_cmptparm_t cmptparm; // maximum of 1 component + opj_volume_t * volume = NULL; + + char endian1,endian2,sign; + char signtmp[32]; + char temp[32]; + opj_volume_comp_t *comp = NULL; + + DIR *dirp; + struct dirent *direntp; + + char *tmp = NULL, *tmp2 = NULL, + *point = NULL, *pgx = NULL; + char tmpdirpath[MAX_PATH]; + char dirpath[MAX_PATH]; + char pattern[MAX_PATH]; + char pgxfiles[MAX_SLICES][MAX_PATH]; + int pgxslicepos[MAX_SLICES]; + char tmpno[3]; + + numcomps = 1; + color_space = CLRSPC_GRAY; + sliceno = 0; + maxvalue = 0; + memset(pgxfiles, 0, MAX_SLICES * MAX_PATH * sizeof(char)); + memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t)); + + /* Separación del caso de un único slice frente al de muchos */ + if ((tmp = strrchr(relpath,'-')) == NULL){ + //fprintf(stdout,"[INFO] A volume of only one slice....\n"); + sliceno = 1; + maxslice = 1; + strcpy(pgxfiles[0],relpath); + + } else { + //Fetch only the path + strcpy(tmpdirpath,relpath); + if ((tmp = strrchr(tmpdirpath,'/')) != NULL){ + tmp++; *tmp='\0'; + strcpy(dirpath,tmpdirpath); + } else { + strcpy(dirpath,"./"); + } + + //Fetch the pattern of the volume slices + if ((tmp = strrchr (relpath,'/')) != NULL) + tmp++; + else + tmp = relpath; + if ((tmp2 = strrchr(tmp,'-')) != NULL) + *tmp2='\0'; + else{ + fprintf(stdout, "[ERROR] tmp2 ha dado null. no ha encontrado el * %s %s",tmp,relpath); + return NULL; + } + strcpy(pattern,tmp); + + dirp = opendir( dirpath ); + if (dirp == NULL){ + fprintf(stdout, "[ERROR] Infile must be a .pgx file or a directory that contain pgx files"); + return NULL; + } + + /*Read all .pgx files of directory */ + while ( (direntp = readdir( dirp )) != NULL ) + { + /* Found a directory, but ignore . and .. */ + if(strcmp(".",direntp->d_name) == 0 || strcmp("..",direntp->d_name) == 0) + continue; + + if( ((pgx = strstr(direntp->d_name,pattern)) != NULL) && ((tmp2 = strstr(direntp->d_name,".pgx")) != NULL) ){ + + strcpy(tmp,dirpath); + tmp = strcat(tmp,direntp->d_name); + + //Obtenemos el index de la secuencia de slices + if ((tmp2 = strpbrk (direntp->d_name, "0123456789")) == NULL) + continue; + i = 0; + while (tmp2 != NULL) { + tmpno[i++] = *tmp2; + point = tmp2; + tmp2 = strpbrk (tmp2+1,"0123456789"); + }tmpno[i]='\0'; + + //Comprobamos que no estamos leyendo algo raro como pattern.jp3d + if ((point = strpbrk (point,".")) == NULL){ + break; + } + //Slicepos --> index de slice; Sliceno --> no de slices hasta el momento + slicepos = atoi(tmpno); + pgxslicepos[sliceno] = slicepos - 1; + sliceno++; + if (slicepos>maxslice) + maxslice = slicepos; + + //Colocamos el slices en su posicion correspondiente + strcpy(pgxfiles[slicepos-1],tmp); + } + } + + }/* else if pattern*.pgx */ + + if (!sliceno) { + fprintf(stdout,"[ERROR] No slices with this pattern founded !! Please check input volume name\n"); + return NULL; + } + /*if ( maxslice != sliceno) { + fprintf(stdout,"[ERROR] Slices are not sequentially numbered !! Please rename them accordingly\n"); + return NULL; + }*/ + + for (s=0;svolume_offset_x0; + cmptparm.y0 = parameters->volume_offset_y0; + cmptparm.z0 = parameters->volume_offset_z0; + cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 : cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1; + cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 : cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1; + cmptparm.l = !cmptparm.z0 ? (sliceno - 1) * parameters->subsampling_dz + 1 : cmptparm.z0 + (sliceno - 1) * parameters->subsampling_dz + 1; + + if (sign == '-') { + cmptparm.sgnd = 1; + } else { + cmptparm.sgnd = 0; + } + cmptparm.prec = prec; + cmptparm.bpp = prec; + cmptparm.dcoffset = parameters->dcoffset; + cmptparm.dx = parameters->subsampling_dx; + cmptparm.dy = parameters->subsampling_dy; + cmptparm.dz = parameters->subsampling_dz; + + /* create the volume */ + volume = opj_volume_create(numcomps, &cmptparm, color_space); + if(!volume) { + fclose(f); + return NULL; + } + /* set volume offset and reference grid */ + volume->x0 = cmptparm.x0; + volume->y0 = cmptparm.y0; + volume->z0 = cmptparm.z0; + volume->x1 = cmptparm.w; + volume->y1 = cmptparm.h; + volume->z1 = cmptparm.l; + + /* set volume data :only one component, that is a volume*/ + comp = &volume->comps[0]; + + }//if sliceno==1 + + offset = w * h * s; + + for (i = 0; i < w * h; i++) { + int v; + if (comp->prec <= 8) { + if (!comp->sgnd) { + v = readuchar(f); + } else { + v = (char) readuchar(f); + } + } else if (comp->prec <= 16) { + if (!comp->sgnd) { + v = readushort(f, cmptparm.bigendian); + } else { + v = (short) readushort(f, cmptparm.bigendian); + } + } else { + if (!comp->sgnd) { + v = readuint(f, cmptparm.bigendian); + } else { + v = (int) readuint(f, cmptparm.bigendian); + } + } + if (v > maxvalue) + maxvalue = v; + comp->data[i + offset] = v; + + } + fclose(f); + } // for s --> sliceno + comp->bpp = int_floorlog2(maxvalue) + 1; + if (sliceno != 1) + closedir( dirp ); + //dump_volume(stdout, volume); + return volume; +} + + +int volumetopgx(opj_volume_t * volume, char *outfile) { + int w, wr, wrr, h, hr, hrr, l, lr, lrr; + int i, j, compno, offset, sliceno; + FILE *fdest = NULL; + + for (compno = 0; compno < volume->numcomps; compno++) { + opj_volume_comp_t *comp = &volume->comps[compno]; + char name[256]; + int nbytes = 0; + char *tmp = outfile; + while (*tmp) { + tmp++; + } + while (*tmp!='.') { + tmp--; + } + *tmp='\0'; + for(sliceno = 0; sliceno < volume->z1 - volume->z0; sliceno++) { + + if (volume->numcomps > 1) { + sprintf(name, "%s%d-%d.pgx", outfile, sliceno+1, compno); + } else if ((volume->z1 - volume->z0) > 1) { + sprintf(name, "%s%d.pgx", outfile, sliceno+1); + } else { + sprintf(name, "%s.pgx", outfile); + } + + fdest = fopen(name, "wb"); + if (!fdest) { + fprintf(stdout, "[ERROR] Failed to open %s for writing \n", name); + return 1; + } + + fprintf(stdout,"[INFO] Writing in %s (%s)\n",name,volume->comps[0].bigendian ? "Bigendian" : "Little-endian"); + + w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx); + wr = volume->comps[compno].w; + wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]); + + h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy); + hr = volume->comps[compno].h; + hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]); + + l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz); + lr = volume->comps[compno].l; + lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]); + + fprintf(fdest, "PG %c%c %c%d %d %d\n", comp->bigendian ? 'M':'L', comp->bigendian ? 'L':'M',comp->sgnd ? '-' : '+', comp->prec, wr, hr); + if (comp->prec <= 8) { + nbytes = 1; + } else if (comp->prec <= 16) { + nbytes = 2; + } else { + nbytes = 4; + } + + offset = (sliceno / lrr * l) + (sliceno % lrr); + offset = wrr * hrr * offset; + //fprintf(stdout,"%d %d %d %d\n",offset,wrr*hrr,wrr,w); + for (i = 0; i < wrr * hrr; i++) { + int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset]; + if (volume->comps[0].bigendian) { + for (j = nbytes - 1; j >= 0; j--) { + char byte = (char) ((v >> (j * 8)) & 0xff); + fwrite(&byte, 1, 1, fdest); + } + } else { + for (j = 0; j <= nbytes - 1; j++) { + char byte = (char) ((v >> (j * 8)) & 0xff); + fwrite(&byte, 1, 1, fdest); + } + } + } + + fclose(fdest); + }//for sliceno + }//for compno + + return 0; +} + +/* -->> -->> -->> -->> + +BIN IMAGE FORMAT + +<<-- <<-- <<-- <<-- */ + +opj_volume_t* bintovolume(char *filename, char *fileimg, opj_cparameters_t *parameters) { + int subsampling_dx = parameters->subsampling_dx; + int subsampling_dy = parameters->subsampling_dy; + int subsampling_dz = parameters->subsampling_dz; + + int i, compno, w, h, l, numcomps = 1; + int prec, max = 0; + +// char temp[32]; + char line[100]; + int bigendian; + + FILE *f = NULL; + FILE *fimg = NULL; + OPJ_COLOR_SPACE color_space; + opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */ + opj_volume_t * volume = NULL; + opj_volume_comp_t *comp = NULL; + + bigendian = 0; + color_space = CLRSPC_GRAY; + + fimg = fopen(fileimg,"r"); + if (!fimg) { + fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", fileimg); + return 0; + } + + fseek(fimg, 0, SEEK_SET); + while (!feof(fimg)) { + fgets(line,100,fimg); + //fprintf(stdout,"%s %d \n",line,feof(fimg)); + if (strncmp(line,"Bpp",3) == 0){ + sscanf(line,"%*s%*[ \t]%d",&prec); + } else if (strncmp(line,"Color",5) == 0){ + sscanf(line, "%*s%*[ \t]%d",&color_space); + } else if (strncmp(line,"Dim",3) == 0){ + sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d",&w,&h,&l); + } + } + //fscanf(fimg, "Bpp%[ \t]%d%[ \t\n]",temp,&prec,temp); + //fscanf(fimg, "Color Map%[ \t]%d%[ \n\t]Dimensions%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&color_space,temp,temp,&w,temp,&h,temp,&l,temp); + //fscanf(fimg, "Resolution(mm)%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&subsampling_dx,temp,&subsampling_dy,temp,&subsampling_dz,temp); + + #ifdef VERBOSE + fprintf(stdout, "[INFO] %d \t %d %d %d \t %3.2f %2.2f %2.2f \t %d \n",color_space,w,h,l,subsampling_dx,subsampling_dy,subsampling_dz,prec); + #endif + fclose(fimg); + + /* initialize volume components */ + memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t)); + + cmptparm.prec = prec; + cmptparm.bpp = prec; + cmptparm.sgnd = 0; + cmptparm.bigendian = bigendian; + cmptparm.dcoffset = parameters->dcoffset; + cmptparm.dx = subsampling_dx; + cmptparm.dy = subsampling_dy; + cmptparm.dz = subsampling_dz; + cmptparm.w = w; + cmptparm.h = h; + cmptparm.l = l; + + /* create the volume */ + volume = opj_volume_create(numcomps, &cmptparm, color_space); + if(!volume) { + fprintf(stdout,"[ERROR] Unable to create volume"); + fclose(f); + return NULL; + } + + /* set volume offset and reference grid */ + volume->x0 = parameters->volume_offset_x0; + volume->y0 = parameters->volume_offset_y0; + volume->z0 = parameters->volume_offset_z0; + volume->x1 = parameters->volume_offset_x0 + (w - 1) * subsampling_dx + 1; + volume->y1 = parameters->volume_offset_y0 + (h - 1) * subsampling_dy + 1; + volume->z1 = parameters->volume_offset_z0 + (l - 1) * subsampling_dz + 1; + + /* set volume data */ + f = fopen(filename, "rb"); + if (!f) { + fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", filename); + return 0; + } + + /* BINARY */ + for (compno = 0; compno < volume->numcomps; compno++) { + int whl = w * h * l; + /* set volume data */ + comp = &volume->comps[compno]; + + /*if (comp->prec <= 8) { + if (!comp->sgnd) { + unsigned char *data = (unsigned char *) malloc(whl * sizeof(unsigned char)); + fread(data, 1, whl, f); + for (i = 0; i < whl; i++) { + comp->data[i] = data[i]; + if (comp->data[i] > max) + max = comp->data[i]; + } + free(data); + } else { + char *data = (char *) malloc(whl); + fread(data, 1, whl, f); + for (i = 0; i < whl; i++) { + comp->data[i] = data[i]; + if (comp->data[i] > max) + max = comp->data[i]; + } + free(data); + } + } else if (comp->prec <= 16) { + if (!comp->sgnd) { + unsigned short *data = (unsigned short *) malloc(whl * sizeof(unsigned short)); + int leido = fread(data, 2, whl, f); + if (!leido) { + free(data); fclose(f); + return NULL; + } + + for (i = 0; i < whl; i++) { + if (bigendian) //(c1 << 8) + c2; + comp->data[i] = data[i]; + else{ //(c2 << 8) + c1; + comp->data[i] = ShortSwap(data[i]); + } + if (comp->data[i] > max) + max = comp->data[i]; + } + free(data); + } else { + short *data = (short *) malloc(whl); + int leido = fread(data, 2, whl, f); + if (!leido) { + free(data); fclose(f); + return NULL; + } + for (i = 0; i < whl; i++) { + if (bigendian){ //(c1 << 8) + c2; + comp->data[i] = data[i]; + }else{ //(c2 << 8) + c1; + comp->data[i] = (short) ShortSwap((unsigned short) data[i]); + } + if (comp->data[i] > max) + max = comp->data[i]; + } + free(data); + } + } else { + if (!comp->sgnd) { + unsigned int *data = (unsigned int *) malloc(whl * sizeof(unsigned int)); + int leido = fread(data, 4, whl, f); + if (!leido) { + free(data); fclose(f); + return NULL; + } for (i = 0; i < whl; i++) { + if (!bigendian) + comp->data[i] = LongSwap(data[i]); + else + comp->data[i] = data[i]; + if (comp->data[i] > max) + max = comp->data[i]; + } + free(data); + } else { + int leido = fread(comp->data, 4, whl, f); + if (!leido) { + fclose(f); + return NULL; + } + for (i = 0; i < whl; i++) { + if (!bigendian) + comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]); + if (comp->data[i] > max) + max = comp->data[i]; + } + } + }*/ + + for (i = 0; i < whl; i++) { + int v; + if (comp->prec <= 8) { + if (!comp->sgnd) { + v = readuchar(f); + } else { + v = (char) readuchar(f); + } + } else if (comp->prec <= 16) { + if (!comp->sgnd) { + v = readushort(f, bigendian); + } else { + v = (short) readushort(f, bigendian); + } + } else { + if (!comp->sgnd) { + v = readuint(f, bigendian); + } else { + v = (int) readuint(f, bigendian); + } + } + if (v > max) + max = v; + comp->data[i] = v; + } + comp->bpp = int_floorlog2(max) + 1; + } + fclose(f); + return volume; +} + +int volumetobin(opj_volume_t * volume, char *outfile) { + int w, wr, wrr, h, hr, hrr, l, lr, lrr, max; + int i,j, compno, nbytes; + int offset, sliceno; + FILE *fdest = NULL; + FILE *fimgdest = NULL; +// char *imgtemp; + char name[256]; + + for (compno = 0; compno < 1; compno++) { //Only one component + + fdest = fopen(outfile, "wb"); + if (!fdest) { + fprintf(stdout, "[ERROR] Failed to open %s for writing\n", outfile); + return 1; + } + fprintf(stdout,"[INFO] Writing outfile %s (%s) \n",outfile, volume->comps[0].bigendian ? "Bigendian" : "Little-endian"); + + w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx); + wr = volume->comps[compno].w; + wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]); + + h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy); + hr = volume->comps[compno].h; + hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]); + + l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz); + lr = volume->comps[compno].l; + lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]); + + max = (volume->comps[compno].prec <= 8) ? 255 : (1 << volume->comps[compno].prec) - 1; + + volume->comps[compno].x0 = int_ceildivpow2(volume->comps[compno].x0 - int_ceildiv(volume->x0, volume->comps[compno].dx), volume->comps[compno].factor[0]); + volume->comps[compno].y0 = int_ceildivpow2(volume->comps[compno].y0 - int_ceildiv(volume->y0, volume->comps[compno].dy), volume->comps[compno].factor[1]); + volume->comps[compno].z0 = int_ceildivpow2(volume->comps[compno].z0 - int_ceildiv(volume->z0, volume->comps[compno].dz), volume->comps[compno].factor[2]); + + if (volume->comps[0].prec <= 8) { + nbytes = 1; + } else if (volume->comps[0].prec <= 16) { + nbytes = 2; + } else { + nbytes = 4; + } + + //fprintf(stdout,"w %d wr %d wrr %d h %d hr %d hrr %d l %d lr %d lrr %d max %d nbytes %d\n Factor %d %d %d",w,wr,wrr,h,hr,hrr,l,lr,lrr,max,nbytes,volume->comps[compno].factor[0],volume->comps[compno].factor[1],volume->comps[compno].factor[2]); + + for(sliceno = 0; sliceno < lrr; sliceno++) { + offset = (sliceno / lrr * l) + (sliceno % lrr); + offset = wrr * hrr * offset; + for (i = 0; i < wrr * hrr; i++) { + int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset]; + if (volume->comps[0].bigendian) { + for (j = nbytes - 1; j >= 0; j--) { + char byte = (char) ((v >> (j * 8)) & 0xff); + fwrite(&byte, 1, 1, fdest); + } + } else { + for (j = 0; j <= nbytes - 1; j++) { + char byte = (char) ((v >> (j * 8)) & 0xff); + fwrite(&byte, 1, 1, fdest); + } + } + } + } + + } + + fclose(fdest); + + sprintf(name,"%s.img",outfile); + fimgdest = fopen(name, "w"); + if (!fimgdest) { + fprintf(stdout, "[ERROR] Failed to open %s for writing\n", name); + return 1; + } + fprintf(fimgdest, "Bpp\t%d\nColor Map\t2\nDimensions\t%d\t%d\t%d\nResolution(mm)\t%d\t%d\t%d\t\n", + volume->comps[0].prec,wrr,hrr,lrr,volume->comps[0].dx,volume->comps[0].dy,volume->comps[0].dz); + + fclose(fimgdest); + return 0; +} +/* -->> -->> -->> -->> + +IMG IMAGE FORMAT + +<<-- <<-- <<-- <<-- */ +opj_volume_t* imgtovolume(char *fileimg, opj_cparameters_t *parameters) { + int subsampling_dx = parameters->subsampling_dx; + int subsampling_dy = parameters->subsampling_dy; + int subsampling_dz = parameters->subsampling_dz; + + int i, compno, w, h, l, numcomps = 1; + int prec, max = 0, min = 0; + float dx, dy, dz; + char filename[100], tmpdirpath[100], dirpath[100], *tmp; + char line[100], datatype[100]; + int bigendian; + + FILE *f = NULL; + FILE *fimg = NULL; + OPJ_COLOR_SPACE color_space; + opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */ + opj_volume_t * volume = NULL; + opj_volume_comp_t *comp = NULL; + + bigendian = 0; + color_space = CLRSPC_GRAY; + + fimg = fopen(fileimg,"r"); + if (!fimg) { + fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", fileimg); + return 0; + } + + //Fetch only the path + strcpy(tmpdirpath,fileimg); + if ((tmp = strrchr(tmpdirpath,'/')) != NULL){ + tmp++; *tmp='\0'; + strcpy(dirpath,tmpdirpath); + } else { + strcpy(dirpath,"./"); + } + + fseek(fimg, 0, SEEK_SET); + while (!feof(fimg)) { + fgets(line,100,fimg); + //fprintf(stdout,"%s %d \n",line,feof(fimg)); + if (strncmp(line,"Image",5) == 0){ + sscanf(line,"%*s%*[ \t]%s",datatype); + } else if (strncmp(line,"File",4) == 0){ + sscanf(line,"%*s %*s%*[ \t]%s",filename); + strcat(dirpath, filename); + strcpy(filename,dirpath); + } else if (strncmp(line,"Min",3) == 0){ + sscanf(line,"%*s %*s%*[ \t]%d%*[ \t]%d",&min,&max); + prec = int_floorlog2(max - min + 1); + } else if (strncmp(line,"Bpp",3) == 0){ + sscanf(line,"%*s%*[ \t]%d",&prec); + } else if (strncmp(line,"Color",5) == 0){ + sscanf(line, "%*s %*s%*[ \t]%d",&color_space); + } else if (strncmp(line,"Dim",3) == 0){ + sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d",&w,&h,&l); + } else if (strncmp(line,"Res",3) == 0){ + sscanf(line,"%*s%*[ \t]%f%*[ \t]%f%*[ \t]%f",&dx,&dy,&dz); + } + + } + #ifdef VERBOSE + fprintf(stdout, "[INFO] %s %d \t %d %d %d \t %f %f %f \t %d %d %d \n",filename,color_space,w,h,l,dx,dy,dz,max,min,prec); + #endif + fclose(fimg); + + /* error control */ + if ( !prec || !w || !h || !l ){ + fprintf(stderr,"[ERROR] Unable to read IMG file correctly. Found some null values."); + return NULL; + } + + /* initialize volume components */ + memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t)); + + cmptparm.prec = prec; + cmptparm.bpp = prec; + cmptparm.sgnd = 0; + cmptparm.bigendian = bigendian; + cmptparm.dcoffset = parameters->dcoffset; + cmptparm.dx = subsampling_dx; + cmptparm.dy = subsampling_dy; + cmptparm.dz = subsampling_dz; + cmptparm.w = w; + cmptparm.h = h; + cmptparm.l = l; + + /* create the volume */ + volume = opj_volume_create(numcomps, &cmptparm, color_space); + if(!volume) { + fprintf(stdout,"[ERROR] Unable to create volume"); + return NULL; + } + + /* set volume offset and reference grid */ + volume->x0 = parameters->volume_offset_x0; + volume->y0 = parameters->volume_offset_y0; + volume->z0 = parameters->volume_offset_z0; + volume->x1 = parameters->volume_offset_x0 + (w - 1) * subsampling_dx + 1; + volume->y1 = parameters->volume_offset_y0 + (h - 1) * subsampling_dy + 1; + volume->z1 = parameters->volume_offset_z0 + (l - 1) * subsampling_dz + 1; + + max = 0; + /* set volume data */ + f = fopen(filename, "rb"); + if (!f) { + fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", filename); + fclose(f); + return 0; + } + + /* BINARY */ + for (compno = 0; compno < volume->numcomps; compno++) { + int whl = w * h * l; + /* set volume data */ + comp = &volume->comps[compno]; + + /*if (comp->prec <= 8) { + if (!comp->sgnd) { + unsigned char *data = (unsigned char *) malloc(whl * sizeof(unsigned char)); + fread(data, 1, whl, f); + for (i = 0; i < whl; i++) { + comp->data[i] = data[i]; + if (comp->data[i] > max) + max = comp->data[i]; + } + free(data); + } else { + char *data = (char *) malloc(whl); + fread(data, 1, whl, f); + for (i = 0; i < whl; i++) { + comp->data[i] = data[i]; + if (comp->data[i] > max) + max = comp->data[i]; + } + free(data); + } + } else if (comp->prec <= 16) { + if (!comp->sgnd) { + unsigned short *data = (unsigned short *) malloc(whl * sizeof(unsigned short)); + int leido = fread(data, 2, whl, f); + if (!leido) { + free(data); fclose(f); + return NULL; + } + + for (i = 0; i < whl; i++) { + if (bigendian) //(c1 << 8) + c2; + comp->data[i] = data[i]; + else{ //(c2 << 8) + c1; + comp->data[i] = ShortSwap(data[i]); + } + if (comp->data[i] > max) + max = comp->data[i]; + } + free(data); + } else { + short *data = (short *) malloc(whl); + int leido = fread(data, 2, whl, f); + if (!leido) { + free(data); fclose(f); + return NULL; + } + for (i = 0; i < whl; i++) { + if (bigendian){ //(c1 << 8) + c2; + comp->data[i] = data[i]; + }else{ //(c2 << 8) + c1; + comp->data[i] = (short) ShortSwap((unsigned short) data[i]); + } + if (comp->data[i] > max) + max = comp->data[i]; + } + free(data); + } + } else { + if (!comp->sgnd) { + unsigned int *data = (unsigned int *) malloc(whl * sizeof(unsigned int)); + int leido = fread(data, 4, whl, f); + if (!leido) { + free(data); fclose(f); + return NULL; + } for (i = 0; i < whl; i++) { + if (!bigendian) + comp->data[i] = LongSwap(data[i]); + else + comp->data[i] = data[i]; + if (comp->data[i] > max) + max = comp->data[i]; + } + free(data); + } else { + int leido = fread(comp->data, 4, whl, f); + if (!leido) { + fclose(f); + return NULL; + } + for (i = 0; i < whl; i++) { + if (!bigendian) + comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]); + if (comp->data[i] > max) + max = comp->data[i]; + } + } + }*/ + + for (i = 0; i < whl; i++) { + int v; + if (comp->prec <= 8) { + if (!comp->sgnd) { + v = readuchar(f); + } else { + v = (char) readuchar(f); + } + } else if (comp->prec <= 16) { + if (!comp->sgnd) { + v = readushort(f, bigendian); + } else { + v = (short) readushort(f, bigendian); + } + } else { + if (!comp->sgnd) { + v = readuint(f, bigendian); + } else { + v = (int) readuint(f, bigendian); + } + } + if (v > max) + max = v; + comp->data[i] = v; + } + comp->bpp = int_floorlog2(max) + 1; + } + fclose(f); + return volume; +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/convert.h b/contrib/menuetlibc/openjpeg/jp3d/codec/convert.h new file mode 100755 index 0000000000..18ae212796 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/convert.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, HervŽ Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __JP3D_CONVERT_H +#define __JP3D_CONVERT_H + +/** +Load a single volume component encoded in PGX file format +@param filename Name of the PGX file to load +@param parameters *List ?* +@return Returns a greyscale volume if successful, returns NULL otherwise +*/ +opj_volume_t* pgxtovolume(char *filename, opj_cparameters_t *parameters); + +int volumetopgx(opj_volume_t *volume, char *outfile); + +opj_volume_t* bintovolume(char *filename,char *fileimg, opj_cparameters_t *parameters); + +int volumetobin(opj_volume_t *volume, char *outfile); + +opj_volume_t* imgtovolume(char *fileimg, opj_cparameters_t *parameters); + +#endif /* __J2K_CONVERT_H */ + diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/getopt.c b/contrib/menuetlibc/openjpeg/jp3d/codec/getopt.c new file mode 100755 index 0000000000..69addc971a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/getopt.c @@ -0,0 +1,109 @@ +/* + * Copyright (c) 1987, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University 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 THE REGENTS AND CONTRIBUTORS ``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 THE REGENTS OR CONTRIBUTORS 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. + */ + +/* last review : october 29th, 2002 */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95"; +#endif /* LIBC_SCCS and not lint */ + +#include +#include +#include + +int opterr = 1, /* if error message should be printed */ + optind = 1, /* index into parent argv vector */ + optopt, /* character checked for validity */ + optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG "" + +/* + * getopt -- + * Parse argc/argv argument vector. + */ +int getopt(int nargc, char *const *nargv, const char *ostr) { + + # define __progname nargv[0] /* program name */ + + static char *place = EMSG; /* option letter processing */ + char *oli; /* option letter list index */ + + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return (-1); + } + if (place[1] && *++place == '-') { /* found "--" */ + ++optind; + place = EMSG; + return (-1); + } + } /* option letter okay? */ + + if ((optopt = (int) *place++) == (int) ':' || !(oli = strchr(ostr, optopt))) { + /* if the user didn't specify '-' as an option, assume it means -1. */ + if (optopt == (int) '-') + return (-1); + if (!*place) + ++optind; + if (opterr && *ostr != ':') + (void) fprintf(stdout,"[ERROR] %s: illegal option -- %c\n", __progname, optopt); + return (BADCH); + } + + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if (*ostr == ':') + return (BADARG); + if (opterr) + (void) fprintf(stdout, "[ERROR] %s: option requires an argument -- %c\n", __progname, optopt); + return (BADCH); + } else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + return (optopt); /* dump back option letter */ +} diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/getopt.h b/contrib/menuetlibc/openjpeg/jp3d/codec/getopt.h new file mode 100755 index 0000000000..23299d1b9b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/getopt.h @@ -0,0 +1,14 @@ +/* last review : october 29th, 2002 */ + +#ifndef _GETOPT_H_ +#define _GETOPT_H_ + +extern int opterr; +extern int optind; +extern int optopt; +extern int optreset; +extern char *optarg; + +extern int getopt(int nargc, char *const *nargv, const char *ostr); + +#endif /* _GETOPT_H_ */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_to_volume.c b/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_to_volume.c new file mode 100755 index 0000000000..8df9c405cb --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_to_volume.c @@ -0,0 +1,540 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#include +#include +#include +#include + +#include "../libjp3dvm/openjpeg3d.h" +#include "getopt.h" +#include "convert.h" + +#ifdef _WIN32 +#include +#else +#define stricmp strcasecmp +#define strnicmp strncasecmp +#endif /* _WIN32 */ + +/* ----------------------------------------------------------------------- */ +static double calc_PSNR(opj_volume_t *original, opj_volume_t *decoded) +{ + int max, i, k, compno = 0, size; + double sum, total = 0; + int global = 1; + + max = (original->comps[compno].prec <= 8) ? 255 : (1 << original->comps[compno].prec) - 1; + if (global) { + size = (original->x1 - original->x0) * (original->y1 - original->y0) * (original->z1 - original->z0); + + for (compno = 0; compno < original->numcomps; compno++) { + for(sum = 0, i = 0; i < size; ++i) { + if ((decoded->comps[compno].data[i] < 0) || (decoded->comps[compno].data[i] > max)) + fprintf(stdout,"[WARNING] Data out of range during PSNR computing...\n"); + else + sum += (original->comps[compno].data[i] - decoded->comps[compno].data[i]) * (original->comps[compno].data[i] - decoded->comps[compno].data[i]); + } + } + sum /= size; + total = ((sum==0.0) ? 0.0 : 10 * log10(max * max / sum)); + } else { + size = (original->x1 - original->x0) * (original->y1 - original->y0); + + for (k = 0; k < original->z1 - original->z0; k++) { + int offset = k * size; + for (sum = 0, compno = 0; compno < original->numcomps; compno++) { + for(i = 0; i < size; ++i) { + if ((decoded->comps[compno].data[i + offset] < 0) || (decoded->comps[compno].data[i + offset] > max)) + fprintf(stdout,"[WARNING] Data out of range during PSNR computing...\n"); + else + sum += (original->comps[compno].data[i + offset] - decoded->comps[compno].data[i + offset]) * (original->comps[compno].data[i + offset] - decoded->comps[compno].data[i + offset]); + } + } + sum /= size; + total = total + ((sum==0.0) ? 0.0 : 10 * log10(max * max / sum)); + } + + } + if(total == 0) /* perfect reconstruction, PSNR should return infinity */ + return -1.0; + + return total; + //return 20 * log10((max - 1) / sqrt(sum)); +} + +static double calc_SSIM(opj_volume_t *original, opj_volume_t *decoded) +{ + int max, i, compno = 0, size, sizeM; + double sum; + double mux = 0.0, muy = 0.0, sigmax = 0.0, sigmay = 0.0, + sigmaxy = 0.0, structx = 0.0, structy = 0.0; + double lcomp,ccomp,scomp; + double C1,C2,C3; + + max = (original->comps[compno].prec <= 8) ? 255 : (1 << original->comps[compno].prec) - 1; + size = (original->x1 - original->x0) * (original->y1 - original->y0) * (original->z1 - original->z0); + + //MSSIM + +// sizeM = size / (original->z1 - original->z0); + + sizeM = size; + for(sum = 0, i = 0; i < sizeM; ++i) { + // First, the luminance of each signal is compared. + mux += original->comps[compno].data[i]; + muy += decoded->comps[compno].data[i]; + } + mux /= sizeM; + muy /= sizeM; + + //We use the standard deviation (the square root of variance) as an estimate of the signal contrast. + for(sum = 0, i = 0; i < sizeM; ++i) { + // First, the luminance of each signal is compared. + sigmax += (original->comps[compno].data[i] - mux) * (original->comps[compno].data[i] - mux); + sigmay += (decoded->comps[compno].data[i] - muy) * (decoded->comps[compno].data[i] - muy); + sigmaxy += (original->comps[compno].data[i] - mux) * (decoded->comps[compno].data[i] - muy); + } + sigmax /= sizeM - 1; + sigmay /= sizeM - 1; + sigmaxy /= sizeM - 1; + + sigmax = sqrt(sigmax); + sigmay = sqrt(sigmay); + sigmaxy = sqrt(sigmaxy); + + //Third, the signal is normalized (divided) by its own standard deviation, + //so that the two signals being compared have unit standard deviation. + + //Luminance comparison + C1 = (0.01 * max) * (0.01 * max); + lcomp = ((2 * mux * muy) + C1)/((mux*mux) + (muy*mux) + C1); + //Constrast comparison + C2 = (0.03 * max) * (0.03 * max); + ccomp = ((2 * sigmax * sigmay) + C2)/((sigmax*sigmax) + (sigmay*sigmay) + C2); + //Structure comparison + C3 = C2 / 2; + scomp = (sigmaxy + C3) / (sigmax * sigmay + C3); + //Similarity measure + + sum = lcomp * ccomp * scomp; + return sum; +} + +void decode_help_display() { + fprintf(stdout,"HELP\n----\n\n"); + fprintf(stdout,"- the -h option displays this help information on screen\n\n"); + + fprintf(stdout,"List of parameters for the JPEG 2000 encoder:\n"); + fprintf(stdout,"\n"); + fprintf(stdout," Required arguments \n"); + fprintf(stdout," ---------------------------- \n"); + fprintf(stdout," -i ( *.jp3d, *.j3d )\n"); + fprintf(stdout," Currently accepts J3D-files. The file type is identified based on its suffix.\n"); + fprintf(stdout," -o ( *.pgx, *.bin )\n"); + fprintf(stdout," Currently accepts PGX-files and BIN-files. Binary data is written to the file (not ascii). \n"); + fprintf(stdout," If a PGX filename is given, there will be as many output files as slices; \n"); + fprintf(stdout," an indice starting from 0 will then be appended to the output filename,\n"); + fprintf(stdout," just before the \"pgx\" extension.\n"); + fprintf(stdout," -m ( *.img ) \n"); + fprintf(stdout," Required only for BIN-files. Ascii data of volume characteristics is written. \n"); + fprintf(stdout,"\n"); + fprintf(stdout," Optional \n"); + fprintf(stdout," ---------------------------- \n"); + fprintf(stdout," -h \n "); + fprintf(stdout," Display the help information\n"); + fprintf(stdout," -r \n"); + fprintf(stdout," Set the number of highest resolution levels to be discarded on each dimension. \n"); + fprintf(stdout," The volume resolution is effectively divided by 2 to the power of the\n"); + fprintf(stdout," number of discarded levels. The reduce factor is limited by the\n"); + fprintf(stdout," smallest total number of decomposition levels among tiles.\n"); + fprintf(stdout," -l \n"); + fprintf(stdout," Set the maximum number of quality layers to decode. If there are\n"); + fprintf(stdout," less quality layers than the specified number, all the quality layers\n"); + fprintf(stdout," are decoded. \n"); + fprintf(stdout," -O original-file \n"); + fprintf(stdout," This option offers the possibility to compute some quality results \n"); + fprintf(stdout," for the decompressed volume, like the PSNR value achieved or the global SSIM value. \n"); + fprintf(stdout," Needs the original file in order to compare with the new one.\n"); + fprintf(stdout," NOTE: Only valid when -r option is 0,0,0 (both original and decompressed volumes have same resolutions) \n"); + fprintf(stdout," NOTE: If original file is .BIN file, the volume characteristics file shall be defined with the -m option. \n"); + fprintf(stdout," (i.e. -O original-BIN-file -m original-IMG-file) \n"); + fprintf(stdout," -BE \n"); + fprintf(stdout," Define that the recovered volume data will be saved with big endian byte order.\n"); + fprintf(stdout," By default, little endian byte order is used.\n"); + fprintf(stdout,"\n"); +} + +/* -------------------------------------------------------------------------- */ + +int get_file_format(char *filename) { + int i; + static const char *extension[] = {"pgx", "bin", "j3d", "jp3d", "j2k", "img"}; + static const int format[] = { PGX_DFMT, BIN_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT, IMG_DFMT}; + char * ext = strrchr(filename, '.'); + if(ext) { + ext++; + for(i = 0; i < sizeof(format) / sizeof(format[0]); i++) { + if(strnicmp(ext, extension[i], 3) == 0) { + return format[i]; + } + } + } + + return -1; +} + +/* -------------------------------------------------------------------------- */ + +int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters) { + /* parse the command line */ + + while (1) { + int c = getopt(argc, argv, "i:o:O:r:l:B:m:h"); + if (c == -1) + break; + switch (c) { + case 'i': /* input file */ + { + char *infile = optarg; + parameters->decod_format = get_file_format(infile); + switch(parameters->decod_format) { + case J3D_CFMT: + case J2K_CFMT: + break; + default: + fprintf(stdout, "[ERROR] Unknown format for infile %s [only *.j3d]!! \n", infile); + return 1; + break; + } + strncpy(parameters->infile, infile, MAX_PATH); + fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile); + + } + break; + + case 'm': /* img file */ + { + char *imgfile = optarg; + int imgformat = get_file_format(imgfile); + switch(imgformat) { + case IMG_DFMT: + break; + default: + fprintf(stdout, "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n", imgfile); + return 1; + break; + } + strncpy(parameters->imgfile, imgfile, MAX_PATH); + fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile, imgformat); + } + break; + + /* ----------------------------------------------------- */ + + case 'o': /* output file */ + { + char *outfile = optarg; + parameters->cod_format = get_file_format(outfile); + switch(parameters->cod_format) { + case PGX_DFMT: + case BIN_DFMT: + break; + default: + fprintf(stdout, "[ERROR] Unrecognized format for outfile : %s [accept only *.pgx or *.bin] !!\n\n", outfile); + return 1; + break; + } + strncpy(parameters->outfile, outfile, MAX_PATH); + fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile); + + } + break; + + /* ----------------------------------------------------- */ + + case 'O': /* Original image for PSNR computing */ + { + char *original = optarg; + parameters->orig_format = get_file_format(original); + switch(parameters->orig_format) { + case PGX_DFMT: + case BIN_DFMT: + break; + default: + fprintf(stdout, "[ERROR] Unrecognized format for original file : %s [accept only *.pgx or *.bin] !!\n\n", original); + return 1; + break; + } + strncpy(parameters->original, original, MAX_PATH); + fprintf(stdout, "[INFO] Original file: %s \n", parameters->original); + } + break; + + /* ----------------------------------------------------- */ + + case 'r': /* reduce option */ + { + //sscanf(optarg, "%d, %d, %d", ¶meters->cp_reduce[0], ¶meters->cp_reduce[1], ¶meters->cp_reduce[2]); + int aux; + aux = sscanf(optarg, "%d,%d,%d", ¶meters->cp_reduce[0], ¶meters->cp_reduce[1], ¶meters->cp_reduce[2]); + if (aux == 2) + parameters->cp_reduce[2] = 0; + else if (aux == 1) { + parameters->cp_reduce[1] = parameters->cp_reduce[0]; + parameters->cp_reduce[2] = 0; + }else if (aux == 0){ + parameters->cp_reduce[0] = 0; + parameters->cp_reduce[1] = 0; + parameters->cp_reduce[2] = 0; + } + } + break; + + /* ----------------------------------------------------- */ + + case 'l': /* layering option */ + { + sscanf(optarg, "%d", ¶meters->cp_layer); + } + break; + + /* ----------------------------------------------------- */ + + case 'B': /* BIGENDIAN vs. LITTLEENDIAN */ + { + parameters->bigendian = 1; + } + break; + + /* ----------------------------------------------------- */ + + case 'L': /* BIGENDIAN vs. LITTLEENDIAN */ + { + parameters->decod_format = LSE_CFMT; + } + break; + + /* ----------------------------------------------------- */ + + case 'h': /* display an help description */ + { + decode_help_display(); + return 1; + } + break; + + /* ----------------------------------------------------- */ + + default: + fprintf(stdout,"[WARNING] This option is not valid \"-%c %s\"\n",c, optarg); + break; + } + } + + /* check for possible errors */ + + if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) { + fprintf(stdout,"[ERROR] At least one required argument is missing\n Check jp3d_to_volume -help for usage information\n"); + return 1; + } + + return 0; +} + +/* -------------------------------------------------------------------------- */ + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting no client object +*/ +void info_callback(const char *msg, void *client_data) { + fprintf(stdout, "[INFO] %s", msg); +} + +/* -------------------------------------------------------------------------- */ + +int main(int argc, char **argv) { + + opj_dparameters_t parameters; /* decompression parameters */ + opj_event_mgr_t event_mgr; /* event manager */ + opj_volume_t *volume = NULL; + + opj_volume_t *original = NULL; + opj_cparameters_t cparameters; /* original parameters */ + + FILE *fsrc = NULL; + unsigned char *src = NULL; + int file_length; + int decodeok; + double psnr, ssim; + + opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */ + opj_cio_t *cio = NULL; + + /* configure the event callbacks (not required) */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = info_callback; + + /* set decoding parameters to default values */ + opj_set_default_decoder_parameters(¶meters); + + /* parse input and get user decoding parameters */ + strcpy(parameters.original,"NULL"); + strcpy(parameters.imgfile,"NULL"); + if(parse_cmdline_decoder(argc, argv, ¶meters) == 1) { + return 0; + } + + /* read the input file and put it in memory */ + /* ---------------------------------------- */ + fprintf(stdout, "[INFO] Loading %s file \n",parameters.decod_format==J3D_CFMT ? ".jp3d" : ".j2k"); + fsrc = fopen(parameters.infile, "rb"); + if (!fsrc) { + fprintf(stdout, "[ERROR] Failed to open %s for reading\n", parameters.infile); + return 1; + } + fseek(fsrc, 0, SEEK_END); + file_length = ftell(fsrc); + fseek(fsrc, 0, SEEK_SET); + src = (unsigned char *) malloc(file_length); + fread(src, 1, file_length, fsrc); + fclose(fsrc); + + /* decode the code-stream */ + /* ---------------------- */ + if (parameters.decod_format == J3D_CFMT || parameters.decod_format == J2K_CFMT) { + /* get a JP3D or J2K decoder handle */ + if (parameters.decod_format == J3D_CFMT) + dinfo = opj_create_decompress(CODEC_J3D); + else if (parameters.decod_format == J2K_CFMT) + dinfo = opj_create_decompress(CODEC_J2K); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length); + + /* decode the stream and fill the volume structure */ + volume = opj_decode(dinfo, cio); + if(!volume) { + fprintf(stdout, "[ERROR] jp3d_to_volume: failed to decode volume!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + + /* close the byte stream */ + opj_cio_close(cio); + } + + /* free the memory containing the code-stream */ + free(src); + src = NULL; + + /* create output volume */ + /* ------------------- */ + + switch (parameters.cod_format) { + case PGX_DFMT: /* PGX */ + decodeok = volumetopgx(volume, parameters.outfile); + if (decodeok) + fprintf(stdout,"[ERROR] Unable to write decoded volume into pgx files\n"); + break; + + case BIN_DFMT: /* BMP */ + decodeok = volumetobin(volume, parameters.outfile); + if (decodeok) + fprintf(stdout,"[ERROR] Unable to write decoded volume into pgx files\n"); + break; + } + switch (parameters.orig_format) { + case PGX_DFMT: /* PGX */ + if (strcmp("NULL",parameters.original) != 0){ + fprintf(stdout,"Loading original file %s \n",parameters.original); + cparameters.subsampling_dx = 1; cparameters.subsampling_dy = 1; cparameters.subsampling_dz = 1; + cparameters.volume_offset_x0 = 0;cparameters.volume_offset_y0 = 0;cparameters.volume_offset_z0 = 0; + original = pgxtovolume(parameters.original,&cparameters); + } + break; + + case BIN_DFMT: /* BMP */ + if (strcmp("NULL",parameters.original) != 0 && strcmp("NULL",parameters.imgfile) != 0){ + fprintf(stdout,"Loading original file %s %s\n",parameters.original,parameters.imgfile); + cparameters.subsampling_dx = 1; cparameters.subsampling_dy = 1; cparameters.subsampling_dz = 1; + cparameters.volume_offset_x0 = 0;cparameters.volume_offset_y0 = 0;cparameters.volume_offset_z0 = 0; + original = bintovolume(parameters.original,parameters.imgfile,&cparameters); + } + break; + } + + fprintf(stdout, "[RESULT] Volume: %d x %d x %d (x %d bpv)\n ", + (volume->comps[0].w >> volume->comps[0].factor[0]), + (volume->comps[0].h >> volume->comps[0].factor[1]), + (volume->comps[0].l >> volume->comps[0].factor[2]),volume->comps[0].prec); + + if(original){ + psnr = calc_PSNR(original,volume); + ssim = calc_SSIM(original,volume); + if (psnr < 0.0) + fprintf(stdout, " PSNR: Inf , SSMI %f -- Perfect reconstruction!\n",ssim); + else + fprintf(stdout, " PSNR: %f , SSIM %f \n",psnr,ssim); + } + /* free remaining structures */ + if(dinfo) { + opj_destroy_decompress(dinfo); + } + + /* free volume data structure */ + opj_volume_destroy(volume); + + return 0; +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.ncb b/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.ncb new file mode 100755 index 0000000000000000000000000000000000000000..fc66b661edfbd0af2e2a473a556b48111c086a3f GIT binary patch literal 470016 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 _P5&z}u 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 F{2x0#sNDbn literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.sln b/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.sln new file mode 100755 index 0000000000..e696c5f741 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.sln @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jp3d_vm_dec", "jp3d_vm_dec.vcproj", "{E0C1B905-5B10-4C9A-AF55-2D8144D518AB}" + ProjectSection(ProjectDependencies) = postProject + {6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibJp3dVM", "..\LibJp3dVM.vcproj", "{6F3FB035-8F4E-4794-B091-0F0A20223BE7}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {E0C1B905-5B10-4C9A-AF55-2D8144D518AB}.Debug.ActiveCfg = Debug|Win32 + {E0C1B905-5B10-4C9A-AF55-2D8144D518AB}.Debug.Build.0 = Debug|Win32 + {E0C1B905-5B10-4C9A-AF55-2D8144D518AB}.Release.ActiveCfg = Release|Win32 + {E0C1B905-5B10-4C9A-AF55-2D8144D518AB}.Release.Build.0 = Release|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.ActiveCfg = Debug|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.Build.0 = Debug|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.ActiveCfg = Release|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.suo b/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_dec.suo new file mode 100755 index 0000000000000000000000000000000000000000..28c2e25584f555673a87eee32fe678e195049c10 GIT binary patch literal 13312 zcmeI2Pi)*r701VRN|U-xXqzU%q-BZYCY0FtZ)!JCx?Zo7v~l9bAt}OAwDzvub=Uh_ zcGpfqoC_Bus1PUMfYcUx0zu0K2@Wj+3DE-zLL3XU2g(JhNc;=X)_lG*``bVE?q^SmdQFUPiI zqmkafGjP^;e6l8B!Y0WxZLYAIwWmEujnAEAq+0sv%ip>5{O^9z)Iy`jcDt72Q1r~4 zISKU{a$$41S{JM8_L%0TJ(S)HG>%mbDilb5mCl)n$(U!%DHG?JHJ{--#+dx_jB8f$ z`yd)ndq8`pR{GMR+Fwd1p`;Z^m?^$5n+Z#Ok(mKwLb-| ziS&SUfM4e80RLUOKsrGCUwS}uSiJw$?mo)=_WrYtvJZp(;C}D`_y`DqkAefB9UKH5 z;6ZQ*90uy+A)Y6}5zq;`z$ZXAP<=1YKF|*az)|op7z9J$5ukRT*_S&0(0zLF$FQ`f^p}vV zMEyxJwJ+o)vuQ68%LJmaKs267d6{@NzUZmjU7_@qOg54ToQy?TVg-h+X1ouct8ahe(3*wcH1aS8zmk~f3Muj^ zokVMnqh&|P%`v(@T3w`_ zRsQ5BzSYDRsWSa5j9Wg@YMtqR>As58^eab2bSy;M}%|6|DRJXGZeU&zgcXQTzo zrz7k?`As`Pt@K6vT&_Fq_bfEi%(~=F^Pk{7lhem@b}wa-Yv}^DEY(PlKwmzYWxhuK zsnORg3De+rHkGzfOwU@4e=5%ThDyeR=sn zb3Rn_@)K>%zdY5}tQ~iU{4LVurmLv2ZWCJRF%--EI5L+(9_2GsvP9i=?7zJXKsHdR z8h!sPHp0%xf^w+~`IkKxU$yQ(#X5ZXm!33kmDKAVB#S*!m<*>PWvy3QnP*FPVk zt3S(Nk-~YYp zPVxRZARVVvT&MHj7&Dcy^CVj-UqTi$mDgZ8bvbsA*)v*B^h^&v<`6FYJAU(0d;9Sp{qfCfho+7j>VXg~9{DRZS zn{oOnKk6=KdOCLwnS%#AE#|vh#z6=@AzhNOr=A$PbZu6M_-B)Bi2S8m?Qik<-`B(P zgHwz}p0~VVr>*7hR!^cYx{5p2O8?`u{eqi#;=M^rHDaYInzvcbE>!aR3u8J^hy5+) zzr2(b`oCFjUmf&&=roaYa95t+-9~(zwa^LwJhr{O#QL6_y3rmjuMJ(yw@|k-2Ib;5 z;;{*x^S3VL6r1>aKKGAYuGQSIxfb(Jp7JJI%)j!j{+-YLC!c#KpL;i#YcrG=2nltlHp}qYf9)J9TDt(P_6p+QQG_Z$G>Ou@82fyU1b9l1JpBIjBbD1g?yz4|r(0)(8}g$CT8sS1FIP0o`7mz&I25iwh_h7Th*#=*E@2Wj z|Cr|-UtM>(oI7&%;0AXCUH435pxhC(_$n+*=|y|pq;R4xV7q9!#OErZjbVN{NZ7)m zlK_COk9s*y_wX433V;j}&`=0WM{IpYZOMQQhm6qr8VlCb+t)w9KOBl;z3tUwy^F+p zH!k3?1Ycdu!s>nh{#>nujV$=bEUo4wD^+^z*_@RsS)+p$)@Utv_4Pz6{99X{os9Yt`#+G)jta7w zTbo2F + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.ncb b/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.ncb new file mode 100755 index 0000000000000000000000000000000000000000..7f0733b784a9544d0aa7a90ad9b21c4c654df270 GIT binary patch literal 568320 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 z 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

m(EpXjxbe}~iI9m=+M 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 literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.sln b/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.sln new file mode 100755 index 0000000000..a0e6a748f4 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.sln @@ -0,0 +1,35 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jp3d_vm_enc", "jp3d_vm_enc.vcproj", "{A9704A2E-3B93-4BAA-9229-02FC93D27201}" + ProjectSection(ProjectDependencies) = postProject + {6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7} + {6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7} + {6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7} + {6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7} + {6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibJp3dVM", "..\LibJp3dVM.vcproj", "{6F3FB035-8F4E-4794-B091-0F0A20223BE7}" + ProjectSection(ProjectDependencies) = postProject + {6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A9704A2E-3B93-4BAA-9229-02FC93D27201}.Debug.ActiveCfg = Debug|Win32 + {A9704A2E-3B93-4BAA-9229-02FC93D27201}.Debug.Build.0 = Debug|Win32 + {A9704A2E-3B93-4BAA-9229-02FC93D27201}.Release.ActiveCfg = Release|Win32 + {A9704A2E-3B93-4BAA-9229-02FC93D27201}.Release.Build.0 = Release|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.ActiveCfg = Debug|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.Build.0 = Debug|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.ActiveCfg = Release|Win32 + {6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.suo b/contrib/menuetlibc/openjpeg/jp3d/codec/jp3d_vm_enc.suo new file mode 100755 index 0000000000000000000000000000000000000000..702d0dd81ee6aa926631769e00fd21bde422b579 GIT binary patch literal 21504 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/volume_to_jp3d.c b/contrib/menuetlibc/openjpeg/jp3d/codec/volume_to_jp3d.c new file mode 100755 index 0000000000..d966f2edb2 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/volume_to_jp3d.c @@ -0,0 +1,906 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#include +#include +#include + +#include "../libjp3dvm/openjpeg3d.h" +#include "getopt.h" +#include "convert.h" + +#ifdef _WIN32 +#include +#else +#define stricmp strcasecmp +#define strnicmp strncasecmp +#endif /* _WIN32 */ + +/* ----------------------------------------------------------------------- */ + +void encode_help_display() { + fprintf(stdout,"List of parameters for the JPEG2000 Part 10 encoder:\n"); + fprintf(stdout,"------------\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"Required Parameters (except with -h):\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-i : source file (-i source.bin or source*.pgx) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-m : source characteristics file (-m imgfile.img) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-o : destination file (-o dest.jp3d) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"Optional Parameters:\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-h : display the help information \n "); + fprintf(stdout,"\n"); + fprintf(stdout,"-n : number of resolutions (-n 3,3,3) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-I : use the irreversible transforms: ICT + DWT 9-7 (-I) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-C : coding algorithm (-C 2EB) [2EB, 3EB] \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-r : different compression ratios for successive layers (-r 20,10,5)\n "); + fprintf(stdout," - The rate specified for each quality level is the desired compression factor.\n"); + fprintf(stdout," - Rate 1 means lossless compression\n"); + fprintf(stdout," (options -r and -q cannot be used together)\n "); + fprintf(stdout,"\n"); + fprintf(stdout,"-q : different psnr for successive layers (-q 30,40,50) \n "); + fprintf(stdout," (options -r and -q cannot be used together)\n "); + fprintf(stdout,"\n"); + fprintf(stdout,"-b : size of code block (-b 32,32,32) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-c : size of precinct (-c 128,128,128) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-t : size of tile (-t 512,512,512) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-s : subsampling factor (-s 2,2,2) [-s X,Y,Z] \n"); + fprintf(stdout," - Remark: subsampling bigger than 2 can produce error\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-SOP : write SOP marker before each packet \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-EPH : write EPH marker after each header packet \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-M : code-block style (-M 0) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n"); + fprintf(stdout," 8=VSC 16=PTERM 32=SEGSYM 64=3DCTXT] \n"); + fprintf(stdout," Indicate multiple modes by adding their values. \n"); + fprintf(stdout," ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-D : define DC offset (-D 12) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-x : create an index file *.Idx (-x index_name.Idx) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-ROI : c=%%d,U=%%d : quantization indices upshifted \n"); + fprintf(stdout," for component c=%%d [%%d = 0,1,2]\n"); + fprintf(stdout," with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-d : offset of the origin of the volume (-d 150,300,100) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"-l : offset of the origin of the tiles (-l 100,75,25) \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"DEFAULT CODING:\n"); + fprintf(stdout,"------------\n"); + fprintf(stdout,"\n"); + fprintf(stdout," * Lossless\n"); + fprintf(stdout," * 1 tile\n"); + fprintf(stdout," * Size of precinct : 2^15 x 2^15 x 2^15 (means 1 precinct)\n"); + fprintf(stdout," * Size of code-block : 64 x 64 x 64\n"); + fprintf(stdout," * Number of resolutions in x, y and z axis: 3\n"); + fprintf(stdout," * No SOP marker in the codestream\n"); + fprintf(stdout," * No EPH marker in the codestream\n"); + fprintf(stdout," * No sub-sampling in x, y or z direction\n"); + fprintf(stdout," * No mode switch activated\n"); + fprintf(stdout," * Progression order: LRCP\n"); + fprintf(stdout," * No index file\n"); + fprintf(stdout," * No ROI upshifted\n"); + fprintf(stdout," * No offset of the origin of the volume\n"); + fprintf(stdout," * No offset of the origin of the tiles\n"); + fprintf(stdout," * Reversible DWT 5-3 on each 2D slice\n"); + fprintf(stdout," * Coding algorithm: 2D-EBCOT \n"); + fprintf(stdout,"\n"); + fprintf(stdout,"REMARKS:\n"); + fprintf(stdout,"---------\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"- The markers written to the main_header are : SOC SIZ COD QCD COM.\n"); + fprintf(stdout,"- COD and QCD markers will never appear in the tile_header.\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"- You need enough disk space memory (twice the original) to encode \n"); + fprintf(stdout,"the volume,i.e. for a 1.5 GB volume you need a minimum of 3GB of disk memory)\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"- When loading *.pgx files, a relative path to directory is needed for input argument \n"); + fprintf(stdout," followed by the common prefix of the slices and a '*' character representing sequential numeration.\n"); + fprintf(stdout,"( -i relativepath/slices*.pgx )\n"); + fprintf(stdout,"\n"); + fprintf(stdout," - The index file has the structure below:\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"\t Image_height Image_width Image_depth\n"); + fprintf(stdout,"\t Progression order: 0 (LRCP)\n"); + fprintf(stdout,"\t Tiles_size_X Tiles_size_Y Tiles_size_Z\n"); + fprintf(stdout,"\t Components_nb\n"); + fprintf(stdout,"\t Layers_nb\n"); + fprintf(stdout,"\t Decomposition_levels\n"); + fprintf(stdout,"\t [Precincts_size_X_res_Nr Precincts_size_Y_res_Nr Precincts_size_Z_res_Nr]\n\t ...\n"); + fprintf(stdout,"\t [Precincts_size_X_res_0 Precincts_size_Y_res_0 Precincts_size_Z_res_0]\n"); + fprintf(stdout,"\t Main_header_end_position\n"); + fprintf(stdout,"\t Codestream_size\n"); + fprintf(stdout,"\t Tile_0 [start_pos end_header end_pos TotalDisto NumPix MaxMSE]\n"); + fprintf(stdout,"\t ...\n"); + fprintf(stdout,"\t Tile_Nt [ '' '' '' '' '' '' ]\n"); + fprintf(stdout,"\t Tpacket_0 [Tile layer res. comp. prec. start_pos end_pos disto]\n"); + fprintf(stdout,"\t ...\n"); + fprintf(stdout,"\t Tpacket_Np ['' '' '' '' '' '' '' '' ]\n"); + fprintf(stdout,"\t MaxDisto\n"); + fprintf(stdout,"\t TotalDisto\n\n"); + fprintf(stdout,"\n"); + +} + +OPJ_PROG_ORDER give_progression(char progression[4]) { + if(strncmp(progression, "LRCP", 4) == 0) { + return LRCP; + } + if(strncmp(progression, "RLCP", 4) == 0) { + return RLCP; + } + if(strncmp(progression, "RPCL", 4) == 0) { + return RPCL; + } + if(strncmp(progression, "PCRL", 4) == 0) { + return PCRL; + } + if(strncmp(progression, "CPRL", 4) == 0) { + return CPRL; + } + + return PROG_UNKNOWN; +} + +OPJ_TRANSFORM give_transform(char transform[4]) { + if(strncmp(transform, "2DWT", 4) == 0) { + return TRF_2D_DWT; + } + if(strncmp(transform, "3DWT", 4) == 0) { + return TRF_3D_DWT; + } + return TRF_UNKNOWN; +} + +OPJ_ENTROPY_CODING give_coding(char coding[3]) { + + if(strncmp(coding, "2EB", 3) == 0) { + return ENCOD_2EB; + } + if(strncmp(coding, "3EB", 3) == 0) { + return ENCOD_3EB; + } + /*if(strncmp(coding, "2GR", 3) == 0) { + return ENCOD_2GR; + } + if(strncmp(coding, "3GR", 3) == 0) { + return ENCOD_3GR; + }*/ + + return ENCOD_UNKNOWN; +} + +int get_file_format(char *filename) { + int i; + static const char *extension[] = {"pgx", "bin", "img", "j3d", "jp3d", "j2k"}; + static const int format[] = { PGX_DFMT, BIN_DFMT, IMG_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT}; + char * ext = strrchr(filename, '.'); + if (ext) { + ext++; + for(i = 0; i < sizeof(format)/sizeof(*format); i++) { + if(strnicmp(ext, extension[i], 3) == 0) { + return format[i]; + } + } + } + + return -1; +} + +/* ------------------------------------------------------------------------------------ */ + +int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters) { + int i, value; + + /* parse the command line */ + + while (1) { + int c = getopt(argc, argv, "i:m:o:r:q:f:t:n:c:b:x:p:s:d:hP:S:E:M:D:R:l:T:C:A:I"); + if (c == -1) + break; + switch (c) { + case 'i': /* input file */ + { + char *infile = optarg; + parameters->decod_format = get_file_format(infile); + switch(parameters->decod_format) { + case PGX_DFMT: + case BIN_DFMT: + case IMG_DFMT: + break; + default: + fprintf(stdout, "[ERROR] Unrecognized format for infile : %s [accept only *.pgx or *.bin] !!\n\n", infile); + return 1; + break; + } + strncpy(parameters->infile, infile, MAX_PATH); + fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile); + + } + break; + + /* ----------------------------------------------------- */ + case 'm': /* input IMG file */ + { + char *imgfile = optarg; + int imgformat = get_file_format(imgfile); + switch(imgformat) { + case IMG_DFMT: + break; + default: + fprintf(stdout, "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n", imgfile); + return 1; + break; + } + strncpy(parameters->imgfile, imgfile, MAX_PATH); + fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile, imgformat); + } + break; + + /* ----------------------------------------------------- */ + case 'o': /* output file */ + { + char *outfile = optarg; + parameters->cod_format = get_file_format(outfile); + switch(parameters->cod_format) { + case J3D_CFMT: + case J2K_CFMT: + case LSE_CFMT: + break; + default: + fprintf(stdout, "[ERROR] Unknown output format volume %s [only *.j2k, *.lse3d or *.jp3d]!! \n", outfile); + return 1; + break; + } + strncpy(parameters->outfile, outfile, MAX_PATH); + fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile); + } + break; + + /* ----------------------------------------------------- */ + + case 'r': /* define compression rates for each layer */ + { + char *s = optarg; + while (sscanf(s, "%f", ¶meters->tcp_rates[parameters->tcp_numlayers]) == 1) { + parameters->tcp_numlayers++; + while (*s && *s != ',') { + s++; + } + if (!*s) + break; + s++; + } + parameters->cp_disto_alloc = 1; + } + break; + + /* ----------------------------------------------------- */ + + case 'q': /* define distorsion (PSNR) for each layer */ + { + char *s = optarg; + while (sscanf(s, "%f", ¶meters->tcp_distoratio[parameters->tcp_numlayers]) == 1) { + parameters->tcp_numlayers++; + while (*s && *s != ',') { + s++; + } + if (!*s) + break; + s++; + } + parameters->cp_fixed_quality = 1; + } + break; + + /* ----------------------------------------------------- */ + + case 'f': + { + fprintf(stdout, "/---------------------------------------------------\\\n"); + fprintf(stdout, "| Fixed layer allocation option not implemented !! |\n"); + fprintf(stdout, "\\---------------------------------------------------/\n"); + /*int *row = NULL, *col = NULL; + int numlayers = 0, matrix_width = 0; + + char *s = optarg; + sscanf(s, "%d", &numlayers); + s++; + if (numlayers > 9) + s++; + + parameters->tcp_numlayers = numlayers; + matrix_width = parameters->numresolution[0] + parameters->numresolution[1] + parameters->numresolution[2]; + parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int)); + s = s + 2; + + for (i = 0; i < numlayers; i++) { + row = ¶meters->cp_matrice[i * matrix_width]; + col = row; + parameters->tcp_rates[i] = 1; + sscanf(s, "%d,", &col[0]); + s += 2; + if (col[0] > 9) + s++; + col[1] = 0; + col[2] = 0; + for (j = 1; j < matrix_width; j++) { + col += 3; j+=2; + sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]); + s += 6; + if (col[0] > 9) + s++; + if (col[1] > 9) + s++; + if (col[2] > 9) + s++; + } + if (i < numlayers - 1) + s++; + } + parameters->cp_fixed_alloc = 1; */ + } + break; + + /* ----------------------------------------------------- */ + + case 't': /* tiles */ + { + if (sscanf(optarg, "%d,%d,%d", ¶meters->cp_tdx, ¶meters->cp_tdy, ¶meters->cp_tdz) !=3) { + fprintf(stdout, "[ERROR] '-t' 'dimensions of tiles' argument error ! [-t tdx,tdy,tdz]\n"); + return 1; + } + parameters->tile_size_on = true; + } + break; + + /* ----------------------------------------------------- */ + + case 'n': /* resolution */ + { + int aux; + aux = sscanf(optarg, "%d,%d,%d", ¶meters->numresolution[0], ¶meters->numresolution[1], ¶meters->numresolution[2]); + if (aux == 2) + parameters->numresolution[2] = 1; + else if (aux == 1) { + parameters->numresolution[1] = parameters->numresolution[0]; + parameters->numresolution[2] = 1; + }else if (aux == 0){ + parameters->numresolution[0] = 1; + parameters->numresolution[1] = 1; + parameters->numresolution[2] = 1; + } + } + break; + + /* ----------------------------------------------------- */ + case 'c': /* precinct dimension */ + { + char sep; + int res_spec = 0; + int aux; + char *s = optarg; + do { + sep = 0; + aux = sscanf(s, "[%d,%d,%d]%c", ¶meters->prct_init[0][res_spec], ¶meters->prct_init[1][res_spec], ¶meters->prct_init[2][res_spec], &sep); + if (sep == ',' && aux != 4) { + fprintf(stdout, "[ERROR] '-c' 'dimensions of precincts' argument error ! [-c [prcx_res0,prcy_res0,prcz_res0],...,[prcx_resN,prcy_resN,prcz_resN]]\n"); + return 1; + } + parameters->csty |= 0x01; + res_spec++; + s = strpbrk(s, "]") + 2; + } + while (sep == ','); + parameters->res_spec = res_spec; /* number of precinct size specifications */ + } + break; + + /* ----------------------------------------------------- */ + + case 'b': /* code-block dimension */ + { + int cblockw_init = 0, cblockh_init = 0, cblockl_init = 0; + if (sscanf(optarg, "%d,%d,%d", &cblockw_init, &cblockh_init, &cblockl_init) != 3) { + fprintf(stdout, "[ERROR] '-b' 'dimensions of codeblocks' argument error ! [-b cblkx,cblky,cblkz]\n"); + return 1; + } + if (cblockw_init * cblockh_init * cblockl_init > (1<<18) || cblockw_init > 1024 || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4 || cblockl_init > 1024 || cblockl_init < 4) { + fprintf(stdout,"[ERROR] Size of code_block error (option -b) !!\n\nRestriction :\n * width*height*length<=4096\n * 4<=width,height,length<= 1024\n\n"); + return 1; + } + parameters->cblock_init[0] = cblockw_init; + parameters->cblock_init[1] = cblockh_init; + parameters->cblock_init[2] = cblockl_init; + } + break; + + /* ----------------------------------------------------- */ + + case 'x': /* creation of index file */ + { + char *index = optarg; + strncpy(parameters->index, index, MAX_PATH); + parameters->index_on = 1; + } + break; + + /* ----------------------------------------------------- */ + + case 'p': /* progression order */ + { + char progression[4]; + + strncpy(progression, optarg, 4); + parameters->prog_order = give_progression(progression); + if (parameters->prog_order == -1) { + fprintf(stdout, "[ERROR] Unrecognized progression order [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n"); + return 1; + } + } + break; + + /* ----------------------------------------------------- */ + + case 's': /* subsampling factor */ + { + if (sscanf(optarg, "%d,%d,%d", ¶meters->subsampling_dx, ¶meters->subsampling_dy, ¶meters->subsampling_dz) != 2) { + fprintf(stdout, "[ERROR] '-s' sub-sampling argument error ! [-s dx,dy,dz]\n"); + return 1; + } + } + break; + + /* ----------------------------------------------------- */ + + case 'd': /* coordonnate of the reference grid */ + { + if (sscanf(optarg, "%d,%d,%d", ¶meters->volume_offset_x0, ¶meters->volume_offset_y0, ¶meters->volume_offset_z0) != 3) { + fprintf(stdout, "[ERROR] -d 'coordonnate of the reference grid' argument error !! [-d x0,y0,z0]\n"); + return 1; + } + } + break; + + /* ----------------------------------------------------- */ + + case 'h': /* display an help description */ + { + encode_help_display(); + return 1; + } + break; + + /* ----------------------------------------------------- */ + + case 'P': /* POC */ + { + int numpocs = 0; /* number of progression order change (POC) default 0 */ + opj_poc_t *POC = NULL; /* POC : used in case of Progression order change */ + + char *s = optarg; + POC = parameters->POC; + + fprintf(stdout, "/----------------------------------\\\n"); + fprintf(stdout, "| POC option not fully tested !! |\n"); + fprintf(stdout, "\\----------------------------------/\n"); + + while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%s", &POC[numpocs].tile, + &POC[numpocs].resno0, &POC[numpocs].compno0, + &POC[numpocs].layno1, &POC[numpocs].resno1, + &POC[numpocs].compno1, POC[numpocs].progorder) == 7) { + POC[numpocs].prg = give_progression(POC[numpocs].progorder); + /* POC[numpocs].tile; */ + numpocs++; + while (*s && *s != '/') { + s++; + } + if (!*s) { + break; + } + s++; + } + parameters->numpocs = numpocs; + } + break; + + /* ------------------------------------------------------ */ + + case 'S': /* SOP marker */ + { + parameters->csty |= 0x02; + } + break; + + /* ------------------------------------------------------ */ + + case 'E': /* EPH marker */ + { + parameters->csty |= 0x04; + } + break; + + /* ------------------------------------------------------ */ + + case 'M': /* Codification mode switch */ + { + fprintf(stdout, "[INFO] Mode switch option not fully tested !!\n"); + value = 0; + if (sscanf(optarg, "%d", &value) == 1) { + for (i = 0; i <= 6; i++) { + int cache = value & (1 << i); + if (cache) + parameters->mode |= (1 << i); + } + } + } + break; + + /* ------------------------------------------------------ */ + + case 'D': /* DCO */ + { + if (sscanf(optarg, "%d", ¶meters->dcoffset) != 1) { + fprintf(stdout, "[ERROR] DC offset error !! [-D %d]\n",parameters->dcoffset); + return 1; + } + } + break; + + /* ------------------------------------------------------ */ + + case 'R': /* ROI */ + { + if (sscanf(optarg, "OI:c=%d,U=%d", ¶meters->roi_compno, ¶meters->roi_shift) != 2) { + fprintf(stdout, "[ERROR] ROI error !! [-ROI:c='compno',U='shift']\n"); + return 1; + } + } + break; + + /* ------------------------------------------------------ */ + + case 'l': /* Tile offset */ + { + if (sscanf(optarg, "%d,%d,%d", ¶meters->cp_tx0, ¶meters->cp_ty0, ¶meters->cp_tz0) != 3) { + fprintf(stdout, "[ERROR] -l 'tile offset' argument error !! [-l X0,Y0,Z0]"); + return 1; + } + } + break; + + /* ------------------------------------------------------ + + case 'T': // Tranformation of original data (2D-DWT/3D-DWT/3D-RLS/2D-DWT+1D-RLS) + { + char transform[4]; + + strncpy(transform, optarg, 4); + parameters->transform_format = give_transform(transform); + if (parameters->transform_format == -1) { + fprintf(stdout, "[ERROR] -T 'Transform domain' argument error !! [-T 2DWT, 3DWT, 3RLS or 3LSE only]"); + return 1; + } + } + break; + + ------------------------------------------------------ */ + + case 'C': /* Coding of transformed data */ + { + char coding[3]; + + strncpy(coding, optarg, 3); + parameters->encoding_format = give_coding(coding); + if (parameters->encoding_format == -1) { + fprintf(stdout, "[ERROR] -C 'Coding algorithm' argument error !! [-C 2EB, 3EB, 2GR, 3GR or GRI only]"); + return 1; + } + } + break; + + /* ------------------------------------------------------ */ + + case 'I': /* reversible or not */ + { + parameters->irreversible = 1; + } + break; + + default: + fprintf(stdout, "[ERROR] This option is not valid \"-%c %s\"\n", c, optarg); + return 1; + } + } + + /* check for possible errors */ + + if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) { + fprintf(stdout, "usage: jp3d_vm_enc -i volume-file -o jp3d-file (+ options)\n"); + return 1; + } + + if((parameters->decod_format == BIN_DFMT) && (parameters->imgfile[0] == 0)) { + fprintf(stdout, "usage: jp3d_vm_enc -i bin-volume-file -m img-file -o jp3d-file (+ options)\n"); + return 1; + } + + if((parameters->decod_format != BIN_DFMT) && (parameters->decod_format != PGX_DFMT) && (parameters->decod_format != IMG_DFMT)) { + fprintf(stdout, "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n"); + return 1; + } + if((parameters->cod_format != J3D_CFMT) && (parameters->cod_format != J2K_CFMT)) { + fprintf(stdout, "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n"); + return 1; + } + + if((parameters->encoding_format == ENCOD_2GR || parameters->encoding_format == ENCOD_3GR) && parameters->transform_format != TRF_3D_LSE && parameters->transform_format != TRF_3D_RLS) { + fprintf(stdout, "[ERROR] Entropy coding options -C [2GR,3GR] are only compatible with predictive-based transform algorithms: -T [3RLS,3LSE].\n"); + return 1; + } + if (parameters->encoding_format == ENCOD_3EB) + parameters->mode |= (1 << 6); + + if ((parameters->mode >> 6) & 1) { + parameters->encoding_format = ENCOD_3EB; + } + + if((parameters->numresolution[2] == 0 || (parameters->numresolution[1] == 0) || (parameters->numresolution[0] == 0))) { + fprintf(stdout, "[ERROR] -n 'resolution levels' argument error ! Resolutions must be greater than 1 in order to perform DWT.\n"); + return 1; + } + if (parameters->numresolution[1] != parameters->numresolution[0]) { + fprintf(stdout, "[ERROR] -n 'resolution levels' argument error ! Resolutions in X and Y axis must be the same in this implementation.\n"); + return 1; + } + + if (parameters->numresolution[2] > parameters->numresolution[0]) { + fprintf(stdout, "[ERROR] -n 'resolution levels' argument error ! Resolutions in Z axis must be lower than in X-Y axis.\n"); + return 1; + } + + if (parameters->dcoffset >= 128 && parameters->dcoffset <= -128) { + fprintf(stdout, "[ERROR] -D 'DC offset' argument error ! Value must be -128<=DCO<=128.\n"); + return 1; + } + + if(parameters->numresolution[2] != 1) { + parameters->transform_format = TRF_3D_DWT; + //fprintf(stdout, "[Warning] Resolution level in axial dim > 1 : 3D-DWT will be performed... \n"); + } else if (parameters->numresolution[2] == 1) { + parameters->transform_format = TRF_2D_DWT; + //fprintf(stdout, "[Warning] Resolution level in axial dim == 1 : 2D-DWT will be performed... \n"); + } + + if ((parameters->cod_format == J2K_CFMT) && (parameters->transform_format != TRF_2D_DWT || parameters->encoding_format != ENCOD_2EB)) { + fprintf(stdout, "[WARNING] Incompatible options -o *.j2k and defined transform or encoding algorithm. Latter will be ignored\n"); + parameters->transform_format = TRF_2D_DWT; + parameters->encoding_format = ENCOD_2EB; + } + + if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc || parameters->cp_fixed_quality) && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_quality))) { + fprintf(stdout, "[ERROR] Options -r and -q cannot be used together !!\n"); + return 1; + } /* mod fixed_quality */ + + /* if no rate entered, lossless by default */ + if (parameters->tcp_numlayers == 0) { + parameters->tcp_rates[0] = 0.0; /* MOD antonin : losslessbug */ + parameters->tcp_numlayers++; + parameters->cp_disto_alloc = 1; + } + + if((parameters->cp_tx0 > parameters->volume_offset_x0) || (parameters->cp_ty0 > parameters->volume_offset_y0) || (parameters->cp_tz0 > parameters->volume_offset_z0)) { + fprintf(stdout, "[ERROR] Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) TZO(%d)<=IMG_Z0(%d)\n", + parameters->cp_tx0, parameters->volume_offset_x0, parameters->cp_ty0, parameters->volume_offset_y0, + parameters->cp_tz0, parameters->volume_offset_z0); + return 1; + } + + for (i = 0; i < parameters->numpocs; i++) { + if (parameters->POC[i].prg == -1) { + fprintf(stdout,"[ERROR] Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",i + 1); + } + } + return 0; +} + +/* -------------------------------------------------------------------------- */ + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting a FILE* client object +*/ +void info_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[INFO] %s", msg); +} + +/* -------------------------------------------------------------------------- */ + +int main(int argc, char **argv) { + bool bSuccess; + bool delete_comment = true; + opj_cparameters_t parameters; /* compression parameters */ + opj_event_mgr_t event_mgr; /* event manager */ + opj_volume_t *volume = NULL; + + /* + configure the event callbacks (not required) + setting of each callback is optionnal + */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = info_callback; + + /* set encoding parameters to default values */ + opj_set_default_encoder_parameters(¶meters); + + /* parse input and get user encoding parameters */ + if(parse_cmdline_encoder(argc, argv, ¶meters) == 1) { + return 0; + } + + if(parameters.cp_comment == NULL) { + parameters.cp_comment = "Created by OpenJPEG version JP3D"; + /* no need to delete parameters.cp_comment on exit */ + delete_comment = false; + } + + /* encode the destination volume */ + /* ---------------------------- */ + if (parameters.cod_format == J3D_CFMT || parameters.cod_format == J2K_CFMT) { + int codestream_length, pixels, bitsin; + opj_cio_t *cio = NULL; + FILE *f = NULL; + opj_cinfo_t* cinfo = NULL; + + /* decode the source volume */ + /* ----------------------- */ + switch (parameters.decod_format) { + case PGX_DFMT: + fprintf(stdout, "[INFO] Loading pgx file(s)\n"); + volume = pgxtovolume(parameters.infile, ¶meters); + if (!volume) { + fprintf(stdout, "[ERROR] Unable to load pgx files\n"); + return 1; + } + break; + + case BIN_DFMT: + fprintf(stdout, "[INFO] Loading bin file\n"); + volume = bintovolume(parameters.infile, parameters.imgfile, ¶meters); + if (!volume) { + fprintf(stdout, "[ERROR] Unable to load bin file\n"); + return 1; + } + break; + + case IMG_DFMT: + fprintf(stdout, "[INFO] Loading img file\n"); + volume = imgtovolume(parameters.infile, ¶meters); + if (!volume) { + fprintf(stderr, "[ERROR] Unable to load img file\n"); + return 1; + } + break; + } + + /* get a JP3D or J2K compressor handle */ + if (parameters.cod_format == J3D_CFMT) + cinfo = opj_create_compress(CODEC_J3D); + else if (parameters.cod_format == J2K_CFMT) + cinfo = opj_create_compress(CODEC_J2K); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stdout); + + /* setup the encoder parameters using the current volume and using user parameters */ + opj_setup_encoder(cinfo, ¶meters, volume); + + /* open a byte stream for writing */ + /* allocate memory for all tiles */ + cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0); + + /* encode the volume */ + //fprintf(stdout, "[INFO] Encode the volume\n"); + bSuccess = opj_encode(cinfo, cio, volume, parameters.index); + if (!bSuccess) { + opj_cio_close(cio); + fprintf(stdout, "[ERROR] Failed to encode volume\n"); + return 1; + } + codestream_length = cio_tell(cio); + pixels =(volume->x1 - volume->x0) * (volume->y1 - volume->y0) * (volume->z1 - volume->z0); + bitsin = pixels * volume->comps[0].prec; + fprintf(stdout, "[RESULT] Volume: %d x %d x %d (x %d bpv)\n Codestream: %d B, Ratio: %5.3f bpv, (%5.3f : 1) \n", + (volume->x1 - volume->x0),(volume->y1 - volume->y0),(volume->z1 - volume->z0),volume->comps[0].prec, + codestream_length, ((double)codestream_length * 8.0/(double)pixels), ((double)bitsin/(8.0*(double)codestream_length))); + + /* write the buffer to disk */ + f = fopen(parameters.outfile, "wb"); + if (!f) { + fprintf(stdout, "[ERROR] Failed to open %s for writing\n", parameters.outfile); + return 1; + } + fwrite(cio->buffer, 1, codestream_length, f); + fclose(f); + + /* close and free the byte stream */ + opj_cio_close(cio); + + /* free remaining compression structures */ + opj_destroy_compress(cinfo); + } else { + fprintf(stdout, "[ERROR] Cod_format != JP3d !!! \n"); + return 1; + } + + /* free user parameters structure */ + if(delete_comment) { + if(parameters.cp_comment) free(parameters.cp_comment); + } + if(parameters.cp_matrice) free(parameters.cp_matrice); + + /* free volume data */ + opj_volume_destroy(volume); + + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/jp3d/codec/windirent.h b/contrib/menuetlibc/openjpeg/jp3d/codec/windirent.h new file mode 100644 index 0000000000..a67e58748c --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/codec/windirent.h @@ -0,0 +1,676 @@ +/* + * uce-dirent.h - operating system independent dirent implementation + * + * Copyright (C) 1998-2002 Toni Ronkko + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * ``Software''), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * 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 TONI RONKKO 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. + * + * + * May 28 1998, Toni Ronkko + * + * $Id: uce-dirent.h,v 1.7 2002/05/13 10:48:35 tr Exp $ + * + * $Log: uce-dirent.h,v $ + * Revision 1.7 2002/05/13 10:48:35 tr + * embedded some source code directly to the header so that no source + * modules need to be included in the MS Visual C project using the + * interface, removed all the dependencies to other headers of the `uce' + * library so that the header can be made public + * + * Revision 1.6 2002/04/12 16:22:04 tr + * Unified Compiling Environment (UCE) replaced `std' library + * + * Revision 1.5 2001/07/20 16:33:40 tr + * moved to `std' library and re-named defines accordingly + * + * Revision 1.4 2001/07/10 16:47:18 tronkko + * revised comments + * + * Revision 1.3 2001/01/11 13:16:43 tr + * using ``uce-machine.h'' for finding out defines such as `FREEBSD' + * + * Revision 1.2 2000/10/08 16:00:41 tr + * copy of FreeBSD man page + * + * Revision 1.1 2000/07/10 05:53:16 tr + * Initial revision + * + * Revision 1.2 1998/07/19 18:29:14 tr + * Added error reporting capabilities and some asserts. + * + * Revision 1.1 1998/07/04 16:27:51 tr + * Initial revision + * + * + * MSVC 1.0 scans automatic dependencies incorrectly when your project + * contains this very header. The problem is that MSVC cannot handle + * include directives inside #if..#endif block those are never entered. + * Since this header ought to compile in many different operating systems, + * there had to be several conditional blocks that are compiled only in + * operating systems for what they were designed for. MSVC 1.0 cannot + * handle inclusion of sys/dir.h in a part that is compiled only in Apollo + * operating system. To fix the problem you need to insert DIR.H into + * SYSINCL.DAT located in MSVC\BIN directory and restart visual C++. + * Consult manuals for more informaton about the problem. + * + * Since many UNIX systems have dirent.h we assume to have one also. + * However, if your UNIX system does not have dirent.h you can download one + * for example at: http://ftp.uni-mannheim.de/ftp/GNU/dirent/dirent.tar.gz. + * You can also see if you have one of dirent.h, direct.h, dir.h, ndir.h, + * sys/dir.h and sys/ndir.h somewhere. Try defining HAVE_DIRENT_H, + * HAVE_DIRECT_H, HAVE_DIR_H, HAVE_NDIR_H, HAVE_SYS_DIR_H and + * HAVE_SYS_NDIR_H according to the files found. + */ +#ifndef DIRENT_H +#define DIRENT_H +#define DIRENT_H_INCLUDED + +/* find out platform */ +#if defined(MSDOS) /* MS-DOS */ +#elif defined(__MSDOS__) /* Turbo C/Borland */ +# define MSDOS +#elif defined(__DOS__) /* Watcom */ +# define MSDOS +#endif + +#if defined(WIN32) /* MS-Windows */ +#elif defined(__NT__) /* Watcom */ +# define WIN32 +#elif defined(_WIN32) /* Microsoft */ +# define WIN32 +#elif defined(__WIN32__) /* Borland */ +# define WIN32 +#endif + +/* + * See what kind of dirent interface we have unless autoconf has already + * determinated that. + */ +#if !defined(HAVE_DIRENT_H) && !defined(HAVE_DIRECT_H) && !defined(HAVE_SYS_DIR_H) && !defined(HAVE_NDIR_H) && !defined(HAVE_SYS_NDIR_H) && !defined(HAVE_DIR_H) +# if defined(_MSC_VER) /* Microsoft C/C++ */ + /* no dirent.h */ +# elif defined(__BORLANDC__) /* Borland C/C++ */ +# define HAVE_DIRENT_H +# define VOID_CLOSEDIR +# elif defined(__TURBOC__) /* Borland Turbo C */ + /* no dirent.h */ +# elif defined(__WATCOMC__) /* Watcom C/C++ */ +# define HAVE_DIRECT_H +# elif defined(__apollo) /* Apollo */ +# define HAVE_SYS_DIR_H +# elif defined(__hpux) /* HP-UX */ +# define HAVE_DIRENT_H +# elif defined(__alpha) || defined(__alpha__) /* Alpha OSF1 */ +# error "not implemented" +# elif defined(__sgi) /* Silicon Graphics */ +# define HAVE_DIRENT_H +# elif defined(sun) || defined(_sun) /* Sun Solaris */ +# define HAVE_DIRENT_H +# elif defined(__FreeBSD__) /* FreeBSD */ +# define HAVE_DIRENT_H +# elif defined(__linux__) /* Linux */ +# define HAVE_DIRENT_H +# elif defined(__GNUC__) /* GNU C/C++ */ +# define HAVE_DIRENT_H +# else +# error "not implemented" +# endif +#endif + +/* include proper interface headers */ +#if defined(HAVE_DIRENT_H) +# include +# ifdef FREEBSD +# define NAMLEN(dp) ((int)((dp)->d_namlen)) +# else +# define NAMLEN(dp) ((int)(strlen((dp)->d_name))) +# endif + +#elif defined(HAVE_NDIR_H) +# include +# define NAMLEN(dp) ((int)((dp)->d_namlen)) + +#elif defined(HAVE_SYS_NDIR_H) +# include +# define NAMLEN(dp) ((int)((dp)->d_namlen)) + +#elif defined(HAVE_DIRECT_H) +# include +# define NAMLEN(dp) ((int)((dp)->d_namlen)) + +#elif defined(HAVE_DIR_H) +# include +# define NAMLEN(dp) ((int)((dp)->d_namlen)) + +#elif defined(HAVE_SYS_DIR_H) +# include +# include +# ifndef dirent +# define dirent direct +# endif +# define NAMLEN(dp) ((int)((dp)->d_namlen)) + +#elif defined(MSDOS) || defined(WIN32) + + /* figure out type of underlaying directory interface to be used */ +# if defined(WIN32) +# define DIRENT_WIN32_INTERFACE +# elif defined(MSDOS) +# define DIRENT_MSDOS_INTERFACE +# else +# error "missing native dirent interface" +# endif + + /*** WIN32 specifics ***/ +# if defined(DIRENT_WIN32_INTERFACE) +# include +# if !defined(DIRENT_MAXNAMLEN) +# define DIRENT_MAXNAMLEN (MAX_PATH) +# endif + + + /*** MS-DOS specifics ***/ +# elif defined(DIRENT_MSDOS_INTERFACE) +# include + + /* Borland defines file length macros in dir.h */ +# if defined(__BORLANDC__) +# include +# if !defined(DIRENT_MAXNAMLEN) +# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT)) +# endif +# if !defined(_find_t) +# define _find_t find_t +# endif + + /* Turbo C defines ffblk structure in dir.h */ +# elif defined(__TURBOC__) +# include +# if !defined(DIRENT_MAXNAMLEN) +# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT)) +# endif +# define DIRENT_USE_FFBLK + + /* MSVC */ +# elif defined(_MSC_VER) +# if !defined(DIRENT_MAXNAMLEN) +# define DIRENT_MAXNAMLEN (12) +# endif + + /* Watcom */ +# elif defined(__WATCOMC__) +# if !defined(DIRENT_MAXNAMLEN) +# if defined(__OS2__) || defined(__NT__) +# define DIRENT_MAXNAMLEN (255) +# else +# define DIRENT_MAXNAMLEN (12) +# endif +# endif + +# endif +# endif + + /*** generic MS-DOS and MS-Windows stuff ***/ +# if !defined(NAME_MAX) && defined(DIRENT_MAXNAMLEN) +# define NAME_MAX DIRENT_MAXNAMLEN +# endif +# if NAME_MAX < DIRENT_MAXNAMLEN +# error "assertion failed: NAME_MAX >= DIRENT_MAXNAMLEN" +# endif + + + /* + * Substitute for real dirent structure. Note that `d_name' field is a + * true character array although we have it copied in the implementation + * dependent data. We could save some memory if we had declared `d_name' + * as a pointer refering the name within implementation dependent data. + * We have not done that since some code may rely on sizeof(d_name) to be + * something other than four. Besides, directory entries are typically so + * small that it takes virtually no time to copy them from place to place. + */ + typedef struct dirent { + char d_name[NAME_MAX + 1]; + + /*** Operating system specific part ***/ +# if defined(DIRENT_WIN32_INTERFACE) /*WIN32*/ + WIN32_FIND_DATA data; +# elif defined(DIRENT_MSDOS_INTERFACE) /*MSDOS*/ +# if defined(DIRENT_USE_FFBLK) + struct ffblk data; +# else + struct _find_t data; +# endif +# endif + } dirent; + + /* DIR substitute structure containing directory name. The name is + * essential for the operation of ``rewinndir'' function. */ + typedef struct DIR { + char *dirname; /* directory being scanned */ + dirent current; /* current entry */ + int dirent_filled; /* is current un-processed? */ + + /*** Operating system specific part ***/ +# if defined(DIRENT_WIN32_INTERFACE) + HANDLE search_handle; +# elif defined(DIRENT_MSDOS_INTERFACE) +# endif + } DIR; + +# ifdef __cplusplus +extern "C" { +# endif + +/* supply prototypes for dirent functions */ +static DIR *opendir (const char *dirname); +static struct dirent *readdir (DIR *dirp); +static int closedir (DIR *dirp); +static void rewinddir (DIR *dirp); + +/* + * Implement dirent interface as static functions so that the user does not + * need to change his project in any way to use dirent function. With this + * it is sufficient to include this very header from source modules using + * dirent functions and the functions will be pulled in automatically. + */ +#include +#include +#include +#include +#include + +/* use ffblk instead of _find_t if requested */ +#if defined(DIRENT_USE_FFBLK) +# define _A_ARCH (FA_ARCH) +# define _A_HIDDEN (FA_HIDDEN) +# define _A_NORMAL (0) +# define _A_RDONLY (FA_RDONLY) +# define _A_SUBDIR (FA_DIREC) +# define _A_SYSTEM (FA_SYSTEM) +# define _A_VOLID (FA_LABEL) +# define _dos_findnext(dest) findnext(dest) +# define _dos_findfirst(name,flags,dest) findfirst(name,dest,flags) +#endif + +static int _initdir (DIR *p); +static const char *_getdirname (const struct dirent *dp); +static void _setdirname (struct DIR *dirp); + +/* + * + * open directory stream for reading + * DIR *opendir (const char *dirname); + * + * Open named directory stream for read and return pointer to the + * internal working area that is used for retrieving individual directory + * entries. The internal working area has no fields of your interest. + * + * Returns a pointer to the internal working area or NULL in case the + * directory stream could not be opened. Global `errno' variable will set + * in case of error as follows: + * + * + * [EACESS |Permission denied. + * [EMFILE |Too many open files used by the process. + * [ENFILE |Too many open files in system. + * [ENOENT |Directory does not exist. + * [ENOMEM |Insufficient memory. + * [ENOTDIR |dirname does not refer to directory. This value is not + * reliable on MS-DOS and MS-Windows platforms. Many + * implementations return ENOENT even when the name refers to a + * file.] + *
+ *
+ */ +static DIR *opendir(const char *dirname) +{ + DIR *dirp; + assert (dirname != NULL); + + dirp = (DIR*)malloc (sizeof (struct DIR)); + if (dirp != NULL) { + char *p; + + /* allocate room for directory name */ + dirp->dirname = (char*) malloc (strlen (dirname) + 1 + strlen ("\\*.*")); + if (dirp->dirname == NULL) { + /* failed to duplicate directory name. errno set by malloc() */ + free (dirp); + return NULL; + } + /* Copy directory name while appending directory separator and "*.*". + * Directory separator is not appended if the name already ends with + * drive or directory separator. Directory separator is assumed to be + * '/' or '\' and drive separator is assumed to be ':'. */ + strcpy (dirp->dirname, dirname); + p = strchr (dirp->dirname, '\0'); + if (dirp->dirname < p && + *(p - 1) != '\\' && *(p - 1) != '/' && *(p - 1) != ':') + { + strcpy (p++, "\\"); + } +# ifdef DIRENT_WIN32_INTERFACE + strcpy (p, "*"); /*scan files with and without extension in win32*/ +# else + strcpy (p, "*.*"); /*scan files with and without extension in DOS*/ +# endif + + /* open stream */ + if (_initdir (dirp) == 0) { + /* initialization failed */ + free (dirp->dirname); + free (dirp); + return NULL; + } + } + return dirp; +} + + +/* + * + * read a directory entry + * struct dirent *readdir (DIR *dirp); + * + * Read individual directory entry and return pointer to a structure + * containing the name of the entry. Individual directory entries returned + * include normal files, sub-directories, pseudo-directories "." and ".." + * and also volume labels, hidden files and system files in MS-DOS and + * MS-Windows. You might want to use stat(2) function to determinate which + * one are you dealing with. Many dirent implementations already contain + * equivalent information in dirent structure but you cannot depend on + * this. + * + * The dirent structure contains several system dependent fields that + * generally have no interest to you. The only interesting one is char + * d_name[] that is also portable across different systems. The d_name + * field contains the name of the directory entry without leading path. + * While d_name is portable across different systems the actual storage + * capacity of d_name varies from system to system and there is no portable + * way to find out it at compile time as different systems define the + * capacity of d_name with different macros and some systems do not define + * capacity at all (besides actual declaration of the field). If you really + * need to find out storage capacity of d_name then you might want to try + * NAME_MAX macro. The NAME_MAX is defined in POSIX standard althought + * there are many MS-DOS and MS-Windows implementations those do not define + * it. There are also systems that declare d_name as "char d_name[1]" and + * then allocate suitable amount of memory at run-time. Thanks to Alain + * Decamps (Alain.Decamps@advalvas.be) for pointing it out to me. + * + * This all leads to the fact that it is difficult to allocate space + * for the directory names when the very same program is being compiled on + * number of operating systems. Therefore I suggest that you always + * allocate space for directory names dynamically. + * + * + * Returns a pointer to a structure containing name of the directory entry + * in `d_name' field or NULL if there was an error. In case of an error the + * global `errno' variable will set as follows: + * + * + * [EBADF |dir parameter refers to an invalid directory stream. This value + * is not set reliably on all implementations.] + *
+ *
+ */ +static struct dirent * +readdir (DIR *dirp) +{ + assert(dirp != NULL); + if (dirp == NULL) { + errno = EBADF; + return NULL; + } + +#if defined(DIRENT_WIN32_INTERFACE) + if (dirp->search_handle == INVALID_HANDLE_VALUE) { + /* directory stream was opened/rewound incorrectly or it ended normally */ + errno = EBADF; + return NULL; + } +#endif + + if (dirp->dirent_filled != 0) { + /* + * Directory entry has already been retrieved and there is no need to + * retrieve a new one. Directory entry will be retrieved in advance + * when the user calls readdir function for the first time. This is so + * because real dirent has separate functions for opening and reading + * the stream whereas Win32 and DOS dirents open the stream + * automatically when we retrieve the first file. Therefore, we have to + * save the first file when opening the stream and later we have to + * return the saved entry when the user tries to read the first entry. + */ + dirp->dirent_filled = 0; + } else { + /* fill in entry and return that */ +#if defined(DIRENT_WIN32_INTERFACE) + if (FindNextFile (dirp->search_handle, &dirp->current.data) == FALSE) { + /* Last file has been processed or an error occured */ + FindClose (dirp->search_handle); + dirp->search_handle = INVALID_HANDLE_VALUE; + errno = ENOENT; + return NULL; + } + +# elif defined(DIRENT_MSDOS_INTERFACE) + if (_dos_findnext (&dirp->current.data) != 0) { + /* _dos_findnext and findnext will set errno to ENOENT when no + * more entries could be retrieved. */ + return NULL; + } +# endif + + _setdirname (dirp); + assert (dirp->dirent_filled == 0); + } + return &dirp->current; +} + + +/* + * + * close directory stream. + * int closedir (DIR *dirp); + * + * Close directory stream opened by the `opendir' function. Close of + * directory stream invalidates the DIR structure as well as previously read + * dirent entry. + * + * The function typically returns 0 on success and -1 on failure but + * the function may be declared to return void on same systems. At least + * Borland C/C++ and some UNIX implementations use void as a return type. + * The dirent wrapper tries to define VOID_CLOSEDIR whenever closedir is + * known to return nothing. The very same definition is made by the GNU + * autoconf if you happen to use it. + * + * The global `errno' variable will set to EBADF in case of error. + * + */ +static int +closedir (DIR *dirp) +{ + int retcode = 0; + + /* make sure that dirp points to legal structure */ + assert (dirp != NULL); + if (dirp == NULL) { + errno = EBADF; + return -1; + } + + /* free directory name and search handles */ + if (dirp->dirname != NULL) free (dirp->dirname); + +#if defined(DIRENT_WIN32_INTERFACE) + if (dirp->search_handle != INVALID_HANDLE_VALUE) { + if (FindClose (dirp->search_handle) == FALSE) { + /* Unknown error */ + retcode = -1; + errno = EBADF; + } + } +#endif + + /* clear dirp structure to make sure that it cannot be used anymore*/ + memset (dirp, 0, sizeof (*dirp)); +# if defined(DIRENT_WIN32_INTERFACE) + dirp->search_handle = INVALID_HANDLE_VALUE; +# endif + + free (dirp); + return retcode; +} + + +/* + * + * rewind directory stream to the beginning + * void rewinddir (DIR *dirp); + * + * Rewind directory stream to the beginning so that the next call of + * readdir() returns the very first directory entry again. However, note + * that next call of readdir() may not return the same directory entry as it + * did in first time. The directory stream may have been affected by newly + * created files. + * + * Almost every dirent implementation ensure that rewinddir will update + * the directory stream to reflect any changes made to the directory entries + * since the previous ``opendir'' or ``rewinddir'' call. Keep an eye on + * this if your program depends on the feature. I know at least one dirent + * implementation where you are required to close and re-open the stream to + * see the changes. + * + * Returns nothing. If something went wrong while rewinding, you will + * notice it later when you try to retrieve the first directory entry. + */ +static void +rewinddir (DIR *dirp) +{ + /* make sure that dirp is legal */ + assert (dirp != NULL); + if (dirp == NULL) { + errno = EBADF; + return; + } + assert (dirp->dirname != NULL); + + /* close previous stream */ +#if defined(DIRENT_WIN32_INTERFACE) + if (dirp->search_handle != INVALID_HANDLE_VALUE) { + if (FindClose (dirp->search_handle) == FALSE) { + /* Unknown error */ + errno = EBADF; + } + } +#endif + + /* re-open previous stream */ + if (_initdir (dirp) == 0) { + /* initialization failed but we cannot deal with error. User will notice + * error later when she tries to retrieve first directory enty. */ + /*EMPTY*/; + } +} + + +/* + * Open native directory stream object and retrieve first file. + * Be sure to close previous stream before opening new one. + */ +static int +_initdir (DIR *dirp) +{ + assert (dirp != NULL); + assert (dirp->dirname != NULL); + dirp->dirent_filled = 0; + +# if defined(DIRENT_WIN32_INTERFACE) + /* Open stream and retrieve first file */ + dirp->search_handle = FindFirstFile (dirp->dirname, &dirp->current.data); + if (dirp->search_handle == INVALID_HANDLE_VALUE) { + /* something went wrong but we don't know what. GetLastError() could + * give us more information about the error, but then we should map + * the error code into errno. */ + errno = ENOENT; + return 0; + } + +# elif defined(DIRENT_MSDOS_INTERFACE) + if (_dos_findfirst (dirp->dirname, + _A_SUBDIR | _A_RDONLY | _A_ARCH | _A_SYSTEM | _A_HIDDEN, + &dirp->current.data) != 0) + { + /* _dos_findfirst and findfirst will set errno to ENOENT when no + * more entries could be retrieved. */ + return 0; + } +# endif + + /* initialize DIR and it's first entry */ + _setdirname (dirp); + dirp->dirent_filled = 1; + return 1; +} + + +/* + * Return implementation dependent name of the current directory entry. + */ +static const char * +_getdirname (const struct dirent *dp) +{ +#if defined(DIRENT_WIN32_INTERFACE) + return dp->data.cFileName; + +#elif defined(DIRENT_USE_FFBLK) + return dp->data.ff_name; + +#else + return dp->data.name; +#endif +} + + +/* + * Copy name of implementation dependent directory entry to the d_name field. + */ +static void +_setdirname (struct DIR *dirp) { + /* make sure that d_name is long enough */ + assert (strlen (_getdirname (&dirp->current)) <= NAME_MAX); + + strncpy (dirp->current.d_name, + _getdirname (&dirp->current), + NAME_MAX); + dirp->current.d_name[NAME_MAX] = '\0'; /*char d_name[NAME_MAX+1]*/ +} + +# ifdef __cplusplus +} +# endif +# define NAMLEN(dp) ((int)(strlen((dp)->d_name))) + +#else +# error "missing dirent interface" +#endif + + +#endif /*DIRENT_H*/ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/bio.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/bio.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/bio.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/cio.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/cio.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/cio.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/dwt.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/dwt.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/dwt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/event.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/event.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/event.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/jp3d.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/jp3d.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/jp3d.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/jp3d_lib.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/jp3d_lib.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/jp3d_lib.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/mct.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/mct.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/mct.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/mqc.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/mqc.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/mqc.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/openjpeg.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/openjpeg.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/openjpeg.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/pi.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/pi.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/pi.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/raw.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/raw.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/raw.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t1.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t1.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t1.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t1_3d.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t1_3d.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t1_3d.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t2.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t2.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/t2.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/tcd.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/tcd.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/tcd.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/tgt.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/tgt.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/tgt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/volume.Plo b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/volume.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/.deps/volume.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/CMakeLists.txt b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/CMakeLists.txt new file mode 100644 index 0000000000..23482483fc --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/CMakeLists.txt @@ -0,0 +1,39 @@ +IF(UNIX OR CYGWIN) + ADD_DEFINITIONS(-O3) +ELSEIF(MINGW) + ADD_DEFINITIONS(-Os) +ELSEIF(WIN32) + ADD_DEFINITIONS(/Os) +ENDIF(UNIX OR CYGWIN) +# +INCLUDE_REGULAR_EXPRESSION("^.*$") +# Defines the source code for the library +SET(JP3DVM_SRCS +bio.c cio.c dwt.c event.c jp3d.c jp3d_lib.c mct.c mqc.c openjpeg.c pi.c raw.c t1.c t1_3d.c t2.c tcd.c tgt.c volume.c +) + +# Build the library +IF(WIN32) + IF(BUILD_SHARED_LIBS) + ADD_DEFINITIONS(-DOPJ_EXPORTS) + ELSE(BUILD_SHARED_LIBS) + ADD_DEFINITIONS(-DOPJ_STATIC) + ENDIF(BUILD_SHARED_LIBS) +ENDIF(WIN32) +ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}_JP3D ${JP3DVM_SRCS}) +SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JP3D + PROPERTIES + VERSION 1.3.0 + SOVERSION 1) + +# Install library +INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}_JP3D +DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries +) + +# Install includes files +INSTALL(FILES openjpeg3d.h + DESTINATION ${OPENJPEG_INSTALL_INCLUDE_DIR}/openjpeg3d-1.3 +) +INSTALL(CODE + "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${OPENJPEG_INSTALL_INCLUDE_DIR}/openjpeg3d-1.3/openjpeg3d.h \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${OPENJPEG_INSTALL_INCLUDE_DIR}/openjpeg3d.h)") diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile new file mode 100644 index 0000000000..f936d867a3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile @@ -0,0 +1,647 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# jp3d/libjp3dvm/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + + +pkgdatadir = $(datadir)/openjpeg-1.4.0 +pkgincludedir = $(includedir)/openjpeg-1.4.0 +pkglibdir = $(libdir)/openjpeg-1.4.0 +pkglibexecdir = $(libexecdir)/openjpeg-1.4.0 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +am__append_1 = -DOPJ_EXPORTS +#am__append_2 = -DOPJ_STATIC +#am__append_3 = -static +subdir = jp3d/libjp3dvm +DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libopenjp3dvm_la_LIBADD = +am__objects_1 = bio.lo cio.lo dwt.lo event.lo jp3d.lo jp3d_lib.lo \ + volume.lo mct.lo mqc.lo openjpeg.lo pi.lo raw.lo t1.lo \ + t1_3d.lo t2.lo tcd.lo tgt.lo +am__objects_2 = +am_libopenjp3dvm_la_OBJECTS = $(am__objects_1) $(am__objects_2) +libopenjp3dvm_la_OBJECTS = $(am_libopenjp3dvm_la_OBJECTS) +libopenjp3dvm_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libopenjp3dvm_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libopenjp3dvm_la_SOURCES) +DIST_SOURCES = $(libopenjp3dvm_la_SOURCES) +HEADERS = $(include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf +AUTOHEADER = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader +AUTOMAKE = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11 +AWK = mawk +BUILD_NR = 0 +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JP3D_BUILD_NR = 0 +JP3D_MAJOR_NR = 1 +JP3D_MINOR_NR = 3 +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBPNG_CONFIG = /usr/bin/libpng-config +LIBS = -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAJOR_NR = 1 +MAKEINFO = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo +MINOR_NR = 4 +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = openjpeg-1.4.0 +PACKAGE_BUGREPORT = http://code.google.com/p/openjpeg/ +PACKAGE_NAME = OpenJPEG +PACKAGE_STRING = OpenJPEG 1.4.0 +PACKAGE_TARNAME = openjpeg-1.4.0 +PACKAGE_URL = http://www.openjpeg.org/ +PACKAGE_VERSION = 1.4.0 +PATH_SEPARATOR = : +PKGCONFIG = /usr/bin/pkg-config +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 1.4.0 +abs_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm +abs_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm +abs_top_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_top_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include/openjpeg3d-$(MAJOR).$(MINOR) +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh +jp3d_dir = +jpwl_dir = +lcms1includes = -I/usr/include +lcms1libs = -llcms +lcms2includes = +lcms2libs = +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pngincludes = -I/usr/include/libpng12 +pnglibs = -L/usr/lib/x86_64-linux-gnu -lpng12 +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +tiffincludes = +tifflibs = -ltiff +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. +with_doxygen = no + +#libjp3dvm +# +MAJOR = 1 +MINOR = 3 +BUILD = 0 +CURRENT = `expr $(MAJOR) + $(MINOR)` +lib_LTLIBRARIES = libopenjp3dvm.la +libopenjp3dvm_la_LDFLAGS = -no-undefined -version-info \ + $(CURRENT):$(BUILD):$(MINOR) $(am__append_3) +SRCS = bio.c cio.c dwt.c event.c jp3d.c jp3d_lib.c volume.c mct.c mqc.c \ + openjpeg.c pi.c raw.c t1.c t1_3d.c t2.c tcd.c tgt.c + +INCLS = t1_3d.h bio.h cio.h dwt.h event.h fix.h int.h jp3d.h jp3d_lib.h \ + volume.h mct.h mqc.h pi.h raw.h t1.h t2.h tcd.h tgt.h opj_includes.h + +libopenjp3dvm_la_SOURCES = $(SRCS) $(INCLS) +include_HEADERS = openjpeg3d.h + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix +INCLUDES = -I../.. -I. +COMPILERFLAGS = -Wall -O3 -ffast-math -std=c99 $(am__append_1) \ + $(am__append_2) +#CFLAGS += -DJP3D_VERSION="\"$(MAJOR).$(MINOR).$(BUILD)\"" +headerdir = openjpeg3d-$(MAJOR).$(MINOR) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign jp3d/libjp3dvm/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign jp3d/libjp3dvm/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libopenjp3dvm.la: $(libopenjp3dvm_la_OBJECTS) $(libopenjp3dvm_la_DEPENDENCIES) + $(libopenjp3dvm_la_LINK) -rpath $(libdir) $(libopenjp3dvm_la_OBJECTS) $(libopenjp3dvm_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/bio.Plo +include ./$(DEPDIR)/cio.Plo +include ./$(DEPDIR)/dwt.Plo +include ./$(DEPDIR)/event.Plo +include ./$(DEPDIR)/jp3d.Plo +include ./$(DEPDIR)/jp3d_lib.Plo +include ./$(DEPDIR)/mct.Plo +include ./$(DEPDIR)/mqc.Plo +include ./$(DEPDIR)/openjpeg.Plo +include ./$(DEPDIR)/pi.Plo +include ./$(DEPDIR)/raw.Plo +include ./$(DEPDIR)/t1.Plo +include ./$(DEPDIR)/t1_3d.Plo +include ./$(DEPDIR)/t2.Plo +include ./$(DEPDIR)/tcd.Plo +include ./$(DEPDIR)/tgt.Plo +include ./$(DEPDIR)/volume.Plo + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-local +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-generic clean-libLTLIBRARIES clean-libtool ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-hook install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-hook \ + uninstall-includeHEADERS uninstall-libLTLIBRARIES + + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +all-local: + @$(INSTALL) -d ../../bin + @cp -P .libs/libopenjp3dvm.* ../../bin + @rm -f ../../bin/libopenjp3dvm.la* + @rm -rf .report_lib + @$(INSTALL) -d .report_lib + @cp -P .libs/libopenjp3dvm.* .report_lib + @rm -f .report_lib/libopenjp3dvm.lai + @echo "" > ../.report.txt + @echo "Installing: ${prefix}/include/${headerdir}/" >> ../.report.txt + @echo "Installing: ${prefix}/include/${headerdir}/openjpeg3d.h" >> ../.report.txt + @(cd .report_lib; \ + l=`ls --file-type`; \ + for f in $$l ; do \ + echo "Installing: ${prefix}/lib/$$f" >> ../../.report.txt ; \ + done) + @rm -rf .report_lib + +install-data-hook: + (cd $(DESTDIR)${prefix}/include && rm -f openjpeg3d.h) + (cd $(DESTDIR)${prefix}/include && \ + $(LN_S) ${headerdir}/openjpeg3d.h openjpeg3d.h) + +uninstall-hook: + (cd $(DESTDIR)${prefix}/include && rm -rf openjpeg3d.h ${headerdir}) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile.am b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile.am new file mode 100644 index 0000000000..434fa977e6 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile.am @@ -0,0 +1,69 @@ +#libjp3dvm +# +MAJOR = @JP3D_MAJOR_NR@ +MINOR = @JP3D_MINOR_NR@ +BUILD = @JP3D_BUILD_NR@ +CURRENT=`expr $(MAJOR) + $(MINOR)` + +lib_LTLIBRARIES = libopenjp3dvm.la + +libopenjp3dvm_la_LDFLAGS = -no-undefined \ + -version-info $(CURRENT):$(BUILD):$(MINOR) + +SRCS = bio.c cio.c dwt.c event.c jp3d.c jp3d_lib.c volume.c mct.c mqc.c \ + openjpeg.c pi.c raw.c t1.c t1_3d.c t2.c tcd.c tgt.c + +INCLS = t1_3d.h bio.h cio.h dwt.h event.h fix.h int.h jp3d.h jp3d_lib.h \ + volume.h mct.h mqc.h pi.h raw.h t1.h t2.h tcd.h tgt.h opj_includes.h + +libopenjp3dvm_la_SOURCES = $(SRCS) $(INCLS) + +includedir = ${prefix}/include/openjpeg3d-$(MAJOR).$(MINOR) +include_HEADERS = openjpeg3d.h + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +INCLUDES = -I../.. -I. +COMPILERFLAGS = -Wall -O3 -ffast-math -std=c99 + +if with_sharedlibs +COMPILERFLAGS += -DOPJ_EXPORTS +else +COMPILERFLAGS += -DOPJ_STATIC +libopenjp3dvm_la_LDFLAGS += -static +endif + +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +#CFLAGS += -DJP3D_VERSION="\"$(MAJOR).$(MINOR).$(BUILD)\"" + +headerdir = openjpeg3d-$(MAJOR).$(MINOR) + +all-local: + @$(INSTALL) -d ../../bin + @cp -P .libs/libopenjp3dvm.* ../../bin + @rm -f ../../bin/libopenjp3dvm.la* + @rm -rf .report_lib + @$(INSTALL) -d .report_lib + @cp -P .libs/libopenjp3dvm.* .report_lib + @rm -f .report_lib/libopenjp3dvm.lai + @echo "" > ../.report.txt + @echo "Installing: ${prefix}/include/${headerdir}/" >> ../.report.txt + @echo "Installing: ${prefix}/include/${headerdir}/openjpeg3d.h" >> ../.report.txt + @(cd .report_lib; \ + l=`ls --file-type`; \ + for f in $$l ; do \ + echo "Installing: ${prefix}/lib/$$f" >> ../../.report.txt ; \ + done) + @rm -rf .report_lib + +install-data-hook: + (cd $(DESTDIR)${prefix}/include && rm -f openjpeg3d.h) + (cd $(DESTDIR)${prefix}/include && \ + $(LN_S) ${headerdir}/openjpeg3d.h openjpeg3d.h) + +uninstall-hook: + (cd $(DESTDIR)${prefix}/include && rm -rf openjpeg3d.h ${headerdir}) diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile.in b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile.in new file mode 100644 index 0000000000..6a6c74adb2 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/Makefile.in @@ -0,0 +1,647 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@with_sharedlibs_TRUE@am__append_1 = -DOPJ_EXPORTS +@with_sharedlibs_FALSE@am__append_2 = -DOPJ_STATIC +@with_sharedlibs_FALSE@am__append_3 = -static +subdir = jp3d/libjp3dvm +DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libopenjp3dvm_la_LIBADD = +am__objects_1 = bio.lo cio.lo dwt.lo event.lo jp3d.lo jp3d_lib.lo \ + volume.lo mct.lo mqc.lo openjpeg.lo pi.lo raw.lo t1.lo \ + t1_3d.lo t2.lo tcd.lo tgt.lo +am__objects_2 = +am_libopenjp3dvm_la_OBJECTS = $(am__objects_1) $(am__objects_2) +libopenjp3dvm_la_OBJECTS = $(am_libopenjp3dvm_la_OBJECTS) +libopenjp3dvm_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libopenjp3dvm_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libopenjp3dvm_la_SOURCES) +DIST_SOURCES = $(libopenjp3dvm_la_SOURCES) +HEADERS = $(include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_NR = @BUILD_NR@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JP3D_BUILD_NR = @JP3D_BUILD_NR@ +JP3D_MAJOR_NR = @JP3D_MAJOR_NR@ +JP3D_MINOR_NR = @JP3D_MINOR_NR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBPNG_CONFIG = @LIBPNG_CONFIG@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAJOR_NR = @MAJOR_NR@ +MAKEINFO = @MAKEINFO@ +MINOR_NR = @MINOR_NR@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG = @PKGCONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = ${prefix}/include/openjpeg3d-$(MAJOR).$(MINOR) +infodir = @infodir@ +install_sh = @install_sh@ +jp3d_dir = @jp3d_dir@ +jpwl_dir = @jpwl_dir@ +lcms1includes = @lcms1includes@ +lcms1libs = @lcms1libs@ +lcms2includes = @lcms2includes@ +lcms2libs = @lcms2libs@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pngincludes = @pngincludes@ +pnglibs = @pnglibs@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +tiffincludes = @tiffincludes@ +tifflibs = @tifflibs@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_doxygen = @with_doxygen@ + +#libjp3dvm +# +MAJOR = @JP3D_MAJOR_NR@ +MINOR = @JP3D_MINOR_NR@ +BUILD = @JP3D_BUILD_NR@ +CURRENT = `expr $(MAJOR) + $(MINOR)` +lib_LTLIBRARIES = libopenjp3dvm.la +libopenjp3dvm_la_LDFLAGS = -no-undefined -version-info \ + $(CURRENT):$(BUILD):$(MINOR) $(am__append_3) +SRCS = bio.c cio.c dwt.c event.c jp3d.c jp3d_lib.c volume.c mct.c mqc.c \ + openjpeg.c pi.c raw.c t1.c t1_3d.c t2.c tcd.c tgt.c + +INCLS = t1_3d.h bio.h cio.h dwt.h event.h fix.h int.h jp3d.h jp3d_lib.h \ + volume.h mct.h mqc.h pi.h raw.h t1.h t2.h tcd.h tgt.h opj_includes.h + +libopenjp3dvm_la_SOURCES = $(SRCS) $(INCLS) +include_HEADERS = openjpeg3d.h + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix +INCLUDES = -I../.. -I. +COMPILERFLAGS = -Wall -O3 -ffast-math -std=c99 $(am__append_1) \ + $(am__append_2) +#CFLAGS += -DJP3D_VERSION="\"$(MAJOR).$(MINOR).$(BUILD)\"" +headerdir = openjpeg3d-$(MAJOR).$(MINOR) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign jp3d/libjp3dvm/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign jp3d/libjp3dvm/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libopenjp3dvm.la: $(libopenjp3dvm_la_OBJECTS) $(libopenjp3dvm_la_DEPENDENCIES) + $(libopenjp3dvm_la_LINK) -rpath $(libdir) $(libopenjp3dvm_la_OBJECTS) $(libopenjp3dvm_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jp3d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jp3d_lib.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mct.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mqc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openjpeg.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1_3d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tgt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/volume.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-local +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-generic clean-libLTLIBRARIES clean-libtool ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-hook install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-hook \ + uninstall-includeHEADERS uninstall-libLTLIBRARIES + + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +all-local: + @$(INSTALL) -d ../../bin + @cp -P .libs/libopenjp3dvm.* ../../bin + @rm -f ../../bin/libopenjp3dvm.la* + @rm -rf .report_lib + @$(INSTALL) -d .report_lib + @cp -P .libs/libopenjp3dvm.* .report_lib + @rm -f .report_lib/libopenjp3dvm.lai + @echo "" > ../.report.txt + @echo "Installing: ${prefix}/include/${headerdir}/" >> ../.report.txt + @echo "Installing: ${prefix}/include/${headerdir}/openjpeg3d.h" >> ../.report.txt + @(cd .report_lib; \ + l=`ls --file-type`; \ + for f in $$l ; do \ + echo "Installing: ${prefix}/lib/$$f" >> ../../.report.txt ; \ + done) + @rm -rf .report_lib + +install-data-hook: + (cd $(DESTDIR)${prefix}/include && rm -f openjpeg3d.h) + (cd $(DESTDIR)${prefix}/include && \ + $(LN_S) ${headerdir}/openjpeg3d.h openjpeg3d.h) + +uninstall-hook: + (cd $(DESTDIR)${prefix}/include && rm -rf openjpeg3d.h ${headerdir}) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/bio.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/bio.c new file mode 100755 index 0000000000..3ac931587e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/bio.c @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup BIO BIO - Individual bit input-output stream */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +/** +Write a bit +@param bio BIO handle +@param b Bit to write (0 or 1) +*/ +static void bio_putbit(opj_bio_t *bio, int b); +/** +Read a bit +@param bio BIO handle +@return Returns the read bit +*/ +static int bio_getbit(opj_bio_t *bio); +/** +Write a byte +@param bio BIO handle +@return Returns 0 if successful, returns 1 otherwise +*/ +static int bio_byteout(opj_bio_t *bio); +/** +Read a byte +@param bio BIO handle +@return Returns 0 if successful, returns 1 otherwise +*/ +static int bio_bytein(opj_bio_t *bio); + +/*@}*/ + +/*@}*/ + + +/* +========================================================== + local functions +========================================================== +*/ + +static int bio_byteout(opj_bio_t *bio) { + bio->buf = (bio->buf << 8) & 0xffff; + bio->ct = bio->buf == 0xff00 ? 7 : 8; + if (bio->bp >= bio->end) { + return 1; + } + *bio->bp++ = bio->buf >> 8; + return 0; +} + +static int bio_bytein(opj_bio_t *bio) { + bio->buf = (bio->buf << 8) & 0xffff; + bio->ct = bio->buf == 0xff00 ? 7 : 8; + if (bio->bp >= bio->end) { + return 1; + } + bio->buf |= *bio->bp++; + return 0; +} + +static void bio_putbit(opj_bio_t *bio, int b) { + if (bio->ct == 0) { + bio_byteout(bio); + } + bio->ct--; + bio->buf |= b << bio->ct; +} + +/* MOD antonin */ +static int bio_getbit(opj_bio_t *bio) { +/* DOM */ + if (bio->ct == 0) { + bio_bytein(bio); + } + bio->ct--; + return (bio->buf >> bio->ct) & 1; +} + +/* +========================================================== + Bit Input/Output interface +========================================================== +*/ + +opj_bio_t* bio_create() { + opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t)); + return bio; +} + +void bio_destroy(opj_bio_t *bio) { + if(bio) { + opj_free(bio); + } +} + +int bio_numbytes(opj_bio_t *bio) { + return (bio->bp - bio->start); +} + +void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len) { + bio->start = bp; + bio->end = bp + len; + bio->bp = bp; + bio->buf = 0; + bio->ct = 8; +} + +void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len) { + bio->start = bp; + bio->end = bp + len; + bio->bp = bp; + bio->buf = 0; + bio->ct = 0; +} + +void bio_write(opj_bio_t *bio, int v, int n) { + int i; + for (i = n - 1; i >= 0; i--) { + bio_putbit(bio, (v >> i) & 1); + } +} + +int bio_read(opj_bio_t *bio, int n) { + int i, v; + v = 0; + for (i = n - 1; i >= 0; i--) { + v += bio_getbit(bio) << i; + } + return v; +} + +int bio_flush(opj_bio_t *bio) { + bio->ct = 0; + if (bio_byteout(bio)) { + return 1; + } + if (bio->ct == 7) { + bio->ct = 0; + if (bio_byteout(bio)) { + return 1; + } + } + return 0; +} + +int bio_inalign(opj_bio_t *bio) { + bio->ct = 0; + if ((bio->buf & 0xff) == 0xff) { + if (bio_bytein(bio)) { + return 1; + } + bio->ct = 0; + } + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/bio.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/bio.h new file mode 100755 index 0000000000..c65103bdc7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/bio.h @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __BIO_H +#define __BIO_H +/** +@file bio.h +@brief Implementation of an individual bit input-output (BIO) + +The functions in BIO.C have for goal to realize an individual bit input - output. +*/ + +/** @defgroup BIO BIO - Individual bit input-output stream */ +/*@{*/ + +/** +Individual bit input-output stream (BIO) +*/ +typedef struct opj_bio { +/** pointer to the start of the buffer */ + unsigned char *start; +/** pointer to the end of the buffer */ + unsigned char *end; +/** pointer to the present position in the buffer */ + unsigned char *bp; +/** temporary place where each byte is read or written */ + unsigned int buf; +/** coder : number of bits free to write. decoder : number of bits read */ + int ct; +} opj_bio_t; + +/** @name Funciones generales */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a new BIO handle +@return Returns a new BIO handle if successful, returns NULL otherwise +*/ +opj_bio_t* bio_create(); +/** +Destroy a previously created BIO handle +@param bio BIO handle to destroy +*/ +void bio_destroy(opj_bio_t *bio); +/** +Number of bytes written. +@param bio BIO handle +@return Returns the number of bytes written +*/ +int bio_numbytes(opj_bio_t *bio); +/** +Init encoder +@param bio BIO handle +@param bp Output buffer +@param len Output buffer length +*/ +void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len); +/** +Init decoder +@param bio BIO handle +@param bp Input buffer +@param len Input buffer length +*/ +void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len); +/** +Write bits +@param bio BIO handle +@param v Value of bits +@param n Number of bits to write +*/ +void bio_write(opj_bio_t *bio, int v, int n); +/** +Read bits +@param bio BIO handle +@param n Number of bits to read +@return Returns the corresponding read number +*/ +int bio_read(opj_bio_t *bio, int n); +/** +Flush bits +@param bio BIO handle +@return Returns 1 if successful, returns 0 otherwise +*/ +int bio_flush(opj_bio_t *bio); +/** +Passes the ending bits (coming from flushing) +@param bio BIO handle +@return Returns 1 if successful, returns 0 otherwise +*/ +int bio_inalign(opj_bio_t *bio); +/** +Read a bit +@param bio BIO handle +@return Returns the read bit +*/ +/* MOD antonin */ +//int bio_getbit(opj_bio_t *bio); +/* DOM */ +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __BIO_H */ + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/cio.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/cio.c new file mode 100755 index 0000000000..8814a33be7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/cio.c @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/* ----------------------------------------------------------------------- */ + +opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length) { + opj_cp_t *cp = NULL; + opj_cio_t *cio = (opj_cio_t*)opj_malloc(sizeof(opj_cio_t)); + if(!cio) return NULL; + cio->cinfo = cinfo; + if(buffer && length) { + /* wrap a user buffer containing the encoded image */ + cio->openmode = OPJ_STREAM_READ; + cio->buffer = buffer; + cio->length = length; + } + else if(!buffer && !length && cinfo) { + /* allocate a buffer for the encoded image */ + cio->openmode = OPJ_STREAM_WRITE; + switch(cinfo->codec_format) { + case CODEC_J3D: + case CODEC_J2K: + cp = ((opj_j3d_t*)cinfo->j3d_handle)->cp; + break; + default: + opj_free(cio); + return NULL; + } + cio->length = cp->tdx * cp->tdy * cp->tdz * cp->tw * cp->th * cp->tl * 4; + cio->buffer = (unsigned char *)opj_malloc(cio->length); + if(!cio->buffer) { + opj_free(cio); + return NULL; + } + } + else { + opj_free(cio); + return NULL; + } + + /* Initialize byte IO */ + cio->start = cio->buffer; + cio->end = cio->buffer + cio->length; + cio->bp = cio->buffer; + + return cio; +} + +void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio) { + if(cio) { + if(cio->openmode == OPJ_STREAM_WRITE) { + /* destroy the allocated buffer */ + opj_free(cio->buffer); + } + /* destroy the cio */ + opj_free(cio); + } +} + + +/* ----------------------------------------------------------------------- */ + +/* + * Get position in byte stream. + */ +int OPJ_CALLCONV cio_tell(opj_cio_t *cio) { + return cio->bp - cio->start; +} + +/* + * Set position in byte stream. + * + * pos : position, in number of bytes, from the beginning of the stream + */ +void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos) { + cio->bp = cio->start + pos; +} + +/* + * Number of bytes left before the end of the stream. + */ +int cio_numbytesleft(opj_cio_t *cio) { + return cio->end - cio->bp; +} + +/* + * Get pointer to the current position in the stream. + */ +unsigned char *cio_getbp(opj_cio_t *cio) { + return cio->bp; +} + +/* + * Write a byte. + */ +bool cio_byteout(opj_cio_t *cio, unsigned char v) { + if (cio->bp >= cio->end) { + opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n"); + return false; + } + *cio->bp++ = v; + return true; +} + +/* + * Read a byte. + */ +unsigned char cio_bytein(opj_cio_t *cio) { + if (cio->bp >= cio->end) { + opj_event_msg(cio->cinfo, EVT_ERROR, "read error\n"); + return 0; + } + return *cio->bp++; +} + +/* + * Write some bytes. + * + * v : value to write + * n : number of bytes to write + */ +unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n) { + int i; + for (i = n - 1; i >= 0; i--) { + if( !cio_byteout(cio, (unsigned char) ((v >> (i << 3)) & 0xff)) ) + return 0; + } + return n; +} + +/* + * Read some bytes. + * + * n : number of bytes to read + * + * return : value of the n bytes read + */ +unsigned int cio_read(opj_cio_t *cio, int n) { + int i; + unsigned int v; + v = 0; + for (i = n - 1; i >= 0; i--) { + v += cio_bytein(cio) << (i << 3); + } + return v; +} + +/* + * Skip some bytes. + * + * n : number of bytes to skip + */ +void cio_skip(opj_cio_t *cio, int n) { + cio->bp += n; +} + +/* + * Write some bytes. + * + * v : value to write + * n : number of bytes to write + */ +int cio_write_int(opj_cio_t *cio, int v, int n) { + int i; + for (i = n - 1; i >= 0; i--) { + if( !cio_byteout(cio, (char) ((v >> (i << 3)) & 0xff)) ) + return 0; + } + return n; +} + +/* + * Read some bytes. + * + * n : number of bytes to read + * + * return : value of the n bytes read + */ +int cio_read_int(opj_cio_t *cio, int n) { + int i; + int v; + v = 0; + for (i = n - 1; i >= 0; i--) { + v += cio_bytein(cio) << (i << 3); + } + return v; +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/cio.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/cio.h new file mode 100755 index 0000000000..6f58aeaa69 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/cio.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __CIO_H +#define __CIO_H +/** +@file cio.h +@brief Implementation of a byte input-output process (CIO) + +The functions in CIO.C have for goal to realize a byte input / output process. +*/ + +/** @defgroup CIO CIO - byte input-output stream */ +/*@{*/ + +/** @name Funciones generales (see also openjpeg3d.h) */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Number of bytes left before the end of the stream +@param cio CIO handle +@return Returns the number of bytes before the end of the stream +*/ +int cio_numbytesleft(opj_cio_t *cio); +/** +Get pointer to the current position in the stream +@param cio CIO handle +@return Returns a pointer to the current position +*/ +unsigned char *cio_getbp(opj_cio_t *cio); +/** +Write some bytes +@param cio CIO handle +@param v Value to write +@param n Number of bytes to write +@return Returns the number of bytes written or 0 if an error occured +*/ +unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n); +/** +Read some bytes +@param cio CIO handle +@param n Number of bytes to read +@return Returns the value of the n bytes read +*/ +unsigned int cio_read(opj_cio_t *cio, int n); +/** +Skip some bytes +@param cio CIO handle +@param n Number of bytes to skip +*/ +void cio_skip(opj_cio_t *cio, int n); +/** +Write some bytes +@param cio CIO handle +@param v Signed integer value to write +@param n Number of bytes to write +@return Returns the number of bytes written or 0 if an error occured +*/ +int cio_write_int(opj_cio_t *cio, int v, int n); +/** +Read some bytes +@param cio CIO handle +@param n Number of bytes to read +@return Returns the value of the n bytes read +*/ +int cio_read_int(opj_cio_t *cio, int n); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __CIO_H */ + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/dwt.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/dwt.c new file mode 100755 index 0000000000..4ac23bb31a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/dwt.c @@ -0,0 +1,1016 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyrigth (c) 2006, Mónica Díez, LPI-UVA, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +/* + * NOTE: + * This is a modified version of the openjpeg dwt.c file. + * Average speed improvement compared to the original file (measured on + * my own machine, a P4 running at 3.0 GHz): + * 5x3 wavelets about 2 times faster + * 9x7 wavelets about 3 times faster + * for both, encoding and decoding. + * + * The better performance is caused by doing the 1-dimensional DWT + * within a temporary buffer where the data can be accessed sequential + * for both directions, horizontal and vertical. The 2d vertical DWT was + * the major bottleneck in the former version. + * + * I have also removed the "Add Patrick" part because it is not longer + * needed. + * + * 6/6/2005 + * -Ive (aka Reiner Wahler) + * mail: ive@lilysoft.com + */ + +#include "opj_includes.h" + +/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ +unsigned int ops; +/** +Forward lazy transform (horizontal) +*/ +static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas); +/** +Forward lazy transform (vertical) +*/ +static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas); +/** +Forward lazy transform (axial) +*/ +static void dwt_deinterleave_z(int *a, int *b, int dn, int sn, int xy, int cas); +/** +Inverse lazy transform (horizontal) +*/ +static void dwt_interleave_h(int *a, int *b, int dn, int sn, int cas); +/** +Inverse lazy transform (vertical) +*/ +static void dwt_interleave_v(int *a, int *b, int dn, int sn, int x, int cas); +/** +Inverse lazy transform (axial) +*/ +static void dwt_interleave_z(int *a, int *b, int dn, int sn, int xy, int cas); +/** +Forward 5-3 wavelet tranform in 1-D +*/ +static void dwt_encode_53(int *a, int dn, int sn, int cas); +static void dwt_encode_97(int *a, int dn, int sn, int cas); +/** +Inverse 5-3 wavelet tranform in 1-D +*/ +static void dwt_decode_53(int *a, int dn, int sn, int cas); +static void dwt_decode_97(int *a, int dn, int sn, int cas); +/** +Computing of wavelet transform L2 norms for arbitrary transforms +*/ +static double dwt_calc_wtnorms(int orient, int level[3], int dwtid[3], opj_wtfilt_t *wtfiltx, opj_wtfilt_t *wtfilty, opj_wtfilt_t *wtfiltz); +/** +Encoding of quantification stepsize +*/ +static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno_stepsize); +/*@}*/ + +/*@}*/ + +#define S(i) a[(i)*2] +#define D(i) a[(1+(i)*2)] +#define S_(i) ((i)<0?S(0):((i)>=sn?S(sn-1):S(i))) +#define D_(i) ((i)<0?D(0):((i)>=dn?D(dn-1):D(i))) +/* new */ +#define SS_(i) ((i)<0?S(0):((i)>=dn?S(dn-1):S(i))) +#define DD_(i) ((i)<0?D(0):((i)>=sn?D(sn-1):D(i))) + +/*

*/ +/* This table contains the norms of the 5-3 wavelets for different bands. */ +/* */ +static double dwt_norm[10][10][10][8]; +static int flagnorm[10][10][10][8]; + +/*static const double dwt_norms[5][8][10] = { + {//ResZ=1 + {1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3}, + {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, + {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, + {.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93} + },{//ResZ=2 + {1.000, 1.8371, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3}, + {1.2717, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, + {1.2717, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, + {.8803, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}, + {1.2717}, + {.8803}, + {.8803}, + {.6093}, + },{ //ResZ=3 + {1.000, 1.8371, 4.5604, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3}, + {1.2717, 2.6403, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, + {1.2717, 2.6403, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, + {.8803, 1.5286, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}, + {1.2717, 2.6403}, + {.8803, 1.5286}, + {.8803, 1.5286}, + {.6093, 0.8850}, + },{ //ResZ=4 + {1.000, 1.8371, 4.5604, 12.4614, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3}, + {1.2717, 2.6403, 6.7691 , 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, + {1.2717, 2.6403, 6.7691 , 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, + {.8803, 1.5286, 3.6770 , 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}, + {1.2717, 2.6403, 6.7691 }, + {.8803, 1.5286, 3.6770 }, + {.8803, 1.5286, 3.6770 }, + {.6093, 0.8850, 1.9974 }, + },{ //ResZ=5 + {1.000, 1.8371, 4.5604, 12.4614, 34.9025, 21.34, 42.67, 85.33, 170.7, 341.3}, + {1.2717, 2.6403, 6.7691 , 18.6304 , 11.33, 22.64, 45.25, 90.48, 180.9}, + {1.2717, 2.6403, 6.7691 , 18.6304, 11.33, 22.64, 45.25, 90.48, 180.9}, + {.8803, 1.5286, 3.6770 , 9.9446, 6.019, 12.01, 24.00, 47.97, 95.93}, + {1.2717, 2.6403, 6.7691, 18.6304}, + {.8803, 1.5286, 3.6770, 9.9446 }, + {.8803, 1.5286, 3.6770, 9.9446 }, + {.6093, 0.8850, 1.9974, 5.3083 }, + } +};*/ + +/* */ +/* This table contains the norms of the 9-7 wavelets for different bands. */ +/* */ +/*static const double dwt_norms_real[5][8][10] = { + {//ResZ==1 + {1.000, 1.9659, 4.1224, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894}, + {1.0113, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196}, + {1.0113, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196}, + {0.5202, 0.9672, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722} + }, { //ResZ==2 + {1.000, 2.7564, 4.1224, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894}, + {1.4179, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196}, + {1.4179, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196}, + {0.7294, 0.9672, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722}, + {1.4179}, + {0.7294}, + {0.7294}, + {0.3752} //HHH + },{ //ResZ==3 + {1.000, 2.7564, 8.3700, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894}, + {1.4179, 4.0543, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196}, + {1.4179, 4.0543, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196}, + {0.7294, 1.9638, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722}, + {1.4179, 4.0543}, + {0.7294, 1.9638}, + {0.7294, 1.9638}, + {0.3752, 0.9512} //HHH + },{ //ResZ==4 + {1.000, 2.7564, 8.3700, 24.4183, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894}, + {1.4179, 4.0543, 12.1366, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196}, + {1.4179, 4.0543, 12.1366, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196}, + {0.7294, 1.9638, 6.0323, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722}, + {1.4179, 4.0543, 12.1366}, + {0.7294, 1.9638, 6.0323}, + {0.7294, 1.9638, 6.0323}, + {0.3752, 0.9512, 2.9982} //HHH + },{ //ResZ==5 + {1.000, 2.7564, 8.3700, 24.4183, 69.6947, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894}, + {1.4179, 4.0543, 12.1366, 35.1203, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196}, + {1.4179, 4.0543, 12.1366, 35.1203, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196}, + {0.7294, 1.9638, 6.0323, 17.6977, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722}, + {1.4179, 4.0543, 12.1366, 35.1203}, + {0.7294, 1.9638, 6.0323, 17.6977}, + {0.7294, 1.9638, 6.0323, 17.6977}, + {0.3752, 0.9512, 2.9982, 8.9182} //HHH + } +};*/ + +static opj_atk_t atk_info_wt[] = { + {0, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1.230174104, 4, {0}, {0}, {0}, {1,1,1,1}, {-1.586134342059924, -0.052980118572961, 0.882911075530934, 0.443506852043971}},/* WT 9-7 IRR*/ + {1, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {1,2}, {1,2}, {1,1}, {-1,1}},/* WT 5-3 REV*/ + {2, 0, J3D_ATK_ARB, J3D_ATK_REV, 0, J3D_ATK_CON, 0, 2, {0,0}, {0,1}, {0,1}, {1,1}, {{-1},{1}}}, /* WT 2-2 REV*/ + {3, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0,0,-1}, {0,1,2}, {0,1,2}, {1,1,3}, {{-1},{1},{1,0,-1}}}, /* WT 2-6 REV*/ + {4, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0,0,-2}, {0,1,6}, {0,1,32}, {1,1,5}, {{-1},{1},{-3,22,0,-22,3}}}, /* WT 2-10 REV*/ + {5, 1, J3D_ATK_ARB, J3D_ATK_IRR, 1, J3D_ATK_WS, 1, 7, {0}, {0}, {0}, {1,1,2,1,2,1,3},{{-1},{1.58613434206},{-0.460348209828, 0.460348209828},{0.25},{0.374213867768,-0.374213867768},{-1.33613434206},{0.29306717103,0,-0.29306717103}}}, /* WT 6-10 IRR*/ + {6, 1, J3D_ATK_ARB, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 11, {0}, {0}, {0}, {1,1,2,1,2,1,2,1,2,1,5},{{-1},{0,99715069105},{-1.00573127827, 1.00573127827},{-0.27040357631},{2.20509972343, -2.20509972343},{0.08059995736}, + {-1.62682532350, 1.62682532350},{0.52040357631},{0.60404664250, -0.60404664250},{-0.82775064841},{-0.06615812964, 0.29402137720, 0, -0.29402137720, 0.06615812964}}}, /* WT 10-18 IRR*/ + {7, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 2, {0}, {0}, {0}, {1,1}, {-0.5, 0.25}}, /* WT 5-3 IRR*/ + {8, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {4,4}, {8,8}, {2,2}, {{-9,1},{5,-1}}} /* WT 13-7 REV*/ +}; +/* +========================================================== + local functions +========================================================== +*/ + +/* */ +/* Forward lazy transform (horizontal). */ +/* */ +static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas) { + int i; + for (i=0; i */ +/* Forward lazy transform (vertical). */ +/* */ +static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas) { + int i; + for (i=0; i */ +/* Forward lazy transform (axial). */ +/* */ +static void dwt_deinterleave_z(int *a, int *b, int dn, int sn, int xy, int cas) { + int i; + for (i=0; i */ +/* Inverse lazy transform (horizontal). */ +/* */ +static void dwt_interleave_h(int *a, int *b, int dn, int sn, int cas) { + int i; + int *ai = NULL; + int *bi = NULL; + ai = a; + bi = b + cas; + for (i = 0; i < sn; i++) { + *bi = *ai; + bi += 2; + ai++; + } + ai = a + sn; + bi = b + 1 - cas; + for (i = 0; i < dn; i++) { + *bi = *ai; + bi += 2; + ai++; + } +} + +/* */ +/* Inverse lazy transform (vertical). */ +/* */ +static void dwt_interleave_v(int *a, int *b, int dn, int sn, int x, int cas) { + int i; + int *ai = NULL; + int *bi = NULL; + ai = a; + bi = b + cas; + for (i = 0; i < sn; i++) { + *bi = *ai; + bi += 2; + ai += x; + } + ai = a + (sn * x); + bi = b + 1 - cas; + for (i = 0; i < dn; i++) { + *bi = *ai; + bi += 2; + ai += x; + } +} + +/* */ +/* Inverse lazy transform (axial). */ +/* */ +static void dwt_interleave_z(int *a, int *b, int dn, int sn, int xy, int cas) { + int i; + int *ai = NULL; + int *bi = NULL; + ai = a; + bi = b + cas; + for (i = 0; i < sn; i++) { + *bi = *ai; + bi += 2; + ai += xy; + } + ai = a + (sn * xy); + bi = b + 1 - cas; + for (i = 0; i < dn; i++) { + *bi = *ai; + bi += 2; + ai += xy; + } +} + + +/* */ +/* Forward 5-3 or 9-7 wavelet tranform in 1-D. */ +/* */ +static void dwt_encode_53(int *a, int dn, int sn, int cas) { + int i; + + if (!cas) { + if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */ + //for (i = 0; i < dn; i++) D(i) -= (S_(i) + S_(i + 1)) >> 1; + //for (i = 0; i < sn; i++) S(i) += (D_(i - 1) + D_(i) + 2) >> 2; + for (i = 0; i < dn; i++){ + D(i) -= (S_(i) + S_(i + 1)) >> 1; + //ops += 2; + } + for (i = 0; i < sn; i++){ + S(i) += (D_(i - 1) + D_(i) + 2) >> 2; + //ops += 3; + } + } + } else { + /*if (!sn && dn == 1) + S(0) *= 2; + else { + for (i = 0; i < dn; i++) S(i) -= (DD_(i) + DD_(i - 1)) >> 1; + for (i = 0; i < sn; i++) D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2; + }*/ + if (!sn && dn == 1){ + S(0) *= 2; + //ops++; + } else { + for (i = 0; i < dn; i++){ + S(i) -= (DD_(i) + DD_(i - 1)) >> 1; + // ops += 2; + } + for (i = 0; i < sn; i++){ + D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2; + // ops += 3; + } + } + } +} +static void dwt_encode_97(int *a, int dn, int sn, int cas) { + int i; + + if (!cas) { + if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */ + for (i = 0; i < dn; i++) + D(i) -= fix_mul(S_(i) + S_(i + 1), 12993); + for (i = 0; i < sn; i++) + S(i) -= fix_mul(D_(i - 1) + D_(i), 434); + for (i = 0; i < dn; i++) + D(i) += fix_mul(S_(i) + S_(i + 1), 7233); + for (i = 0; i < sn; i++) + S(i) += fix_mul(D_(i - 1) + D_(i), 3633); + for (i = 0; i < dn; i++) + D(i) = fix_mul(D(i), 5038); /*5038 */ + for (i = 0; i < sn; i++) + S(i) = fix_mul(S(i), 6659); /*6660 */ + } + } else { + if ((sn > 0) || (dn > 1)) { /* NEW : CASE ONE ELEMENT */ + for (i = 0; i < dn; i++) + S(i) -= fix_mul(DD_(i) + DD_(i - 1), 12993); + for (i = 0; i < sn; i++) + D(i) -= fix_mul(SS_(i) + SS_(i + 1), 434); + for (i = 0; i < dn; i++) + S(i) += fix_mul(DD_(i) + DD_(i - 1), 7233); + for (i = 0; i < sn; i++) + D(i) += fix_mul(SS_(i) + SS_(i + 1), 3633); + for (i = 0; i < dn; i++) + S(i) = fix_mul(S(i), 5038); /*5038 */ + for (i = 0; i < sn; i++) + D(i) = fix_mul(D(i), 6659); /*6660 */ + } + } +} +/* */ +/* Inverse 5-3 or 9-7 wavelet tranform in 1-D. */ +/* */ +static void dwt_decode_53(int *a, int dn, int sn, int cas) { + int i; + if (!cas) { + if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */ + for (i = 0; i < sn; i++) S(i) -= (D_(i - 1) + D_(i) + 2) >> 2; + for (i = 0; i < dn; i++) D(i) += (S_(i) + S_(i + 1)) >> 1; + } + } else { + if (!sn && dn == 1) /* NEW : CASE ONE ELEMENT */ + S(0) /= 2; + else { + for (i = 0; i < sn; i++) D(i) -= (SS_(i) + SS_(i + 1) + 2) >> 2; + for (i = 0; i < dn; i++) S(i) += (DD_(i) + DD_(i - 1)) >> 1; + } + } +} +static void dwt_decode_97(int *a, int dn, int sn, int cas) { + int i; + + if (!cas) { + if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */ + for (i = 0; i < sn; i++) + S(i) = fix_mul(S(i), 10078); /* 10076 */ + for (i = 0; i < dn; i++) + D(i) = fix_mul(D(i), 13318); /* 13320 */ + for (i = 0; i < sn; i++) + S(i) -= fix_mul(D_(i - 1) + D_(i), 3633); + for (i = 0; i < dn; i++) + D(i) -= fix_mul(S_(i) + S_(i + 1), 7233); + for (i = 0; i < sn; i++) + S(i) += fix_mul(D_(i - 1) + D_(i), 434); + for (i = 0; i < dn; i++) + D(i) += fix_mul(S_(i) + S_(i + 1), 12994); /* 12993 */ + } + } else { + if ((sn > 0) || (dn > 1)) { /* NEW : CASE ONE ELEMENT */ + for (i = 0; i < sn; i++) + D(i) = fix_mul(D(i), 10078); /* 10076 */ + for (i = 0; i < dn; i++) + S(i) = fix_mul(S(i), 13318); /* 13320 */ + for (i = 0; i < sn; i++) + D(i) -= fix_mul(SS_(i) + SS_(i + 1), 3633); + for (i = 0; i < dn; i++) + S(i) -= fix_mul(DD_(i) + DD_(i - 1), 7233); + for (i = 0; i < sn; i++) + D(i) += fix_mul(SS_(i) + SS_(i + 1), 434); + for (i = 0; i < dn; i++) + S(i) += fix_mul(DD_(i) + DD_(i - 1), 12994); /* 12993 */ + } + } +} + + +/* */ +/* Get norm of arbitrary wavelet transform. */ +/* */ +static int upandconv(double *nXPS, double *LPS, int lenXPS, int lenLPS) { + /* Perform the convolution of the vectors. */ + int i,j; + double *tmp = (double *)opj_malloc(2*lenXPS * sizeof(double)); + //Upsample + memset(tmp, 0, 2*lenXPS*sizeof(double)); + for (i = 0; i < lenXPS; i++) { + *(tmp + 2*i) = *(nXPS + i); + *(nXPS + i) = 0; + } + //Convolution + for (i = 0; i < 2*lenXPS; i++) { + for (j = 0; j < lenLPS; j++) { + *(nXPS+i+j) = *(nXPS+i+j) + *(tmp + i) * *(LPS + j); + //fprintf(stdout,"*(tmp + %d) * *(LPS + %d) = %f * %f \n",i,j,*(tmp + i),*(LPS + j)); + } + } + free(tmp); + return 2*lenXPS+lenLPS-1; +} + +static double dwt_calc_wtnorms(int orient, int level[3], int dwtid[3], opj_wtfilt_t *wtfiltX, opj_wtfilt_t *wtfiltY, opj_wtfilt_t *wtfiltZ) { + int i, lenLPS, lenHPS; + double Lx = 0, Ly= 0, Hx= 0, Hy= 0, Lz= 0, Hz= 0; + double *nLPSx, *nHPSx,*nLPSy, *nHPSy,*nLPSz, *nHPSz; + int levelx, levely, levelz; + + levelx = (orient == 0) ? level[0]-1 : level[0]; + levely = (orient == 0) ? level[1]-1 : level[1]; + levelz = (orient == 0) ? level[2]-1 : level[2]; + + //X axis + lenLPS = wtfiltX->lenLPS; + lenHPS = wtfiltX->lenHPS; + for (i = 0; i < levelx; i++) { + lenLPS *= 2; + lenHPS *= 2; + lenLPS += wtfiltX->lenLPS - 1; + lenHPS += wtfiltX->lenLPS - 1; + } + nLPSx = (double *)opj_malloc(lenLPS * sizeof(double)); + nHPSx = (double *)opj_malloc(lenHPS * sizeof(double)); + + memcpy(nLPSx, wtfiltX->LPS, wtfiltX->lenLPS * sizeof(double)); + memcpy(nHPSx, wtfiltX->HPS, wtfiltX->lenHPS * sizeof(double)); + lenLPS = wtfiltX->lenLPS; + lenHPS = wtfiltX->lenHPS; + for (i = 0; i < levelx; i++) { + lenLPS = upandconv(nLPSx, wtfiltX->LPS, lenLPS, wtfiltX->lenLPS); + lenHPS = upandconv(nHPSx, wtfiltX->LPS, lenHPS, wtfiltX->lenLPS); + } + for (i = 0; i < lenLPS; i++) + Lx += nLPSx[i] * nLPSx[i]; + for (i = 0; i < lenHPS; i++) + Hx += nHPSx[i] * nHPSx[i]; + Lx = sqrt(Lx); + Hx = sqrt(Hx); + free(nLPSx); + free(nHPSx); + + //Y axis + if (dwtid[0] != dwtid[1] || level[0] != level[1]){ + lenLPS = wtfiltY->lenLPS; + lenHPS = wtfiltY->lenHPS; + for (i = 0; i < levely; i++) { + lenLPS *= 2; + lenHPS *= 2; + lenLPS += wtfiltY->lenLPS - 1; + lenHPS += wtfiltY->lenLPS - 1; + } + nLPSy = (double *)opj_malloc(lenLPS * sizeof(double)); + nHPSy = (double *)opj_malloc(lenHPS * sizeof(double)); + + memcpy(nLPSy, wtfiltY->LPS, wtfiltY->lenLPS * sizeof(double)); + memcpy(nHPSy, wtfiltY->HPS, wtfiltY->lenHPS * sizeof(double)); + lenLPS = wtfiltY->lenLPS; + lenHPS = wtfiltY->lenHPS; + for (i = 0; i < levely; i++) { + lenLPS = upandconv(nLPSy, wtfiltY->LPS, lenLPS, wtfiltY->lenLPS); + lenHPS = upandconv(nHPSy, wtfiltY->LPS, lenHPS, wtfiltY->lenLPS); + } + for (i = 0; i < lenLPS; i++) + Ly += nLPSy[i] * nLPSy[i]; + for (i = 0; i < lenHPS; i++) + Hy += nHPSy[i] * nHPSy[i]; + Ly = sqrt(Ly); + Hy = sqrt(Hy); + free(nLPSy); + free(nHPSy); + } else { + Ly = Lx; + Hy = Hx; + } + //Z axis + if (levelz >= 0) { + lenLPS = wtfiltZ->lenLPS; + lenHPS = wtfiltZ->lenHPS; + for (i = 0; i < levelz; i++) { + lenLPS *= 2; + lenHPS *= 2; + lenLPS += wtfiltZ->lenLPS - 1; + lenHPS += wtfiltZ->lenLPS - 1; + } + nLPSz = (double *)opj_malloc(lenLPS * sizeof(double)); + nHPSz = (double *)opj_malloc(lenHPS * sizeof(double)); + + memcpy(nLPSz, wtfiltZ->LPS, wtfiltZ->lenLPS * sizeof(double)); + memcpy(nHPSz, wtfiltZ->HPS, wtfiltZ->lenHPS * sizeof(double)); + lenLPS = wtfiltZ->lenLPS; + lenHPS = wtfiltZ->lenHPS; + for (i = 0; i < levelz; i++) { + lenLPS = upandconv(nLPSz, wtfiltZ->LPS, lenLPS, wtfiltZ->lenLPS); + lenHPS = upandconv(nHPSz, wtfiltZ->LPS, lenHPS, wtfiltZ->lenLPS); + } + for (i = 0; i < lenLPS; i++) + Lz += nLPSz[i] * nLPSz[i]; + for (i = 0; i < lenHPS; i++) + Hz += nHPSz[i] * nHPSz[i]; + Lz = sqrt(Lz); + Hz = sqrt(Hz); + free(nLPSz); + free(nHPSz); + } else { + Lz = 1.0; Hz = 1.0; + } + switch (orient) { + case 0: + return Lx * Ly * Lz; + case 1: + return Lx * Hy * Lz; + case 2: + return Hx * Ly * Lz; + case 3: + return Hx * Hy * Lz; + case 4: + return Lx * Ly * Hz; + case 5: + return Lx * Hy * Hz; + case 6: + return Hx * Ly * Hz; + case 7: + return Hx * Hy * Hz; + default: + return -1; + } + +} +static void dwt_getwtfilters(opj_wtfilt_t *wtfilt, int dwtid) { + if (dwtid == 0) { //DWT 9-7 + wtfilt->lenLPS = 7; wtfilt->lenHPS = 9; + wtfilt->LPS = (double *)opj_malloc(wtfilt->lenLPS * sizeof(double)); + wtfilt->HPS = (double *)opj_malloc(wtfilt->lenHPS * sizeof(double)); + wtfilt->LPS[0] = -0.091271763114; wtfilt->HPS[0] = 0.026748757411; + wtfilt->LPS[1] = -0.057543526228; wtfilt->HPS[1] = 0.016864118443; + wtfilt->LPS[2] = 0.591271763114; wtfilt->HPS[2] = -0.078223266529; + wtfilt->LPS[3] = 1.115087052457; wtfilt->HPS[3] = -0.266864118443; + wtfilt->LPS[4] = 0.591271763114; wtfilt->HPS[4] = 0.602949018236; + wtfilt->LPS[5] = -0.057543526228; wtfilt->HPS[5] = -0.266864118443; + wtfilt->LPS[6] = -0.091271763114; wtfilt->HPS[6] = -0.078223266529; + wtfilt->HPS[7] = 0.016864118443; + wtfilt->HPS[8] = 0.026748757411; + } else if (dwtid == 1) { //DWT 5-3 + wtfilt->lenLPS = 3; wtfilt->lenHPS = 5; + wtfilt->LPS = (double *)opj_malloc(wtfilt->lenLPS * sizeof(double)); + wtfilt->HPS = (double *)opj_malloc(wtfilt->lenHPS * sizeof(double)); + wtfilt->LPS[0] = 0.5; wtfilt->HPS[0] = -0.125; + wtfilt->LPS[1] = 1; wtfilt->HPS[1] = -0.25; + wtfilt->LPS[2] = 0.5; wtfilt->HPS[2] = 0.75; + wtfilt->HPS[3] = -0.25; + wtfilt->HPS[4] = -0.125; + } else { + fprintf(stdout,"[ERROR] Sorry, this wavelet hasn't been implemented so far ... Try another one :-)\n"); + exit(1); + } +} +/* */ +/* Encoding of quantization stepsize for each subband. */ +/* */ +static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno_stepsize) { + int p, n; + p = int_floorlog2(stepsize) - 13; + n = 11 - int_floorlog2(stepsize); + bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff; + bandno_stepsize->expn = numbps - p; + //if J3D_CCP_QNTSTY_NOQNT --> stepsize = 8192.0 --> p = 0, n = -2 --> mant = 0; expn = (prec+gain) + //else --> bandno_stepsize = (1<<(numbps - expn)) + (1<<(numbps - expn - 11)) * Ub +} + +/* +========================================================== + DWT interface +========================================================== +*/ +/* */ +/* Forward 5-3 wavelet tranform in 3-D. */ +/* */ +void dwt_encode(opj_tcd_tilecomp_t * tilec, int dwtid[3]) { + int i, j, k; + int x, y, z; + int w, h, wh, d; + int level,levelx,levely,levelz,diff; + int *a = NULL; + int *aj = NULL; + int *bj = NULL; + int *cj = NULL; + + ops = 0; + + memset(flagnorm,0,8000*sizeof(int)); + w = tilec->x1-tilec->x0; + h = tilec->y1-tilec->y0; + d = tilec->z1-tilec->z0; + wh = w * h; + levelx = tilec->numresolution[0]-1; + levely = tilec->numresolution[1]-1; + levelz = tilec->numresolution[2]-1; + level = int_max(levelx,int_max(levely,levelz)); + diff = tilec->numresolution[0] - tilec->numresolution[2]; + + a = tilec->data; + + for (x = 0, y = 0, z = 0; (x < levelx) && (y < levely); x++, y++, z++) { + int rw; /* width of the resolution level computed */ + int rh; /* heigth of the resolution level computed */ + int rd; /* depth of the resolution level computed */ + int rw1; /* width of the resolution level once lower than computed one */ + int rh1; /* height of the resolution level once lower than computed one */ + int rd1; /* depth of the resolution level once lower than computed one */ + int cas_col; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */ + int cas_row; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering */ + int cas_axl; /* 0 = non inversion on axial filtering 1 = inversion between low-pass and high-pass filtering */ + int dn, sn; + + rw = tilec->resolutions[level - x].x1 - tilec->resolutions[level - x].x0; + rh = tilec->resolutions[level - y].y1 - tilec->resolutions[level - y].y0; + rd = tilec->resolutions[level - z].z1 - tilec->resolutions[level - z].z0; + rw1= tilec->resolutions[level - x - 1].x1 - tilec->resolutions[level - x - 1].x0; + rh1= tilec->resolutions[level - y - 1].y1 - tilec->resolutions[level - y - 1].y0; + rd1= tilec->resolutions[level - z - 1].z1 - tilec->resolutions[level - z - 1].z0; + + cas_col = tilec->resolutions[level - x].x0 % 2; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */ + cas_row = tilec->resolutions[level - y].y0 % 2; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering */ + cas_axl = tilec->resolutions[level - z].z0 % 2; + + /*fprintf(stdout," x %d y %d z %d \n",x,y,z); + fprintf(stdout," levelx %d levely %d levelz %d \n",levelx,levely,levelz); + fprintf(stdout," z1 %d z0 %d\n",tilec->resolutions[level - z].z1,tilec->resolutions[level - z].z0); + fprintf(stdout," rw %d rh %d rd %d \n rw1 %d rh1 %d rd1 %d \n",rw,rh,rd,rw1,rh1,rd1);*/ + + for (i = 0; i < rd; i++) { + + cj = a + (i * wh); + + //Horizontal + sn = rw1; + dn = rw - rw1; + bj = (int*)opj_malloc(rw * sizeof(int)); + if (dwtid[0] == 0) { + for (j = 0; j < rh; j++) { + aj = cj + j * w; + for (k = 0; k < rw; k++) bj[k] = aj[k]; + dwt_encode_97(bj, dn, sn, cas_row); + dwt_deinterleave_h(bj, aj, dn, sn, cas_row); + } + } else if (dwtid[0] == 1) { + for (j = 0; j < rh; j++) { + aj = cj + j * w; + for (k = 0; k < rw; k++) bj[k] = aj[k]; + dwt_encode_53(bj, dn, sn, cas_row); + dwt_deinterleave_h(bj, aj, dn, sn, cas_row); + } + } + opj_free(bj); + + //Vertical + sn = rh1; + dn = rh - rh1; + bj = (int*)opj_malloc(rh * sizeof(int)); + if (dwtid[1] == 0) { /*DWT 9-7*/ + for (j = 0; j < rw; j++) { + aj = cj + j; + for (k = 0; k < rh; k++) bj[k] = aj[k*w]; + dwt_encode_97(bj, dn, sn, cas_col); + dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col); + } + } else if (dwtid[1] == 1) { /*DWT 5-3*/ + for (j = 0; j < rw; j++) { + aj = cj + j; + for (k = 0; k < rh; k++) bj[k] = aj[k*w]; + dwt_encode_53(bj, dn, sn, cas_col); + dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col); + } + } + opj_free(bj); + } + + if (z < levelz){ + //Axial fprintf(stdout,"Axial DWT Transform %d %d %d\n",z,rd,rd1); + sn = rd1; + dn = rd - rd1; + bj = (int*)opj_malloc(rd * sizeof(int)); + if (dwtid[2] == 0) { + for (j = 0; j < (rw*rh); j++) { + aj = a + j; + for (k = 0; k < rd; k++) bj[k] = aj[k*wh]; + dwt_encode_97(bj, dn, sn, cas_axl); + dwt_deinterleave_z(bj, aj, dn, sn, wh, cas_axl); + } + } else if (dwtid[2] == 1) { + for (j = 0; j < (rw*rh); j++) { + aj = a + j; + for (k = 0; k < rd; k++) bj[k] = aj[k*wh]; + dwt_encode_53(bj, dn, sn, cas_axl); + dwt_deinterleave_z(bj, aj, dn, sn, wh, cas_axl); + } + } + opj_free(bj); + } + } + + //fprintf(stdout,"[INFO] Ops: %d \n",ops); +} + + +/* */ +/* Inverse 5-3 wavelet tranform in 3-D. */ +/* */ +void dwt_decode(opj_tcd_tilecomp_t * tilec, int stops[3], int dwtid[3]) { + int i, j, k; + int x, y, z; + int w, h, wh, d; + int level, levelx, levely, levelz, diff; + int *a = NULL; + int *aj = NULL; + int *bj = NULL; + int *cj = NULL; + + a = tilec->data; + + w = tilec->x1-tilec->x0; + h = tilec->y1-tilec->y0; + d = tilec->z1-tilec->z0; + wh = w * h; + levelx = tilec->numresolution[0]-1; + levely = tilec->numresolution[1]-1; + levelz = tilec->numresolution[2]-1; + level = int_max(levelx,int_max(levely,levelz)); + diff = tilec->numresolution[0] - tilec->numresolution[2]; + +/* General lifting framework -- DCCS-LIWT */ + for (x = level - 1, y = level - 1, z = level - 1; (x >= stops[0]) && (y >= stops[1]); x--, y--, z--) { + int rw; /* width of the resolution level computed */ + int rh; /* heigth of the resolution level computed */ + int rd; /* depth of the resolution level computed */ + int rw1; /* width of the resolution level once lower than computed one */ + int rh1; /* height of the resolution level once lower than computed one */ + int rd1; /* depth of the resolution level once lower than computed one */ + int cas_col; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */ + int cas_row; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering */ + int cas_axl; /* 0 = non inversion on axial filtering 1 = inversion between low-pass and high-pass filtering */ + int dn, sn; + + rw = tilec->resolutions[level - x].x1 - tilec->resolutions[level - x].x0; + rh = tilec->resolutions[level - y].y1 - tilec->resolutions[level - y].y0; + rd = tilec->resolutions[level - z].z1 - tilec->resolutions[level - z].z0; + rw1= tilec->resolutions[level - x - 1].x1 - tilec->resolutions[level - x - 1].x0; + rh1= tilec->resolutions[level - y - 1].y1 - tilec->resolutions[level - y - 1].y0; + rd1= tilec->resolutions[level - z - 1].z1 - tilec->resolutions[level - z - 1].z0; + + cas_col = tilec->resolutions[level - x].x0 % 2; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */ + cas_row = tilec->resolutions[level - y].y0 % 2; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering */ + cas_axl = tilec->resolutions[level - z].z0 % 2; + + /*fprintf(stdout," x %d y %d z %d \n",x,y,z); + fprintf(stdout," levelx %d levely %d levelz %d \n",levelx,levely,levelz); + fprintf(stdout," dwtid[0] %d [1] %d [2] %d \n",dwtid[0],dwtid[1],dwtid[2]); + fprintf(stdout," rw %d rh %d rd %d \n rw1 %d rh1 %d rd1 %d \n",rw,rh,rd,rw1,rh1,rd1); + fprintf(stdout,"IDWT Transform %d %d %d %d\n",level, z, rd,rd1);*/ + + if (z >= stops[2] && rd != rd1) { + //fprintf(stdout,"Axial Transform %d %d %d %d\n",levelz, z, rd,rd1); + sn = rd1; + dn = rd - rd1; + bj = (int*)opj_malloc(rd * sizeof(int)); + if (dwtid[2] == 0) { + for (j = 0; j < (rw*rh); j++) { + aj = a + j; + dwt_interleave_z(aj, bj, dn, sn, wh, cas_axl); + dwt_decode_97(bj, dn, sn, cas_axl); + for (k = 0; k < rd; k++) aj[k * wh] = bj[k]; + } + } else if (dwtid[2] == 1) { + for (j = 0; j < (rw*rh); j++) { + aj = a + j; + dwt_interleave_z(aj, bj, dn, sn, wh, cas_axl); + dwt_decode_53(bj, dn, sn, cas_axl); + for (k = 0; k < rd; k++) aj[k * wh] = bj[k]; + } + } + opj_free(bj); + } + + for (i = 0; i < rd; i++) { + //Fetch corresponding slice for doing DWT-2D + cj = tilec->data + (i * wh); + + //Vertical + sn = rh1; + dn = rh - rh1; + bj = (int*)opj_malloc(rh * sizeof(int)); + if (dwtid[1] == 0) { + for (j = 0; j < rw; j++) { + aj = cj + j; + dwt_interleave_v(aj, bj, dn, sn, w, cas_col); + dwt_decode_97(bj, dn, sn, cas_col); + for (k = 0; k < rh; k++) aj[k * w] = bj[k]; + } + } else if (dwtid[1] == 1) { + for (j = 0; j < rw; j++) { + aj = cj + j; + dwt_interleave_v(aj, bj, dn, sn, w, cas_col); + dwt_decode_53(bj, dn, sn, cas_col); + for (k = 0; k < rh; k++) aj[k * w] = bj[k]; + } + } + opj_free(bj); + + //Horizontal + sn = rw1; + dn = rw - rw1; + bj = (int*)opj_malloc(rw * sizeof(int)); + if (dwtid[0]==0) { + for (j = 0; j < rh; j++) { + aj = cj + j*w; + dwt_interleave_h(aj, bj, dn, sn, cas_row); + dwt_decode_97(bj, dn, sn, cas_row); + for (k = 0; k < rw; k++) aj[k] = bj[k]; + } + } else if (dwtid[0]==1) { + for (j = 0; j < rh; j++) { + aj = cj + j*w; + dwt_interleave_h(aj, bj, dn, sn, cas_row); + dwt_decode_53(bj, dn, sn, cas_row); + for (k = 0; k < rw; k++) aj[k] = bj[k]; + } + } + opj_free(bj); + + } + + } + +} + + +/* */ +/* Get gain of wavelet transform. */ +/* */ +int dwt_getgain(int orient, int reversible) { + if (reversible == 1) { + if (orient == 0) + return 0; + else if (orient == 1 || orient == 2 || orient == 4 ) + return 1; + else if (orient == 3 || orient == 5 || orient == 6 ) + return 2; + else + return 3; + } + //else if (reversible == 0){ + return 0; +} + +/* */ +/* Get norm of wavelet transform. */ +/* */ +double dwt_getnorm(int orient, int level[3], int dwtid[3]) { + int levelx = level[0]; + int levely = level[1]; + int levelz = (level[2] < 0) ? 0 : level[2]; + double norm; + + if (flagnorm[levelx][levely][levelz][orient] == 1) { + norm = dwt_norm[levelx][levely][levelz][orient]; + //fprintf(stdout,"[INFO] Level: %d %d %d Orient %d Dwt_norm: %f \n",level[0],level[1],level[2],orient,norm); + } else { + opj_wtfilt_t *wtfiltx =(opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t)); + opj_wtfilt_t *wtfilty =(opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t)); + opj_wtfilt_t *wtfiltz =(opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t)); + //Fetch equivalent filters for each dimension + dwt_getwtfilters(wtfiltx, dwtid[0]); + dwt_getwtfilters(wtfilty, dwtid[1]); + dwt_getwtfilters(wtfiltz, dwtid[2]); + //Calculate the corresponding norm + norm = dwt_calc_wtnorms(orient, level, dwtid, wtfiltx, wtfilty, wtfiltz); + //Save norm in array (no recalculation) + dwt_norm[levelx][levely][levelz][orient] = norm; + flagnorm[levelx][levely][levelz][orient] = 1; + //Free reserved space + opj_free(wtfiltx->LPS); opj_free(wtfilty->LPS); opj_free(wtfiltz->LPS); + opj_free(wtfiltx->HPS); opj_free(wtfilty->HPS); opj_free(wtfiltz->HPS); + opj_free(wtfiltx); opj_free(wtfilty); opj_free(wtfiltz); + //fprintf(stdout,"[INFO] Dwtid: %d %d %d Level: %d %d %d Orient %d Norm: %f \n",dwtid[0],dwtid[1],dwtid[2],level[0],level[1],level[2],orient,norm); + } + return norm; +} +/* */ +/* Calculate explicit stepsizes for DWT. */ +/* */ +void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec) { + int totnumbands, bandno, diff; + + assert(tccp->numresolution[0] >= tccp->numresolution[2]); + diff = tccp->numresolution[0] - tccp->numresolution[2]; /*if RESx=RESy != RESz */ + totnumbands = (7 * tccp->numresolution[0] - 6) - 4 * diff; /* 3-D */ + + for (bandno = 0; bandno < totnumbands; bandno++) { + double stepsize; + int resno, level[3], orient, gain; + + /* Bandno: 0 - LLL 1 - LHL + 2 - HLL 3 - HHL + 4 - LLH 5 - LHH + 6 - HLH 7 - HHH */ + + resno = (bandno == 0) ? 0 : ( (bandno <= 3 * diff) ? ((bandno - 1) / 3 + 1) : ((bandno + 4*diff - 1) / 7 + 1)); + orient = (bandno == 0) ? 0 : ( (bandno <= 3 * diff) ? ((bandno - 1) % 3 + 1) : ((bandno + 4*diff - 1) % 7 + 1)); + level[0] = tccp->numresolution[0] - 1 - resno; + level[1] = tccp->numresolution[1] - 1 - resno; + level[2] = tccp->numresolution[2] - 1 - resno; + + /* Gain: 0 - LLL 1 - LHL + 1 - HLL 2 - HHL + 1 - LLH 2 - LHH + 2 - HLH 3 - HHH */ + gain = (tccp->reversible == 0) ? 0 : ( (orient == 0) ? 0 : + ( ((orient == 1) || (orient == 2) || (orient == 4)) ? 1 : + (((orient == 3) || (orient == 5) || (orient == 6)) ? 2 : 3)) ); + + if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) { + stepsize = 1.0; + } else { + double norm = dwt_getnorm(orient,level,tccp->dwtid); //Fetch norms if irreversible transform (by the moment only I9.7) + stepsize = (1 << (gain + 1)) / norm; + } + //fprintf(stdout,"[INFO] Bandno: %d Orient: %d Level: %d %d %d Stepsize: %f\n",bandno,orient,level[0],level[1],level[2],stepsize); + dwt_encode_stepsize((int) floor(stepsize * 8192.0), prec + gain, &tccp->stepsizes[bandno]); + } +} + + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/dwt.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/dwt.h new file mode 100755 index 0000000000..afb1ba4f78 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/dwt.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyrigth (c) 2006, Mónica Díez, LPI-UVA, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __DWT_H +#define __DWT_H +/** +@file dwt.h +@brief Implementation of a discrete wavelet transform (DWT) + +The functions in DWT.C have for goal to realize forward and inverse discret wavelet +transform with filter 5-3 (reversible) and filter 9-7 (irreversible). The functions in +DWT.C are used by some function in TCD.C. +*/ + +/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */ +/*@{*/ + +/** +DCCS-LIWT properties +*/ + + +typedef struct opj_wtfilt { + double *LPS; + int lenLPS; + double *HPS; + int lenHPS; +} opj_wtfilt_t; +/** @name Funciones generales */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Forward 5-3 wavelet tranform in 3-D. +Apply a reversible DWT transform to a component of an volume. +@param tilec Tile component information (current tile) +@param dwtid Number of identification of wavelet kernel(s) used in DWT in each direction +*/ +void dwt_encode(opj_tcd_tilecomp_t * tilec, int dwtid[3]); +/** +Inverse 5-3 wavelet tranform in 3-D. +Apply a reversible inverse DWT transform to a component of an volume. +@param tilec Tile component information (current tile) +@param stops Number of decoded resolution levels in each dimension +@param dwtid Number of identification of wavelet kernel(s) used in DWT in each dimension +*/ +void dwt_decode(opj_tcd_tilecomp_t * tilec, int stops[3], int dwtid[3]); +/* ----------------------------------------------------------------------- */ +/** +Get the gain of a subband for the reversible 3-D DWT. +@param orient Number that identifies the subband (0->LLL, 1->HLL, 2->LHL, 3->HHL, 4->LLH, 5->HLH, 6->LHH, 7->HHH) +@param reversible Wavelet transformation type +@return Returns 0 if orient = 0, returns 1 if orient = 1,2 or 4, returns 2 if orient = 3,5 or 6, returns 3 otherwise +*/ +int dwt_getgain(int orient, int reversible); +/** +Get the norm of a wavelet function of a subband at a specified level for the reversible 5-3 DWT or irreversible 9-7 in 3-D. +@param orient Band of the wavelet function +@param level Levels of the wavelet function in X,Y,Z axis +@param dwtid Wavelet transformation identifier +@return Returns the norm of the wavelet function +*/ +double dwt_getnorm(int orient, int level[3], int dwtid[3]); +/* ----------------------------------------------------------------------- */ +/** +Calcula el valor del escalón de cuantificación correspondiente a cada subbanda. +@param tccp Tile component coding parameters +@param prec Precision of data +*/ +void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec); +/*@}*/ + +#endif /* __DWT_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/event.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/event.c new file mode 100755 index 0000000000..c558218c60 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/event.c @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +// ========================================================== +// Utility functions +// ========================================================== + +#ifndef _WIN32 +static char* +i2a(unsigned i, char *a, unsigned r) { + if (i/r > 0) a = i2a(i/r,a,r); + *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r]; + return a+1; +} + +/** + Transforms integer i into an ascii string and stores the result in a; + string is encoded in the base indicated by r. + @param i Number to be converted + @param a String result + @param r Base of value; must be in the range 2 - 36 + @return Returns a +*/ +static char * +_itoa(int i, char *a, int r) { + r = ((r < 2) || (r > 36)) ? 10 : r; + if(i < 0) { + *a = '-'; + *i2a(-i, a+1, r) = 0; + } + else *i2a(i, a, r) = 0; + return a; +} + +#endif // !_WIN32 + +/* ----------------------------------------------------------------------- */ + +opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) { + if(cinfo) { + opj_event_mgr_t *previous = cinfo->event_mgr; + cinfo->event_mgr = event_mgr; + cinfo->client_data = context; + return previous; + } + + return NULL; +} + +bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) { +#define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */ + opj_msg_callback msg_handler = NULL; + + opj_event_mgr_t *event_mgr = cinfo->event_mgr; + if(event_mgr != NULL) { + switch(event_type) { + case EVT_ERROR: + msg_handler = event_mgr->error_handler; + break; + case EVT_WARNING: + msg_handler = event_mgr->warning_handler; + break; + case EVT_INFO: + msg_handler = event_mgr->info_handler; + break; + default: + break; + } + if(msg_handler == NULL) { + return false; + } + } else { + return false; + } + + if ((fmt != NULL) && (event_mgr != NULL)) { + va_list arg; + int str_length, i, j; + char message[MSG_SIZE]; + memset(message, 0, MSG_SIZE); + /* initialize the optional parameter list */ + va_start(arg, fmt); + /* check the length of the format string */ + str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt); + /* parse the format string and put the result in 'message' */ + for (i = 0, j = 0; i < str_length; ++i) { + if (fmt[i] == '%') { + if (i + 1 < str_length) { + switch(tolower(fmt[i + 1])) { + case '%' : + message[j++] = '%'; + break; + case 'o' : /* octal numbers */ + { + char tmp[16]; + _itoa(va_arg(arg, int), tmp, 8); + strcat(message, tmp); + j += strlen(tmp); + ++i; + break; + } + case 'i' : /* decimal numbers */ + case 'd' : + { + char tmp[16]; + _itoa(va_arg(arg, int), tmp, 10); + strcat(message, tmp); + j += strlen(tmp); + ++i; + break; + } + case 'x' : /* hexadecimal numbers */ + { + char tmp[16]; + _itoa(va_arg(arg, int), tmp, 16); + strcat(message, tmp); + j += strlen(tmp); + ++i; + break; + } + case 's' : /* strings */ + { + char *tmp = va_arg(arg, char*); + strcat(message, tmp); + j += strlen(tmp); + ++i; + break; + } + case 'f' : /* floats */ + { + char tmp[16]; + double value = va_arg(arg, double); + sprintf(tmp, "%f", value); + strcat(message, tmp); + j += strlen(tmp); + ++i; + break; + } + }; + } else { + message[j++] = fmt[i]; + } + } else { + message[j++] = fmt[i]; + }; + } + /* deinitialize the optional parameter list */ + va_end(arg); + + /* output the message to the user program */ + msg_handler(message, cinfo->client_data); + } + + return true; +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/event.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/event.h new file mode 100755 index 0000000000..5a83bd266f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/event.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __EVENT_H +#define __EVENT_H +/** +@file event.h +@brief Implementation of a event callback system + +The functions in EVENT.C have for goal to send output messages (errors, warnings, debug) to the user. +*/ + +#define EVT_ERROR 1 /**< Error event type */ +#define EVT_WARNING 2 /**< Warning event type */ +#define EVT_INFO 4 /**< Debug event type */ + +/** @defgroup EVENT EVENT - Implementation of a event callback system */ +/*@{*/ + +/** @name Funciones generales (see also openjpeg3d.h) */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Write formatted data to a string and send the string to a user callback. +@param cinfo Codec context info +@param event_type Event type or callback to use to send the message +@param fmt Format-control string (plus optionnal arguments) +@return Returns true if successful, returns false otherwise +*/ +bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __EVENT_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/fix.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/fix.h new file mode 100755 index 0000000000..f2113b5ab3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/fix.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __FIX_H +#define __FIX_H + +#if defined(_MSC_VER) || defined(__BORLANDC__) +#define int64 __int64 +#else +#define int64 long long +#endif + +/** +@file fix.h +@brief Implementation of operations of specific multiplication (FIX) + +The functions in FIX.H have for goal to realize specific multiplication. +*/ + +/** @defgroup FIX FIX - Implementation of operations of specific multiplication */ +/*@{*/ + +/** +Multiply two fixed-precision rational numbers. +@param a +@param b +@return Returns a * b +*/ +static int fix_mul(int a, int b) { + int64 temp = (int64) a * (int64) b >> 12; + return (int) ((temp >> 1) + (temp & 1)) ; +} + +/*@}*/ + +#endif /* __FIX_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/int.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/int.h new file mode 100755 index 0000000000..38932d98f7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/int.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __INT_H +#define __INT_H +/** +@file int.h +@brief Implementation of operations on integers (INT) + +The functions in INT.H have for goal to realize operations on integers. +*/ + +/** @defgroup INT INT - Implementation of operations on integers */ +/*@{*/ + +/** @name Funciones generales (see also openjpeg3d.h) */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Get the minimum of two integers +@return Returns a if a < b else b +*/ +static int int_min(int a, int b) { + return a < b ? a : b; +} +/** +Get the maximum of two integers +@return Returns a if a > b else b +*/ +static int int_max(int a, int b) { + return (a > b) ? a : b; +} +/** +Clamp an integer inside an interval +@return +
    +
  • Returns a if (min < a < max) +
  • Returns max if (a > max) +
  • Returns min if (a < min) +
+*/ +static int int_clamp(int a, int min, int max) { + if (a < min) + return min; + if (a > max) + return max; + return a; +} +/** +@return Get absolute value of integer +*/ +static int int_abs(int a) { + return a < 0 ? -a : a; +} + +static double dbl_abs(double a) { + return a < 0 ? -a : a; +} +/** +Divide an integer and round upwards +@return Returns a divided by b +*/ +static int int_ceildiv(int a, int b) { + return (a + b - 1) / b; +} +/** +Divide an integer by a power of 2 and round upwards +@return Returns a divided by 2^b +*/ +static int int_ceildivpow2(int a, int b) { + return (a + (1 << b) - 1) >> b; +} +/** +Divide an integer by a power of 2 and round downwards +@return Returns a divided by 2^b +*/ +static int int_floordivpow2(int a, int b) { + return a >> b; +} +/** +Get logarithm of an integer and round downwards +@return Returns log2(a) +*/ +static int int_floorlog2(int a) { + int l; + for (l = 0; a > 1; l++) { + a >>= 1; + } + return l; +} +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d.c new file mode 100755 index 0000000000..4a5527b7b5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d.c @@ -0,0 +1,2328 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup J3D J3D - JPEG-2000 PART 10 codestream reader/writer */ +/*@{*/ + +/** @name Funciones locales */ +/*@{*/ + +/** +Write the SOC marker (Start Of Codestream) +@param j3d J3D handle +*/ +static void j3d_write_soc(opj_j3d_t *j3d); +/** +Read the SOC marker (Start of Codestream) +@param j3d J3D handle +*/ +static void j3d_read_soc(opj_j3d_t *j3d); +/** +Write the SIZ marker (2D volume and tile size) +@param j3d J3D handle +*/ +static void j3d_write_siz(opj_j3d_t *j3d); +/** +Read the SIZ marker (2D volume and tile size) +@param j3d J3D handle +*/ +static void j3d_read_siz(opj_j3d_t *j3d); +/** +Write the ZSI marker (3rd volume and tile size) +@param j3d J3D handle +*/ +static void j3d_write_zsi(opj_j3d_t *j3d); +/** +Read the ZSI marker (3rd volume and tile size) +@param j3d J3D handle +*/ +static void j3d_read_zsi(opj_j3d_t *j3d); +/** +Write the COM marker (comment) +@param j3d J3D handle +*/ +static void j3d_write_com(opj_j3d_t *j3d); +/** +Read the COM marker (comment) +@param j3d J3D handle +*/ +static void j3d_read_com(opj_j3d_t *j3d); +/** +Write the value concerning the specified component in the marker COD and COC +@param j3d J3D handle +@param compno Number of the component concerned by the information written +*/ +static void j3d_write_cox(opj_j3d_t *j3d, int compno); +/** +Read the value concerning the specified component in the marker COD and COC +@param j3d J3D handle +@param compno Number of the component concerned by the information read +*/ +static void j3d_read_cox(opj_j3d_t *j3d, int compno); +/** +Write the COD marker (coding style default) +@param j3d J3D handle +*/ +static void j3d_write_cod(opj_j3d_t *j3d); +/** +Read the COD marker (coding style default) +@param j3d J3D handle +*/ +static void j3d_read_cod(opj_j3d_t *j3d); +/** +Write the COC marker (coding style component) +@param j3d J3D handle +@param compno Number of the component concerned by the information written +*/ +static void j3d_write_coc(opj_j3d_t *j3d, int compno); +/** +Read the COC marker (coding style component) +@param j3d J3D handle +*/ +static void j3d_read_coc(opj_j3d_t *j3d); +/** +Write the value concerning the specified component in the marker QCD and QCC +@param j3d J3D handle +@param compno Number of the component concerned by the information written +*/ +static void j3d_write_qcx(opj_j3d_t *j3d, int compno); +/** +Read the value concerning the specified component in the marker QCD and QCC +@param j3d J3D handle +@param compno Number of the component concern by the information read +@param len Length of the information in the QCX part of the marker QCD/QCC +*/ +static void j3d_read_qcx(opj_j3d_t *j3d, int compno, int len); +/** +Write the QCD marker (quantization default) +@param j3d J3D handle +*/ +static void j3d_write_qcd(opj_j3d_t *j3d); +/** +Read the QCD marker (quantization default) +@param j3d J3D handle +*/ +static void j3d_read_qcd(opj_j3d_t *j3d); +/** +Write the QCC marker (quantization component) +@param j3d J3D handle +@param compno Number of the component concerned by the information written +*/ +static void j3d_write_qcc(opj_j3d_t *j3d, int compno); +/** +Read the QCC marker (quantization component) +@param j3d J3D handle +*/ +static void j3d_read_qcc(opj_j3d_t *j3d); +/** +Write the POC marker (progression order change) +@param j3d J3D handle +*/ +static void j3d_write_poc(opj_j3d_t *j3d); +/** +Read the POC marker (progression order change) +@param j3d J3D handle +*/ +static void j3d_read_poc(opj_j3d_t *j3d); +/** +Read the CRG marker (component registration) +@param j3d J3D handle +*/ +static void j3d_read_crg(opj_j3d_t *j3d); +/** +Read the TLM marker (tile-part lengths) +@param j3d J3D handle +*/ +static void j3d_read_tlm(opj_j3d_t *j3d); +/** +Read the PLM marker (packet length, main header) +@param j3d J3D handle +*/ +static void j3d_read_plm(opj_j3d_t *j3d); +/** +Read the PLT marker (packet length, tile-part header) +@param j3d J3D handle +*/ +static void j3d_read_plt(opj_j3d_t *j3d); +/** +Read the PPM marker (packet packet headers, main header) +@param j3d J3D handle +*/ +static void j3d_read_ppm(opj_j3d_t *j3d); +/** +Read the PPT marker (packet packet headers, tile-part header) +@param j3d J3D handle +*/ +static void j3d_read_ppt(opj_j3d_t *j3d); +/** +Write the SOT marker (start of tile-part) +@param j3d J3D handle +*/ +static void j3d_write_sot(opj_j3d_t *j3d); +/** +Read the SOT marker (start of tile-part) +@param j3d J3D handle +*/ +static void j3d_read_sot(opj_j3d_t *j3d); +/** +Write the SOD marker (start of data) +@param j3d J3D handle +@param tile_coder Pointer to a TCD handle +*/ +static void j3d_write_sod(opj_j3d_t *j3d, void *tile_coder); +/** +Read the SOD marker (start of data) +@param j3d J3D handle +*/ +static void j3d_read_sod(opj_j3d_t *j3d); +/** +Write the RGN marker (region-of-interest) +@param j3d J3D handle +@param compno Number of the component concerned by the information written +@param tileno Number of the tile concerned by the information written +*/ +static void j3d_write_rgn(opj_j3d_t *j3d, int compno, int tileno); +/** +Read the RGN marker (region-of-interest) +@param j3d J3D handle +*/ +static void j3d_read_rgn(opj_j3d_t *j3d); +/** +Write the EOC marker (end of codestream) +@param j3d J3D handle +*/ +static void j3d_write_eoc(opj_j3d_t *j3d); +/** +Read the EOC marker (end of codestream) +@param j3d J3D handle +*/ +static void j3d_read_eoc(opj_j3d_t *j3d); +/** +Read an unknown marker +@param j3d J3D handle +*/ +static void j3d_read_unk(opj_j3d_t *j3d); +/** +Write the CAP marker (extended capabilities) +@param j3d J3D handle +*/ +static void j3d_write_cap(opj_j3d_t *j3d); +/** +Read the CAP marker (extended capabilities) +@param j3d J3D handle +*/ +static void j3d_read_cap(opj_j3d_t *j3d); +/** +Write the DCO marker (Variable DC offset) +@param j3d J3D handle +*/ +static void j3d_write_dco(opj_j3d_t *j3d); +/** +Read the DCO marker (Variable DC offset) +@param j3d J3D handle +*/ +static void j3d_read_dco(opj_j3d_t *j3d); +/** +Write the ATK marker (arbitrary transformation kernel) +@param j3d J3D handle +*/ +static void j3d_write_atk(opj_j3d_t *j3d); +/** +Read the ATK marker (arbitrary transformation kernel) +@param j3d J3D handle +*/ +static void j3d_read_atk(opj_j3d_t *j3d); +/** +Write the CBD marker (component bit depth definition) +@param j3d J3D handle +*/ +static void j3d_write_cbd(opj_j3d_t *j3d); +/** +Read the CBD marker (component bit depth definition) +@param j3d J3D handle +*/ +static void j3d_read_cbd(opj_j3d_t *j3d); +/** +Write the MCT marker (multiple component transfomation definition) +@param j3d J3D handle +*/ +static void j3d_write_mct(opj_j3d_t *j3d); +/** +Read the MCT marker (multiple component transfomation definition) +@param j3d J3D handle +*/ +static void j3d_read_mct(opj_j3d_t *j3d); +/** +Write the MCC marker (multiple component transfomation collection) +@param j3d J3D handle +*/ +static void j3d_write_mcc(opj_j3d_t *j3d); +/** +Read the MCC marker (multiple component transfomation collection) +@param j3d J3D handle +*/ +static void j3d_read_mcc(opj_j3d_t *j3d); +/** +Write the MCO marker (multiple component transfomation ordering) +@param j3d J3D handle +*/ +static void j3d_write_mco(opj_j3d_t *j3d); +/** +Read the MCO marker (multiple component transfomation ordering) +@param j3d J3D handle +*/ +static void j3d_read_mco(opj_j3d_t *j3d); +/** +Write the NLT marker (non-linearity point transformation) +@param j3d J3D handle +*/ +static void j3d_write_nlt(opj_j3d_t *j3d); +/** +Read the NLT marker (non-linearity point transformation) +@param j3d J3D handle +*/ +static void j3d_read_nlt(opj_j3d_t *j3d); +/*@}*/ + +/* ----------------------------------------------------------------------- */ + +void j3d_dump_volume(FILE *fd, opj_volume_t * vol) { + int compno; + fprintf(fd, "volume {\n"); + fprintf(fd, " x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", vol->x0, vol->y0, vol->z0,vol->x1, vol->y1, vol->z1); + fprintf(fd, " numcomps=%d\n", vol->numcomps); + for (compno = 0; compno < vol->numcomps; compno++) { + opj_volume_comp_t *comp = &vol->comps[compno]; + fprintf(fd, " comp %d {\n", compno); + fprintf(fd, " dx=%d, dy=%d, dz=%d\n", comp->dx, comp->dy, comp->dz); + fprintf(fd, " prec=%d\n", comp->prec); + fprintf(fd, " sgnd=%d\n", comp->sgnd); + fprintf(fd, " }\n"); + } + fprintf(fd, "}\n"); +} + +void j3d_dump_cp(FILE *fd, opj_volume_t * vol, opj_cp_t * cp) { + int tileno, compno, layno, bandno, resno, numbands; + fprintf(fd, "coding parameters {\n"); + fprintf(fd, " tx0=%d, ty0=%d, tz0=%d\n", cp->tx0, cp->ty0, cp->tz0); + fprintf(fd, " tdx=%d, tdy=%d, tdz=%d\n", cp->tdx, cp->tdy, cp->tdz); + fprintf(fd, " tw=%d, th=%d, tl=%d\n", cp->tw, cp->th, cp->tl); + fprintf(fd, " transform format: %d\n", cp->transform_format); + fprintf(fd, " encoding format: %d\n", cp->encoding_format); + for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) { + opj_tcp_t *tcp = &cp->tcps[tileno]; + fprintf(fd, " tile %d {\n", tileno); + fprintf(fd, " csty=%x\n", tcp->csty); + fprintf(fd, " prg=%d\n", tcp->prg); + fprintf(fd, " numlayers=%d\n", tcp->numlayers); + fprintf(fd, " mct=%d\n", tcp->mct); + fprintf(fd, " rates="); + for (layno = 0; layno < tcp->numlayers; layno++) { + fprintf(fd, "%f ", tcp->rates[layno]); + } + fprintf(fd, "\n"); + fprintf(fd, " first=%d\n", tcp->first); + for (compno = 0; compno < vol->numcomps; compno++) { + opj_tccp_t *tccp = &tcp->tccps[compno]; + fprintf(fd, " comp %d {\n", compno); + fprintf(fd, " csty=%x\n", tccp->csty); + fprintf(fd, " numresx=%d, numresy=%d, numresz=%d\n", tccp->numresolution[0], tccp->numresolution[1], tccp->numresolution[2]); + fprintf(fd, " cblkw=%d, cblkh=%d, cblkl=%d\n", tccp->cblk[0], tccp->cblk[1], tccp->cblk[2]); + fprintf(fd, " cblksty=%x\n", tccp->cblksty); + fprintf(fd, " qntsty=%d\n", tccp->qntsty); + fprintf(fd, " numgbits=%d\n", tccp->numgbits); + fprintf(fd, " roishift=%d\n", tccp->roishift); + fprintf(fd, " reversible=%d\n", tccp->reversible); + fprintf(fd, " dwtidx=%d dwtidy=%d dwtidz=%d\n", tccp->dwtid[0], tccp->dwtid[1], tccp->dwtid[2]); + if (tccp->atk != NULL) { + fprintf(fd, " atk.index=%d\n", tccp->atk->index); + fprintf(fd, " atk.coeff_typ=%d\n", tccp->atk->coeff_typ); + fprintf(fd, " atk.filt_cat=%d\n", tccp->atk->filt_cat); + fprintf(fd, " atk.exten=%d\n", tccp->atk->exten); + fprintf(fd, " atk.minit=%d\n", tccp->atk->minit); + fprintf(fd, " atk.wt_typ=%d\n", tccp->atk->wt_typ); + } + fprintf(fd, " stepsizes of bands="); + numbands = (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) ? 1 : + ( (cp->transform_format == TRF_2D_DWT) ? (tccp->numresolution[0] * 3 - 2) : + (tccp->numresolution[0] * 7 - 6) - 4 *(tccp->numresolution[0] - tccp->numresolution[2]) ); + for (bandno = 0; bandno < numbands; bandno++) { + fprintf(fd, "(%d,%d) ", tccp->stepsizes[bandno].mant,tccp->stepsizes[bandno].expn); + } + fprintf(fd, "\n"); + + if (tccp->csty & J3D_CCP_CSTY_PRT) { + fprintf(fd, " prcw="); + for (resno = 0; resno < tccp->numresolution[0]; resno++) { + fprintf(fd, "%d ", tccp->prctsiz[0][resno]); + } + fprintf(fd, "\n"); + fprintf(fd, " prch="); + for (resno = 0; resno < tccp->numresolution[0]; resno++) { + fprintf(fd, "%d ", tccp->prctsiz[1][resno]); + } + fprintf(fd, "\n"); + fprintf(fd, " prcl="); + for (resno = 0; resno < tccp->numresolution[0]; resno++) { + fprintf(fd, "%d ", tccp->prctsiz[2][resno]); + } + fprintf(fd, "\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, "}\n"); +} + +/* ----------------------------------------------------------------------- +Extended capabilities +------------------------------------------------------------------------*/ + +static void j3d_write_cap(opj_j3d_t *j3d){ + int len,lenp; + + opj_cio_t *cio = j3d->cio; + cio_write(cio, J3D_MS_CAP, 2); /* CAP */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + cio_write(cio,J3D_CAP_10, 4); + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lsiz */ + cio_seek(cio, lenp + len); + +} +static void j3d_read_cap(opj_j3d_t *j3d){ + int len, Cap; + opj_cio_t *cio = j3d->cio; + /*cio_read(cio, 2); CAP */ + len = cio_read(cio, 2); + Cap = cio_read(cio, 4); +} +static void j3d_write_zsi(opj_j3d_t *j3d) { + int i; + int lenp, len; + + opj_cio_t *cio = j3d->cio; + opj_volume_t *volume = j3d->volume; + opj_cp_t *cp = j3d->cp; + + cio_write(cio, J3D_MS_ZSI, 2); /* ZSI */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + cio_write(cio, volume->z1, 4); /* Zsiz */ + cio_write(cio, volume->z0, 4); /* Z0siz */ + cio_write(cio, cp->tdz, 4); /* ZTsiz */ + cio_write(cio, cp->tz0, 4); /* ZT0siz */ + for (i = 0; i < volume->numcomps; i++) { + cio_write(cio, volume->comps[i].dz, 1); /* ZRsiz_i */ + } + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lsiz */ + cio_seek(cio, lenp + len); +} + +static void j3d_read_zsi(opj_j3d_t *j3d) { + int len, i; + + opj_cio_t *cio = j3d->cio; + opj_volume_t *volume = j3d->volume; + opj_cp_t *cp = j3d->cp; + + len = cio_read(cio, 2); /* Lsiz */ + volume->z1 = cio_read(cio, 4); /* Zsiz */ + volume->z0 = cio_read(cio, 4); /* Z0siz */ + cp->tdz = cio_read(cio, 4); /* ZTsiz */ + cp->tz0 = cio_read(cio, 4); /* ZT0siz */ + for (i = 0; i < volume->numcomps; i++) { + volume->comps[i].dz = cio_read(cio, 1); /* ZRsiz_i */ + } + + //Initialization of volume + cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx); + cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy); + cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz); + cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(opj_tcp_t)); + cp->tileno = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int)); + cp->tileno_size = 0; + + for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) { + cp->tcps[i].POC = 0; + cp->tcps[i].numpocs = 0; + cp->tcps[i].first = 1; + } + + /* Initialization for PPM marker (Packets header)*/ + cp->ppm = 0; + cp->ppm_data = NULL; + cp->ppm_data_first = NULL; + cp->ppm_previous = 0; + cp->ppm_store = 0; + + j3d->default_tcp->tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) * volume->numcomps); + for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) { + cp->tcps[i].tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) * volume->numcomps); + } + j3d->tile_data = (unsigned char **) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(unsigned char *)); + j3d->tile_len = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int)); + j3d->state = J3D_STATE_MH; + +} +static void j3d_write_dco(opj_j3d_t *j3d){ + int lenp, len, i; + int dcotype; + + opj_cio_t *cio = j3d->cio; + opj_volume_t *volume = j3d->volume; + opj_cp_t *cp = j3d->cp; + + dcotype = 1; /* Offsets are 16bit signed integers Table A21 15444-2 */ + cio_write(cio, J3D_MS_DCO, 2); /* DCO */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + cio_write(cio, dcotype, 1); + if (dcotype == 0) { + for (i = 0; i < volume->numcomps; i++) + cio_write(cio, volume->comps[i].dcoffset, 1); /* SPdco_i */ + } else if (dcotype == 1) { + for (i = 0; i < volume->numcomps; i++){ + cio_write(cio, volume->comps[i].dcoffset, 1); /* SPdco_i */ + opj_event_msg(j3d->cinfo, EVT_INFO, "dcotype %d DCO %d \n",dcotype,volume->comps[i].dcoffset); + } + } + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Ldco */ + cio_seek(cio, lenp + len); + +} +static void j3d_read_dco(opj_j3d_t *j3d){ + int len, i; + int dcotype; + + opj_cio_t *cio = j3d->cio; + opj_volume_t *volume = j3d->volume; + opj_cp_t *cp = j3d->cp; + + len = cio_read(cio, 2); /* Lsiz */ + dcotype = cio_read(cio, 1); //offset 8bit unsigned / 16bit signed integers + if (dcotype == 0) { + for (i = 0; i < volume->numcomps; i++) { + volume->comps[i].dcoffset = cio_read(cio, 1); + if (volume->comps[i].dcoffset > 128) + volume->comps[i].dcoffset = volume->comps[i].dcoffset - 256; + } + } else if (dcotype == 1) { + for (i = 0; i < volume->numcomps; i++) { + volume->comps[i].dcoffset = cio_read(cio, 1); + if (volume->comps[i].dcoffset > 128) + volume->comps[i].dcoffset = volume->comps[i].dcoffset - 256; + } + } + +} +static void j3d_write_atk(opj_j3d_t *j3d){ + int lenp, len, s, k; + + opj_cio_t *cio = j3d->cio; + opj_volume_t *volume = j3d->volume; + opj_atk_t *atk = j3d->cp->tcps->tccps->atk; + + cio_write(cio, J3D_MS_ATK, 2); /* ATK */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + cio_write(cio, atk->index + (atk->coeff_typ << 8) + (atk->filt_cat << 11) + + (atk->wt_typ << 12) + (atk->minit << 13) + (atk->exten << 14), 2); /* Satk */ + if (atk->wt_typ == J3D_ATK_IRR) + cio_write(cio,(unsigned int) (atk->Katk * 8192.0), 1 << atk->coeff_typ); + cio_write(cio, atk->Natk, 1); + for (s = 0; s < atk->Natk; s++){ + if (atk->filt_cat == J3D_ATK_ARB) + cio_write(cio, atk->Oatk[s], 1); + if (atk->wt_typ == J3D_ATK_REV){ + cio_write(cio, atk->Eatk[s], 1); + cio_write(cio, atk->Batk[s], 1); + } + cio_write(cio, atk->LCatk[s], 1); + for (k = 0; k < atk->LCatk[s]; k++) + cio_write(cio,(unsigned int) (atk->Aatk[s][k] * 8192.0), 1 << atk->coeff_typ); + } + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Latk */ + cio_seek(cio, lenp + len); +} +static void j3d_read_atk(opj_j3d_t *j3d){ + int len, i, Satk, k; + + opj_cio_t *cio = j3d->cio; + opj_volume_t *volume = j3d->volume; + opj_cp_t *cp = j3d->cp; + opj_atk_t *atk = cp->tcps->tccps->atk; + + len = cio_read(cio, 2); /* Latk */ + Satk = cio_read(cio, 2); + atk->index = Satk & 0x00ff; + atk->coeff_typ = Satk >> 8 & 0x0007; + atk->filt_cat = Satk >> 11 & 0x0001; + atk->wt_typ = Satk >> 12 & 0x0001; + atk->minit = Satk >> 13 & 0x0001; + atk->exten = Satk >> 14 & 0x0001; + if (atk->wt_typ == J3D_ATK_IRR) + atk->Katk = ((double) cio_read(cio, 1 << atk->coeff_typ) / 8192.0); + atk->Natk = cio_read(cio, 1); + for (i = 0; i < atk->Natk; i++) { + if (atk->filt_cat == J3D_ATK_ARB) + atk->Oatk[i] = cio_read(cio, 1); + if (atk->wt_typ == J3D_ATK_REV){ + atk->Eatk[i] = cio_read(cio, 1); + atk->Batk[i] = cio_read(cio, 1); + } + atk->LCatk[i] = cio_read(cio, 1); + for (k = 0; k < atk->LCatk[i]; k++) + atk->Aatk[i][k] = ((double) cio_read(cio, 1 << atk->coeff_typ) / 8192.0); + } +} +static void j3d_write_cbd(opj_j3d_t *j3d){ +} +static void j3d_read_cbd(opj_j3d_t *j3d){ +} +static void j3d_write_mct(opj_j3d_t *j3d){ +} +static void j3d_read_mct(opj_j3d_t *j3d){ +} +static void j3d_write_mcc(opj_j3d_t *j3d){ +} +static void j3d_read_mcc(opj_j3d_t *j3d){ +} +static void j3d_write_mco(opj_j3d_t *j3d){ +} +static void j3d_read_mco(opj_j3d_t *j3d){ +} +static void j3d_write_nlt(opj_j3d_t *j3d){ +} +static void j3d_read_nlt(opj_j3d_t *j3d){ +} +/* ----------------------------------------------------------------------- +15444-1 codestream syntax +------------------------------------------------------------------------*/ +static void j3d_write_soc(opj_j3d_t *j3d) { + opj_cio_t *cio = j3d->cio; + cio_write(cio, J3D_MS_SOC, 2); +} + +static void j3d_read_soc(opj_j3d_t *j3d) { + j3d->state = J3D_STATE_MHSIZ; +} + +static void j3d_write_siz(opj_j3d_t *j3d) { + int i; + int lenp, len; + int Rsiz; + + opj_cio_t *cio = j3d->cio; + opj_volume_t *volume = j3d->volume; + opj_cp_t *cp = j3d->cp; + + cio_write(cio, J3D_MS_SIZ, 2); /* SIZ */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + //cio_write(cio, 0, 2); /* Rsiz (capabilities of 15444-1 only) */ + Rsiz = J3D_RSIZ_DCO | J3D_RSIZ_ATK; /** | J3D_RSIZ_MCT | J3D_RSIZ_NONLT (not implemented yet)*/ + cio_write(cio, Rsiz, 2); /* capabilities of WDv5.2*/ + cio_write(cio, volume->x1, 4); /* Xsiz */ + cio_write(cio, volume->y1, 4); /* Ysiz */ + cio_write(cio, volume->x0, 4); /* X0siz */ + cio_write(cio, volume->y0, 4); /* Y0siz */ + cio_write(cio, cp->tdx, 4); /* XTsiz */ + cio_write(cio, cp->tdy, 4); /* YTsiz */ + cio_write(cio, cp->tx0, 4); /* XT0siz */ + cio_write(cio, cp->ty0, 4); /* YT0siz */ + cio_write(cio, volume->numcomps, 2); /* Csiz */ + for (i = 0; i < volume->numcomps; i++) { + cio_write(cio, volume->comps[i].prec - 1 + (volume->comps[i].sgnd << 7), 1); /* Ssiz_i */ + cio_write(cio, volume->comps[i].dx, 1); /* XRsiz_i */ + cio_write(cio, volume->comps[i].dy, 1); /* YRsiz_i */ + } + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lsiz */ + cio_seek(cio, lenp + len); +} + +static void j3d_read_siz(opj_j3d_t *j3d) { + int len, i; + + opj_cio_t *cio = j3d->cio; + opj_volume_t *volume = j3d->volume; + opj_cp_t *cp = j3d->cp; + + len = cio_read(cio, 2); /* Lsiz */ + cp->rsiz = cio_read(cio, 2); /* Rsiz (capabilities) */ + volume->x1 = cio_read(cio, 4); /* Xsiz */ + volume->y1 = cio_read(cio, 4); /* Ysiz */ + volume->x0 = cio_read(cio, 4); /* X0siz */ + volume->y0 = cio_read(cio, 4); /* Y0siz */ + cp->tdx = cio_read(cio, 4); /* XTsiz */ + cp->tdy = cio_read(cio, 4); /* YTsiz */ + cp->tx0 = cio_read(cio, 4); /* XT0siz */ + cp->ty0 = cio_read(cio, 4); /* YT0siz */ + + volume->numcomps = cio_read(cio, 2); /* Csiz */ + volume->comps = (opj_volume_comp_t *) opj_malloc(volume->numcomps * sizeof(opj_volume_comp_t)); + for (i = 0; i < volume->numcomps; i++) { + int tmp, j; + tmp = cio_read(cio, 1); /* Ssiz_i */ + volume->comps[i].prec = (tmp & 0x7f) + 1; + volume->comps[i].sgnd = tmp >> 7; + volume->comps[i].dx = cio_read(cio, 1); /* XRsiz_i */ + volume->comps[i].dy = cio_read(cio, 1); /* YRsiz_i */ + for (j = 0; j < 3; j++) { + volume->comps[i].resno_decoded[j] = 0; /* number of resolution decoded */ + volume->comps[i].factor[j] = 0; /* reducing factor per component */ + } + } + + if (j3d->cinfo->codec_format == CODEC_J2K){ + volume->z1 = 1; + volume->z0 = 0; + volume->numslices = 1; + cp->tdz = 1; + cp->tz0 = 0; + for (i = 0; i < volume->numcomps; i++) + volume->comps[i].dz = 1; + + //Initialization of volume + cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx); + cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy); + cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz); + cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(opj_tcp_t)); + cp->tileno = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int)); + cp->tileno_size = 0; + + for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) { + cp->tcps[i].POC = 0; + cp->tcps[i].numpocs = 0; + cp->tcps[i].first = 1; + } + + /* Initialization for PPM marker (Packets header)*/ + cp->ppm = 0; + cp->ppm_data = NULL; + cp->ppm_data_first = NULL; + cp->ppm_previous = 0; + cp->ppm_store = 0; + + j3d->default_tcp->tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) * volume->numcomps); + for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) { + cp->tcps[i].tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) * volume->numcomps); + } + j3d->tile_data = (unsigned char **) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(unsigned char *)); + j3d->tile_len = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int)); + j3d->state = J3D_STATE_MH; + } +} + + + +static void j3d_write_com(opj_j3d_t *j3d) { + unsigned int i; + int lenp, len; + + opj_cio_t *cio = j3d->cio; + + cio_write(cio, J3D_MS_COM, 2); + lenp = cio_tell(cio); + cio_skip(cio, 2); + //cio_write(cio, 0, 2); + cio_write(cio, j3d->cp->transform_format,1); + cio_write(cio, j3d->cp->encoding_format,1); + //opj_event_msg(j3d->cinfo, EVT_INFO, "TRF %D ENCOD %d\n",j3d->cp->transform_format,j3d->cp->encoding_format); + if (j3d->cp->comment != NULL) { + char *comment = j3d->cp->comment; + for (i = 0; i < strlen(comment); i++) { + cio_write(cio, comment[i], 1); + } + } + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); + cio_seek(cio, lenp + len); +} + +static void j3d_read_com(opj_j3d_t *j3d) { + int len; + opj_cio_t *cio = j3d->cio; + + len = cio_read(cio, 2); + + j3d->cp->transform_format = (OPJ_TRANSFORM) cio_read(cio, 1); + j3d->cp->encoding_format = (OPJ_ENTROPY_CODING) cio_read(cio, 1); + //opj_event_msg(j3d->cinfo, EVT_INFO, "TRF %D ENCOD %d\n",j3d->cp->transform_format,j3d->cp->encoding_format); + + cio_skip(cio, len - 4); //posible comments +} + +static void j3d_write_cox(opj_j3d_t *j3d, int compno) { + int i; + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = &cp->tcps[j3d->curtileno]; + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_cio_t *cio = j3d->cio; + + cio_write(cio, tccp->numresolution[0] - 1, 1); /* SPcox (D) No of decomposition levels in x-axis*/ + if (j3d->cinfo->codec_format == CODEC_J3D) { + cio_write(cio, tccp->numresolution[1] - 1, 1); /* SPcox (E) No of decomposition levels in y-axis*/ + cio_write(cio, tccp->numresolution[2] - 1, 1); /* SPcox (F) No of decomposition levels in z-axis*/ + } + /* (cblkw - 2) + (cblkh - 2) + (cblkl - 2) <= 18*/ + cio_write(cio, tccp->cblk[0] - 2, 1); /* SPcox (G) Cblk width entre 10 y 2 (8 y 0)*/ + cio_write(cio, tccp->cblk[1] - 2, 1); /* SPcox (H) Cblk height*/ + if (j3d->cinfo->codec_format == CODEC_J3D) { + cio_write(cio, tccp->cblk[2] - 2, 1); /* SPcox (I) Cblk depth*/ + } + cio_write(cio, tccp->cblksty, 1); /* SPcox (J) Cblk style*/ + cio_write(cio, tccp->dwtid[0], 1); /* SPcox (K) WT in x-axis 15444-2 Table A10*/ + if (j3d->cinfo->codec_format == CODEC_J3D) { + cio_write(cio, tccp->dwtid[1], 1); /* SPcox (L) WT in y-axis 15444-2 Table A10*/ + cio_write(cio, tccp->dwtid[2], 1); /* SPcox (M) WT in z-axis 15444-2 Table A10*/ + } + + if (tccp->csty & J3D_CCP_CSTY_PRT) { + for (i = 0; i < tccp->numresolution[0]; i++) { + if (i < tccp->numresolution[2]) + cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4) + (tccp->prctsiz[2][i] << 8), 2); /* SPcox (N_i) Table A9*/ + else + if (j3d->cinfo->codec_format == CODEC_J3D) + cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4), 2); /* SPcox (N_i) Table A9*/ + else + cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4), 1); /* SPcox (N_i) Table A9*/ } + } +} + +static void j3d_read_cox(opj_j3d_t *j3d, int compno) { + int i; + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp; + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_cio_t *cio = j3d->cio; + + tccp->numresolution[0] = cio_read(cio, 1) + 1; /* SPcox (D) No of decomposition levels in x-axis*/ + if (j3d->cinfo->codec_format == CODEC_J3D) { + tccp->numresolution[1] = cio_read(cio, 1) + 1; /* SPcox (E) No of decomposition levels in y-axis*/ + tccp->numresolution[2] = cio_read(cio, 1) + 1; /* SPcox (F) No of decomposition levels in z-axis*/ + }else if (j3d->cinfo->codec_format == CODEC_J2K) { + tccp->numresolution[1] = tccp->numresolution[0]; + tccp->numresolution[2] = 1; + } + /* check the reduce value */ + cp->reduce[0] = int_min((tccp->numresolution[0])-1, cp->reduce[0]); + cp->reduce[1] = int_min((tccp->numresolution[1])-1, cp->reduce[1]); + cp->reduce[2] = int_min((tccp->numresolution[2])-1, cp->reduce[2]); + + tccp->cblk[0] = cio_read(cio, 1) + 2; /* SPcox (G) */ + tccp->cblk[1] = cio_read(cio, 1) + 2; /* SPcox (H) */ + if (j3d->cinfo->codec_format == CODEC_J3D) + tccp->cblk[2] = cio_read(cio, 1) + 2; /* SPcox (I) */ + else + tccp->cblk[2] = tccp->cblk[0]; + + tccp->cblksty = cio_read(cio, 1); /* SPcox (J) */ + tccp->dwtid[0] = cio_read(cio, 1); /* SPcox (K) */ + if (j3d->cinfo->codec_format == CODEC_J3D) { + tccp->dwtid[1] = cio_read(cio, 1); /* SPcox (L) */ + tccp->dwtid[2] = cio_read(cio, 1); /* SPcox (M) */ + }else{ + tccp->dwtid[1] = tccp->dwtid[0]; /* SPcox (L) */ + tccp->dwtid[2] = tccp->dwtid[0]; /* SPcox (M) */ + } + tccp->reversible = (tccp->dwtid[0]>=1 && tccp->dwtid[1]>=1 && tccp->dwtid[2]>=1); //TODO: only valid for irreversible 9x7 WTs + if (tccp->csty & J3D_CP_CSTY_PRT) { + for (i = 0; i < tccp->numresolution[0]; i++) { + int tmp = cio_read(cio, 2); /* SPcox (N_i) */ + tccp->prctsiz[0][i] = tmp & 0xf; + tccp->prctsiz[1][i] = tmp >> 4; + tccp->prctsiz[2][i] = tmp >> 8; + } + } +} + +static void j3d_write_cod(opj_j3d_t *j3d) { + opj_cp_t *cp = NULL; + opj_tcp_t *tcp = NULL; + int lenp, len; + + opj_cio_t *cio = j3d->cio; + + cio_write(cio, J3D_MS_COD, 2); /* COD */ + + lenp = cio_tell(cio); + cio_skip(cio, 2); + + cp = j3d->cp; + tcp = &cp->tcps[j3d->curtileno]; + + /* Scod : Table A-4*/ + cio_write(cio, tcp->csty, 1); /* Scod : Coding style parameters */ + /* SGcod : Table A-5*/ + cio_write(cio, tcp->prg, 1); /* SGcod (A) : Progression order */ + cio_write(cio, tcp->numlayers, 2); /* SGcod (B) : No of layers */ + cio_write(cio, tcp->mct, 1); /* SGcod (C) : Multiple component transformation usage */ + /* SPcod : Table A-6*/ + j3d_write_cox(j3d, 0); + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lcod */ + cio_seek(cio, lenp + len); +} + +static void j3d_read_cod(opj_j3d_t *j3d) { + int len, i, pos; + + opj_cio_t *cio = j3d->cio; + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp; + opj_volume_t *volume = j3d->volume; + + /* Lcod */ + len = cio_read(cio, 2); + /* Scod : Table A-4*/ + tcp->csty = cio_read(cio, 1); + /* SGcod : Table A-5*/ + tcp->prg = (OPJ_PROG_ORDER)cio_read(cio, 1); + tcp->numlayers = cio_read(cio, 2); + tcp->mct = cio_read(cio, 1); + + pos = cio_tell(cio); + for (i = 0; i < volume->numcomps; i++) { + tcp->tccps[i].csty = tcp->csty & J3D_CP_CSTY_PRT; + cio_seek(cio, pos); + j3d_read_cox(j3d, i); + } +} + +static void j3d_write_coc(opj_j3d_t *j3d, int compno) { + int lenp, len; + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = &cp->tcps[j3d->curtileno]; + opj_volume_t *volume = j3d->volume; + opj_cio_t *cio = j3d->cio; + + cio_write(cio, J3D_MS_COC, 2); /* COC */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + cio_write(cio, compno, volume->numcomps <= 256 ? 1 : 2); /* Ccoc */ + cio_write(cio, tcp->tccps[compno].csty, 1); /* Scoc */ + + j3d_write_cox(j3d, compno); + + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lcoc */ + cio_seek(cio, lenp + len); +} + +static void j3d_read_coc(opj_j3d_t *j3d) { + int len, compno; + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp; + opj_volume_t *volume = j3d->volume; + opj_cio_t *cio = j3d->cio; + + len = cio_read(cio, 2); /* Lcoc */ + compno = cio_read(cio, volume->numcomps <= 256 ? 1 : 2); /* Ccoc */ + tcp->tccps[compno].csty = cio_read(cio, 1); /* Scoc */ + j3d_read_cox(j3d, compno); +} + +static void j3d_write_qcx(opj_j3d_t *j3d, int compno) { + int bandno, numbands; + int expn, mant; + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = &cp->tcps[j3d->curtileno]; + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_cio_t *cio = j3d->cio; + + cio_write(cio, tccp->qntsty + (tccp->numgbits << 5), 1); /* Sqcx : Table A28 de 15444-1*/ + + if (j3d->cinfo->codec_format == CODEC_J2K) + numbands = tccp->qntsty == J3D_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolution[0] * 3 - 2; + else if (j3d->cinfo->codec_format == CODEC_J3D) { + int diff = tccp->numresolution[0] - tccp->numresolution[2]; + numbands = (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) ? 1 : (tccp->numresolution[0] * 7 - 6) - 4 *diff; /* SIQNT vs. SEQNT */ + } + + for (bandno = 0; bandno < numbands; bandno++) { + expn = tccp->stepsizes[bandno].expn; + mant = tccp->stepsizes[bandno].mant; + + if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) { + cio_write(cio, expn << 3, 1); /* SPqcx_i */ + } else { + cio_write(cio, (expn << 11) + mant, 2); /* SPqcx_i */ + } + } +} + +static void j3d_read_qcx(opj_j3d_t *j3d, int compno, int len) { + int tmp; + int bandno, numbands; + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp; + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_cio_t *cio = j3d->cio; + + tmp = cio_read(cio, 1); /* Sqcx */ + tccp->qntsty = tmp & 0x1f; + tccp->numgbits = tmp >> 5; + + /*Numbands = 1 si SIQNT + len - 1 si NOQNT + (len - 1) / 2 si SEQNT */ + numbands = tccp->qntsty == J3D_CCP_QNTSTY_SIQNT ? 1 : ((tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) ? len - 1 : (len - 1) / 2); + + for (bandno = 0; bandno < numbands; bandno++) { + int expn, mant; + if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) { + expn = cio_read(cio, 1) >> 3; /* SPqcx_i */ + mant = 0; + } else { + tmp = cio_read(cio, 2); /* SPqcx_i */ + expn = tmp >> 11; + mant = tmp & 0x7ff; + } + tccp->stepsizes[bandno].expn = expn; + tccp->stepsizes[bandno].mant = mant; + } + + /* Add Antonin : if scalar_derived -> compute other stepsizes */ + if (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) { + for (bandno = 1; bandno < J3D_MAXBANDS; bandno++) { + int numbands = (cp->transform_format==TRF_2D_DWT) ? 3 : 7; + tccp->stepsizes[bandno].expn = tccp->stepsizes[0].expn - ((bandno - 1) / numbands); + tccp->stepsizes[bandno].mant = tccp->stepsizes[0].mant; + } + } + /* ddA */ +} + +static void j3d_write_qcd(opj_j3d_t *j3d) { + int lenp, len; + + opj_cio_t *cio = j3d->cio; + + cio_write(cio, J3D_MS_QCD, 2); /* QCD */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + j3d_write_qcx(j3d, 0); /* Sqcd*/ + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lqcd */ + cio_seek(cio, lenp + len); +} + +static void j3d_read_qcd(opj_j3d_t *j3d) { + int len, i, pos; + + opj_cio_t *cio = j3d->cio; + opj_volume_t *volume = j3d->volume; + + len = cio_read(cio, 2); /* Lqcd */ + pos = cio_tell(cio); + for (i = 0; i < volume->numcomps; i++) { + cio_seek(cio, pos); + j3d_read_qcx(j3d, i, len - 2); + } +} + +static void j3d_write_qcc(opj_j3d_t *j3d, int compno) { + int lenp, len; + + opj_cio_t *cio = j3d->cio; + + cio_write(cio, J3D_MS_QCC, 2); /* QCC */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + cio_write(cio, compno, j3d->volume->numcomps <= 256 ? 1 : 2); /* Cqcc */ + j3d_write_qcx(j3d, compno); + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lqcc */ + cio_seek(cio, lenp + len); +} + +static void j3d_read_qcc(opj_j3d_t *j3d) { + int len, compno; + int numcomp = j3d->volume->numcomps; + opj_cio_t *cio = j3d->cio; + + len = cio_read(cio, 2); /* Lqcc */ + compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */ + j3d_read_qcx(j3d, compno, len - 2 - (numcomp <= 256 ? 1 : 2)); +} + +static void j3d_write_poc(opj_j3d_t *j3d) { + int len, numpchgs, i; + + int numcomps = j3d->volume->numcomps; + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = &cp->tcps[j3d->curtileno]; + opj_tccp_t *tccp = &tcp->tccps[0]; + opj_cio_t *cio = j3d->cio; + + numpchgs = tcp->numpocs; + cio_write(cio, J3D_MS_POC, 2); /* POC */ + len = 2 + (5 + 2 * (numcomps <= 256 ? 1 : 2)) * numpchgs; + cio_write(cio, len, 2); /* Lpoc */ + for (i = 0; i < numpchgs; i++) { + opj_poc_t *poc = &tcp->pocs[i]; + cio_write(cio, poc->resno0, 1); /* RSpoc_i */ + cio_write(cio, poc->compno0, (numcomps <= 256 ? 1 : 2)); /* CSpoc_i */ + cio_write(cio, poc->layno1, 2); /* LYEpoc_i */ + poc->layno1 = int_min(poc->layno1, tcp->numlayers); + cio_write(cio, poc->resno1, 1); /* REpoc_i */ + poc->resno1 = int_min(poc->resno1, tccp->numresolution[0]); + cio_write(cio, poc->compno1, (numcomps <= 256 ? 1 : 2)); /* CEpoc_i */ + poc->compno1 = int_min(poc->compno1, numcomps); + cio_write(cio, poc->prg, 1); /* Ppoc_i */ + } +} + +static void j3d_read_poc(opj_j3d_t *j3d) { + int len, numpchgs, i, old_poc; + + int numcomps = j3d->volume->numcomps; + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp; + opj_tccp_t *tccp = &tcp->tccps[0]; + opj_cio_t *cio = j3d->cio; + + old_poc = tcp->POC ? tcp->numpocs + 1 : 0; + tcp->POC = 1; + len = cio_read(cio, 2); /* Lpoc */ + numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2)); + + for (i = old_poc; i < numpchgs + old_poc; i++) { + opj_poc_t *poc; + poc = &tcp->pocs[i]; + poc->resno0 = cio_read(cio, 1); /* RSpoc_i */ + poc->compno0 = cio_read(cio, numcomps <= 256 ? 1 : 2); /* CSpoc_i */ + poc->layno1 = int_min(cio_read(cio, 2), (unsigned int) tcp->numlayers); /* LYEpoc_i */ + poc->resno1 = int_min(cio_read(cio, 1), (unsigned int) tccp->numresolution[0]); /* REpoc_i */ + poc->compno1 = int_min( + cio_read(cio, numcomps <= 256 ? 1 : 2), (unsigned int) numcomps); /* CEpoc_i */ + poc->prg = (OPJ_PROG_ORDER)cio_read(cio, 1); /* Ppoc_i */ + } + + tcp->numpocs = numpchgs + old_poc - 1; +} + +static void j3d_read_crg(opj_j3d_t *j3d) { + int len, i, Xcrg_i, Ycrg_i, Zcrg_i; + + opj_cio_t *cio = j3d->cio; + int numcomps = j3d->volume->numcomps; + + len = cio_read(cio, 2); /* Lcrg */ + for (i = 0; i < numcomps; i++) { + Xcrg_i = cio_read(cio, 2); /* Xcrg_i */ + Ycrg_i = cio_read(cio, 2); /* Ycrg_i */ + Zcrg_i = cio_read(cio, 2); /* Zcrg_i */ + } +} + +static void j3d_read_tlm(opj_j3d_t *j3d) { + int len, Ztlm, Stlm, ST, SP, tile_tlm, i; + long int Ttlm_i, Ptlm_i; + + opj_cio_t *cio = j3d->cio; + + len = cio_read(cio, 2); /* Ltlm */ + Ztlm = cio_read(cio, 1); /* Ztlm */ + Stlm = cio_read(cio, 1); /* Stlm */ + ST = ((Stlm >> 4) & 0x01) + ((Stlm >> 4) & 0x02); + SP = (Stlm >> 6) & 0x01; + tile_tlm = (len - 4) / ((SP + 1) * 2 + ST); + for (i = 0; i < tile_tlm; i++) { + Ttlm_i = cio_read(cio, ST); /* Ttlm_i */ + Ptlm_i = cio_read(cio, SP ? 4 : 2); /* Ptlm_i */ + } +} + +static void j3d_read_plm(opj_j3d_t *j3d) { + int len, i, Zplm, Nplm, add, packet_len = 0; + + opj_cio_t *cio = j3d->cio; + + len = cio_read(cio, 2); /* Lplm */ + Zplm = cio_read(cio, 1); /* Zplm */ + len -= 3; + while (len > 0) { + Nplm = cio_read(cio, 4); /* Nplm */ + len -= 4; + for (i = Nplm; i > 0; i--) { + add = cio_read(cio, 1); + len--; + packet_len = (packet_len << 7) + add; /* Iplm_ij */ + if ((add & 0x80) == 0) { + /* New packet */ + packet_len = 0; + } + if (len <= 0) + break; + } + } +} + +static void j3d_read_plt(opj_j3d_t *j3d) { + int len, i, Zplt, packet_len = 0, add; + + opj_cio_t *cio = j3d->cio; + + len = cio_read(cio, 2); /* Lplt */ + Zplt = cio_read(cio, 1); /* Zplt */ + for (i = len - 3; i > 0; i--) { + add = cio_read(cio, 1); + packet_len = (packet_len << 7) + add; /* Iplt_i */ + if ((add & 0x80) == 0) { + /* New packet */ + packet_len = 0; + } + } +} + +static void j3d_read_ppm(opj_j3d_t *j3d) { + int len, Z_ppm, i, j; + int N_ppm; + + opj_cp_t *cp = j3d->cp; + opj_cio_t *cio = j3d->cio; + + len = cio_read(cio, 2); + cp->ppm = 1; + + Z_ppm = cio_read(cio, 1); /* Z_ppm */ + len -= 3; + while (len > 0) { + if (cp->ppm_previous == 0) { + N_ppm = cio_read(cio, 4); /* N_ppm */ + len -= 4; + } else { + N_ppm = cp->ppm_previous; + } + j = cp->ppm_store; + if (Z_ppm == 0) { /* First PPM marker */ + cp->ppm_data = (unsigned char *) opj_malloc(N_ppm * sizeof(unsigned char)); + cp->ppm_data_first = cp->ppm_data; + cp->ppm_len = N_ppm; + } else { /* NON-first PPM marker */ + cp->ppm_data = (unsigned char *) opj_realloc(cp->ppm_data, (N_ppm + cp->ppm_store) * sizeof(unsigned char)); + cp->ppm_data_first = cp->ppm_data; + cp->ppm_len = N_ppm + cp->ppm_store; + } + for (i = N_ppm; i > 0; i--) { /* Read packet header */ + cp->ppm_data[j] = cio_read(cio, 1); + j++; + len--; + if (len == 0) + break; /* Case of non-finished packet header in present marker but finished in next one */ + } + cp->ppm_previous = i - 1; + cp->ppm_store = j; + } +} + +static void j3d_read_ppt(opj_j3d_t *j3d) { + int len, Z_ppt, i, j = 0; + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = cp->tcps + j3d->curtileno; + opj_cio_t *cio = j3d->cio; + + len = cio_read(cio, 2); + Z_ppt = cio_read(cio, 1); + tcp->ppt = 1; + if (Z_ppt == 0) { /* First PPT marker */ + tcp->ppt_data = (unsigned char *) opj_malloc((len - 3) * sizeof(unsigned char)); + tcp->ppt_data_first = tcp->ppt_data; + tcp->ppt_store = 0; + tcp->ppt_len = len - 3; + } else { /* NON-first PPT marker */ + tcp->ppt_data = (unsigned char *) opj_realloc(tcp->ppt_data, (len - 3 + tcp->ppt_store) * sizeof(unsigned char)); + tcp->ppt_data_first = tcp->ppt_data; + tcp->ppt_len = len - 3 + tcp->ppt_store; + } + j = tcp->ppt_store; + for (i = len - 3; i > 0; i--) { + tcp->ppt_data[j] = cio_read(cio, 1); + j++; + } + tcp->ppt_store = j; +} + +static void j3d_write_sot(opj_j3d_t *j3d) { + int lenp, len; + + opj_cio_t *cio = j3d->cio; + + j3d->sot_start = cio_tell(cio); + cio_write(cio, J3D_MS_SOT, 2); /* SOT */ + lenp = cio_tell(cio); + cio_skip(cio, 2); /* Lsot (further) */ + cio_write(cio, j3d->curtileno, 2); /* Isot */ + cio_skip(cio, 4); /* Psot (further in j3d_write_sod) */ + cio_write(cio, 0, 1); /* TPsot */ + cio_write(cio, 1, 1); /* TNsot (no of tile-parts of this tile in this codestream)*/ + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lsot */ + cio_seek(cio, lenp + len); +} + +static void j3d_read_sot(opj_j3d_t *j3d) { + int len, tileno, totlen, partno, numparts, i; + opj_tcp_t *tcp = NULL; + char status = 0; + + opj_cp_t *cp = j3d->cp; + opj_cio_t *cio = j3d->cio; + + len = cio_read(cio, 2); + tileno = cio_read(cio, 2); + + if (cp->tileno_size == 0) { + cp->tileno[cp->tileno_size] = tileno; + cp->tileno_size++; + } else { + i = 0; + while (i < cp->tileno_size && status == 0) { + status = cp->tileno[i] == tileno ? 1 : 0; + i++; + } + if (status == 0) { + cp->tileno[cp->tileno_size] = tileno; + cp->tileno_size++; + } + } + + totlen = cio_read(cio, 4); + if (!totlen) + totlen = cio_numbytesleft(cio) + 8; + + partno = cio_read(cio, 1); + numparts = cio_read(cio, 1); + + j3d->curtileno = tileno; + j3d->eot = cio_getbp(cio) - 12 + totlen; + j3d->state = J3D_STATE_TPH; + tcp = &cp->tcps[j3d->curtileno]; + + if (tcp->first == 1) { + + /* Initialization PPT */ + opj_tccp_t *tmp = tcp->tccps; + memcpy(tcp, j3d->default_tcp, sizeof(opj_tcp_t)); + tcp->ppt = 0; + tcp->ppt_data = NULL; + tcp->ppt_data_first = NULL; + tcp->tccps = tmp; + + for (i = 0; i < j3d->volume->numcomps; i++) { + tcp->tccps[i] = j3d->default_tcp->tccps[i]; + } + cp->tcps[j3d->curtileno].first = 0; + } +} + +static void j3d_write_sod(opj_j3d_t *j3d, void *tile_coder) { + int l, layno; + int totlen; + opj_tcp_t *tcp = NULL; + opj_volume_info_t *volume_info = NULL; + + opj_tcd_t *tcd = (opj_tcd_t*)tile_coder; /* cast is needed because of conflicts in header inclusions */ + opj_cp_t *cp = j3d->cp; + opj_cio_t *cio = j3d->cio; + + cio_write(cio, J3D_MS_SOD, 2); + if (j3d->curtileno == 0) { + j3d->sod_start = cio_tell(cio) + j3d->pos_correction; + } + + /* INDEX >> */ + volume_info = j3d->volume_info; + if (volume_info && volume_info->index_on) { + volume_info->tile[j3d->curtileno].end_header = cio_tell(cio) + j3d->pos_correction - 1; + } + /* << INDEX */ + + tcp = &cp->tcps[j3d->curtileno]; + for (layno = 0; layno < tcp->numlayers; layno++) { + tcp->rates[layno] -= tcp->rates[layno] ? (j3d->sod_start / (cp->th * cp->tw * cp->tl)) : 0; + } + + if(volume_info) { + volume_info->num = 0; + } + + l = tcd_encode_tile(tcd, j3d->curtileno, cio_getbp(cio), cio_numbytesleft(cio) - 2, volume_info); + + /* Writing Psot in SOT marker */ + totlen = cio_tell(cio) + l - j3d->sot_start; + cio_seek(cio, j3d->sot_start + 6); + cio_write(cio, totlen, 4); + cio_seek(cio, j3d->sot_start + totlen); +} + +static void j3d_read_sod(opj_j3d_t *j3d) { + int len, truncate = 0, i; + unsigned char *data = NULL, *data_ptr = NULL; + + opj_cio_t *cio = j3d->cio; + int curtileno = j3d->curtileno; + + len = int_min(j3d->eot - cio_getbp(cio), cio_numbytesleft(cio) + 1); + + if (len == cio_numbytesleft(cio) + 1) { + truncate = 1; /* Case of a truncate codestream */ + } + + data = (unsigned char *) opj_malloc((j3d->tile_len[curtileno] + len) * sizeof(unsigned char)); + + for (i = 0; i < j3d->tile_len[curtileno]; i++) { + data[i] = j3d->tile_data[curtileno][i]; + } + + data_ptr = data + j3d->tile_len[curtileno]; + for (i = 0; i < len; i++) { + data_ptr[i] = cio_read(cio, 1); + } + + j3d->tile_len[curtileno] += len; + opj_free(j3d->tile_data[curtileno]); + j3d->tile_data[curtileno] = data; + + if (!truncate) { + j3d->state = J3D_STATE_TPHSOT; + } else { + j3d->state = J3D_STATE_NEOC; /* RAJOUTE !! */ + } +} + +static void j3d_write_rgn(opj_j3d_t *j3d, int compno, int tileno) { + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = &cp->tcps[tileno]; + opj_cio_t *cio = j3d->cio; + int numcomps = j3d->volume->numcomps; + + cio_write(cio, J3D_MS_RGN, 2); /* RGN */ + cio_write(cio, numcomps <= 256 ? 5 : 6, 2); /* Lrgn */ + cio_write(cio, compno, numcomps <= 256 ? 1 : 2); /* Crgn */ + cio_write(cio, 0, 1); /* Srgn */ + cio_write(cio, tcp->tccps[compno].roishift, 1); /* SPrgn */ +} + +static void j3d_read_rgn(opj_j3d_t *j3d) { + int len, compno, roisty; + + opj_cp_t *cp = j3d->cp; + opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp; + opj_cio_t *cio = j3d->cio; + int numcomps = j3d->volume->numcomps; + + len = cio_read(cio, 2); /* Lrgn */ + compno = cio_read(cio, numcomps <= 256 ? 1 : 2); /* Crgn */ + roisty = cio_read(cio, 1); /* Srgn */ + tcp->tccps[compno].roishift = cio_read(cio, 1); /* SPrgn */ +} + +static void j3d_write_eoc(opj_j3d_t *j3d) { + opj_cio_t *cio = j3d->cio; + /* opj_event_msg(j3d->cinfo, "%.8x: EOC\n", cio_tell(cio) + j3d->pos_correction); */ + cio_write(cio, J3D_MS_EOC, 2); +} + +static void j3d_read_eoc(opj_j3d_t *j3d) { + int i, tileno; + +#ifndef NO_PACKETS_DECODING + opj_tcd_t *tcd = tcd_create(j3d->cinfo); + tcd_malloc_decode(tcd, j3d->volume, j3d->cp); + /*j3d_dump_volume(stdout, tcd->volume); + j3d_dump_cp(stdout, tcd->volume, tcd->cp);*/ + for (i = 0; i < j3d->cp->tileno_size; i++) { + tileno = j3d->cp->tileno[i]; + //opj_event_msg(j3d->cinfo, EVT_INFO, "tcd_decode_tile \n"); + tcd_decode_tile(tcd, j3d->tile_data[tileno], j3d->tile_len[tileno], tileno); + opj_free(j3d->tile_data[tileno]); + j3d->tile_data[tileno] = NULL; + } + tcd_free_decode(tcd); + tcd_destroy(tcd); +#else + for (i = 0; i < j3d->cp->tileno_size; i++) { + tileno = j3d->cp->tileno[i]; + opj_free(j3d->tile_data[tileno]); + j3d->tile_data[tileno] = NULL; + } +#endif + + j3d->state = J3D_STATE_MT; +} + +static void j3d_read_unk(opj_j3d_t *j3d) { + opj_event_msg(j3d->cinfo, EVT_WARNING, "Unknown marker\n"); +} + +static opj_atk_t atk_info_wt[] = { + {0, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1.230174104, 4, {0}, {0}, {0}, {1,1,1,1}, {-1.586134342059924, -0.052980118572961, 0.882911075530934, 0.443506852043971}},/* WT 9-7 IRR*/ + {1, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {1,2}, {1,2}, {1,1}, {-1.0,1.0}},/* WT 5-3 REV*/ + {2, 0, J3D_ATK_ARB, J3D_ATK_REV, 0, J3D_ATK_CON, 0, 2, {0,0}, {0,1}, {0,1}, {1,1}, {{-1.0},{1.0}}}, /* WT 2-2 REV*/ + {3, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0,0,-1}, {0,1,2}, {0,1,2}, {1,1,3}, {{-1.0},{1.0},{1.0,0.0,-1.0}}}, /* WT 2-6 REV*/ + {4, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0,0,-2}, {0,1,6}, {0,1,32}, {1,1,5}, {{-1},{1},{-3.0,22.0,0.0,-22.0,3.0}}}, /* WT 2-10 REV*/ + {5, 1, J3D_ATK_ARB, J3D_ATK_IRR, 1, J3D_ATK_WS, 1, 7, {0}, {0}, {0}, {1,1,2,1,2,1,3},{{-1},{1.58613434206},{-0.460348209828, 0.460348209828},{0.25},{0.374213867768,-0.374213867768},{-1.33613434206},{0.29306717103,0,-0.29306717103}}}, /* WT 6-10 IRR*/ + {6, 1, J3D_ATK_ARB, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 11, {0}, {0}, {0}, {1,1,2,1,2,1,2,1,2,1,5},{{-1},{0,99715069105},{-1.00573127827, 1.00573127827},{-0.27040357631},{2.20509972343, -2.20509972343},{0.08059995736}, + {-1.62682532350, 1.62682532350},{0.52040357631},{0.60404664250, -0.60404664250},{-0.82775064841},{-0.06615812964, 0.29402137720, 0, -0.29402137720, 0.06615812964}}}, /* WT 10-18 IRR*/ + {7, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 2, {0}, {0}, {0}, {1,1}, {-0.5, 0.25}}, /* WT 5-3 IRR*/ + {8, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {4,4}, {8,8}, {2,2}, {{-9,1},{5,-1}}} /* WT 13-7 REV*/ +}; + +typedef struct opj_dec_mstabent { + /** marker value */ + int id; + /** value of the state when the marker can appear */ + int states; + /** action linked to the marker */ + void (*handler) (opj_j3d_t *j3d); +} opj_dec_mstabent_t; + +opj_dec_mstabent_t j3d_dec_mstab[] = { + {J3D_MS_SOC, J3D_STATE_MHSOC, j3d_read_soc}, + {J3D_MS_SOT, J3D_STATE_MH | J3D_STATE_TPHSOT, j3d_read_sot}, + {J3D_MS_SOD, J3D_STATE_TPH, j3d_read_sod}, + {J3D_MS_EOC, J3D_STATE_TPHSOT, j3d_read_eoc}, + {J3D_MS_CAP, J3D_STATE_MHSIZ, j3d_read_cap}, + {J3D_MS_SIZ, J3D_STATE_MHSIZ, j3d_read_siz}, + {J3D_MS_ZSI, J3D_STATE_MHSIZ, j3d_read_zsi}, + {J3D_MS_COD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_cod}, + {J3D_MS_COC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_coc}, + {J3D_MS_RGN, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_rgn}, + {J3D_MS_QCD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_qcd}, + {J3D_MS_QCC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_qcc}, + {J3D_MS_POC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_poc}, + {J3D_MS_TLM, J3D_STATE_MH, j3d_read_tlm}, + {J3D_MS_PLM, J3D_STATE_MH, j3d_read_plm}, + {J3D_MS_PLT, J3D_STATE_TPH, j3d_read_plt}, + {J3D_MS_PPM, J3D_STATE_MH, j3d_read_ppm}, + {J3D_MS_PPT, J3D_STATE_TPH, j3d_read_ppt}, + {J3D_MS_SOP, 0, 0}, + {J3D_MS_CRG, J3D_STATE_MH, j3d_read_crg}, + {J3D_MS_COM, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_com}, + {J3D_MS_DCO, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_dco}, + {J3D_MS_ATK, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_atk}, + {0, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_unk} + /*, -->must define the j3d_read functions + {J3D_MS_CBD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_cbd}, + {J3D_MS_MCT, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mct}, + {J3D_MS_MCC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mcc}, + {J3D_MS_MCO, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mco}, + {J3D_MS_NLT, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_nlt}, + {J3D_MS_VMS, J3D_STATE_MH, j3d_read_vms}, + {J3D_MS_DFS, J3D_STATE_MH, j3d_read_dfs}, + {J3D_MS_ADS, J3D_STATE_MH, j3d_read_ads}, + {J3D_MS_QPD, J3D_STATE_MH, j3d_read_qpd}, + {J3D_MS_QPC, J3D_STATE_TPH, j3d_read_qpc}*/ +}; + +/** +Read the lookup table containing all the marker, status and action +@param id Marker value +*/ +static opj_dec_mstabent_t *j3d_dec_mstab_lookup(int id) { + opj_dec_mstabent_t *e; + for (e = j3d_dec_mstab; e->id != 0; e++) { + if (e->id == id) { + break; + } + } + return e; +} + +/* ----------------------------------------------------------------------- */ +/* J3D / JPT decoder interface */ +/* ----------------------------------------------------------------------- */ + +opj_j3d_t* j3d_create_decompress(opj_common_ptr cinfo) { + opj_j3d_t *j3d = (opj_j3d_t*)opj_malloc(sizeof(opj_j3d_t)); + if(j3d) { + j3d->cinfo = cinfo; + j3d->default_tcp = (opj_tcp_t*)opj_malloc(sizeof(opj_tcp_t)); + if(!j3d->default_tcp) { + opj_free(j3d); + return NULL; + } + } + return j3d; +} + +void j3d_destroy_decompress(opj_j3d_t *j3d) { + int i = 0; + + if(j3d->tile_len != NULL) { + opj_free(j3d->tile_len); + } + if(j3d->tile_data != NULL) { + opj_free(j3d->tile_data); + } + if(j3d->default_tcp != NULL) { + opj_tcp_t *default_tcp = j3d->default_tcp; + if(default_tcp->ppt_data_first != NULL) { + opj_free(default_tcp->ppt_data_first); + } + if(j3d->default_tcp->tccps != NULL) { + opj_free(j3d->default_tcp->tccps); + } + opj_free(j3d->default_tcp); + } + if(j3d->cp != NULL) { + opj_cp_t *cp = j3d->cp; + if(cp->tcps != NULL) { + for(i = 0; i < cp->tw * cp->th * cp->tl; i++) { + if(cp->tcps[i].ppt_data_first != NULL) { + opj_free(cp->tcps[i].ppt_data_first); + } + if(cp->tcps[i].tccps != NULL) { + opj_free(cp->tcps[i].tccps); + } + } + opj_free(cp->tcps); + } + if(cp->ppm_data_first != NULL) { + opj_free(cp->ppm_data_first); + } + if(cp->tileno != NULL) { + opj_free(cp->tileno); + } + if(cp->comment != NULL) { + opj_free(cp->comment); + } + + opj_free(cp); + } + + opj_free(j3d); +} + +void j3d_setup_decoder(opj_j3d_t *j3d, opj_dparameters_t *parameters) { + if(j3d && parameters) { + /* create and initialize the coding parameters structure */ + opj_cp_t *cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t)); + cp->reduce[0] = parameters->cp_reduce[0]; + cp->reduce[1] = parameters->cp_reduce[1]; + cp->reduce[2] = parameters->cp_reduce[2]; + cp->layer = parameters->cp_layer; + cp->bigendian = parameters->bigendian; + + + cp->encoding_format = ENCOD_2EB; + cp->transform_format = TRF_2D_DWT; + + /* keep a link to cp so that we can destroy it later in j3d_destroy_decompress */ + j3d->cp = cp; + } +} + +opj_volume_t* j3d_decode(opj_j3d_t *j3d, opj_cio_t *cio) { + opj_volume_t *volume = NULL; + + opj_common_ptr cinfo = j3d->cinfo; + + j3d->cio = cio; + + /* create an empty volume */ + volume = (opj_volume_t*)opj_malloc(sizeof(opj_volume_t)); + j3d->volume = volume; + + j3d->state = J3D_STATE_MHSOC; + + for (;;) { + opj_dec_mstabent_t *e; + int id = cio_read(cio, 2); + if (id >> 8 != 0xff) { + opj_volume_destroy(volume); + opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id); + return 0; + } + e = j3d_dec_mstab_lookup(id); + //opj_event_msg(cinfo, EVT_INFO, "MARKER %x PREVSTATE %d E->STATE %d\n",e->id,j3d->state,e->states); + if (!(j3d->state & e->states)) { + opj_volume_destroy(volume); + opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id); + return 0; + } + if (e->handler) { + (*e->handler)(j3d); + } + //opj_event_msg(cinfo, EVT_INFO, "POSTSTATE %d\n",j3d->state); + if (j3d->state == J3D_STATE_MT) { + break; + } + if (j3d->state == J3D_STATE_NEOC) { + break; + } + } + if (j3d->state == J3D_STATE_NEOC) { + j3d_read_eoc(j3d); + } + + if (j3d->state != J3D_STATE_MT) { + opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n"); + } + + return volume; +} + +/* ----------------------------------------------------------------------- */ +/* J3D encoder interface */ +/* ----------------------------------------------------------------------- */ + +opj_j3d_t* j3d_create_compress(opj_common_ptr cinfo) { + opj_j3d_t *j3d = (opj_j3d_t*)opj_malloc(sizeof(opj_j3d_t)); + if(j3d) { + j3d->cinfo = cinfo; + } + return j3d; +} + +void j3d_destroy_compress(opj_j3d_t *j3d) { + int tileno; + + if(!j3d) return; + + if(j3d->volume_info != NULL) { + opj_volume_info_t *volume_info = j3d->volume_info; + if (volume_info->index_on && j3d->cp) { + opj_cp_t *cp = j3d->cp; + for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { + opj_tile_info_t *tile_info = &volume_info->tile[tileno]; + opj_free(tile_info->thresh); + opj_free(tile_info->packet); + } + opj_free(volume_info->tile); + } + opj_free(volume_info); + } + if(j3d->cp != NULL) { + opj_cp_t *cp = j3d->cp; + + if(cp->comment) { + opj_free(cp->comment); + } + if(cp->matrice) { + opj_free(cp->matrice); + } + for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { + opj_free(cp->tcps[tileno].tccps); + } + opj_free(cp->tcps); + opj_free(cp); + } + + opj_free(j3d); +} + +void j3d_setup_encoder(opj_j3d_t *j3d, opj_cparameters_t *parameters, opj_volume_t *volume) { + int i, j, tileno, numpocs_tile; + opj_cp_t *cp = NULL; + + if(!j3d || !parameters || ! volume) { + return; + } + + /* create and initialize the coding parameters structure */ + cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t)); + + /* keep a link to cp so that we can destroy it later in j3d_destroy_compress */ + j3d->cp = cp; + + /* set default values for cp */ + cp->tw = 1; + cp->th = 1; + cp->tl = 1; + + /* copy user encoding parameters */ + cp->disto_alloc = parameters->cp_disto_alloc; + cp->fixed_alloc = parameters->cp_fixed_alloc; + cp->fixed_quality = parameters->cp_fixed_quality; + + /* transform and coding method */ + cp->transform_format = parameters->transform_format; + cp->encoding_format = parameters->encoding_format; + + /* mod fixed_quality */ + if(parameters->cp_matrice) { + size_t array_size = parameters->tcp_numlayers * 3 * parameters->numresolution[0] * sizeof(int); + cp->matrice = (int *) opj_malloc(array_size); + memcpy(cp->matrice, parameters->cp_matrice, array_size); + } + + /* creation of an index file ? */ + cp->index_on = parameters->index_on; + if(cp->index_on) { + j3d->volume_info = (opj_volume_info_t*)opj_malloc(sizeof(opj_volume_info_t)); + } + + /* tiles */ + cp->tdx = parameters->cp_tdx; + cp->tdy = parameters->cp_tdy; + cp->tdz = parameters->cp_tdz; + /* tile offset */ + cp->tx0 = parameters->cp_tx0; + cp->ty0 = parameters->cp_ty0; + cp->tz0 = parameters->cp_tz0; + /* comment string */ + if(parameters->cp_comment) { + cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1); + if(cp->comment) { + strcpy(cp->comment, parameters->cp_comment); + } + } + + /*calculate other encoding parameters*/ + if (parameters->tile_size_on) { + cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx); + cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy); + cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz); + } else { + cp->tdx = volume->x1 - cp->tx0; + cp->tdy = volume->y1 - cp->ty0; + cp->tdz = volume->z1 - cp->tz0; + } + + /* initialize the multiple tiles */ + /* ---------------------------- */ + cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(opj_tcp_t)); + + for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) { + opj_tcp_t *tcp = &cp->tcps[tileno]; + tcp->numlayers = parameters->tcp_numlayers; + for (j = 0; j < tcp->numlayers; j++) { + if (cp->fixed_quality) { /* add fixed_quality */ + tcp->distoratio[j] = parameters->tcp_distoratio[j]; + } else { + tcp->rates[j] = parameters->tcp_rates[j]; + } + } + tcp->csty = parameters->csty; + tcp->prg = parameters->prog_order; + tcp->mct = volume->numcomps == 3 ? 1 : 0; + + numpocs_tile = 0; + tcp->POC = 0; + if (parameters->numpocs) { + /* initialisation of POC */ + tcp->POC = 1; + for (i = 0; i < parameters->numpocs; i++) { + if((tileno == parameters->POC[i].tile - 1) || (parameters->POC[i].tile == -1)) { + opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile]; + tcp_poc->resno0 = parameters->POC[numpocs_tile].resno0; + tcp_poc->compno0 = parameters->POC[numpocs_tile].compno0; + tcp_poc->layno1 = parameters->POC[numpocs_tile].layno1; + tcp_poc->resno1 = parameters->POC[numpocs_tile].resno1; + tcp_poc->compno1 = parameters->POC[numpocs_tile].compno1; + tcp_poc->prg = parameters->POC[numpocs_tile].prg; + tcp_poc->tile = parameters->POC[numpocs_tile].tile; + numpocs_tile++; + } + } + } + tcp->numpocs = numpocs_tile; + + tcp->tccps = (opj_tccp_t *) opj_malloc(volume->numcomps * sizeof(opj_tccp_t)); + + for (i = 0; i < volume->numcomps; i++) { + opj_tccp_t *tccp = &tcp->tccps[i]; + tccp->csty = parameters->csty & J3D_CCP_CSTY_PRT; /* 0 => standard precint || 1 => custom-defined precinct */ + tccp->numresolution[0] = parameters->numresolution[0]; + tccp->numresolution[1] = parameters->numresolution[1]; + tccp->numresolution[2] = parameters->numresolution[2]; + assert (parameters->cblock_init[0] <= T1_MAXCBLKW); + assert (parameters->cblock_init[0] >= T1_MINCBLKW); + assert (parameters->cblock_init[1] <= T1_MAXCBLKH); + assert (parameters->cblock_init[1] >= T1_MINCBLKH); + assert (parameters->cblock_init[2] <= T1_MAXCBLKD); + assert (parameters->cblock_init[2] >= T1_MINCBLKD); + tccp->cblk[0] = int_floorlog2(parameters->cblock_init[0]); + tccp->cblk[1] = int_floorlog2(parameters->cblock_init[1]); + tccp->cblk[2] = int_floorlog2(parameters->cblock_init[2]); + assert (tccp->cblk[0]+tccp->cblk[1]+tccp->cblk[1] <= T1_MAXWHD); + tccp->cblksty = parameters->mode; //Codeblock style --> Table A.19 (default 0) + + /*ATK / transform */ + tccp->reversible = parameters->irreversible ? 0 : 1; /* 0 => DWT 9-7 || 1 => DWT 5-3 */ + for (j = 0; j < 3; j++) { + tccp->dwtid[j] = parameters->irreversible ? 0 : 1; /* 0 => DWT 9-7 || 1 => DWT 5-3 */ + } + + /* Quantification: SEQNT (Scalar Expounded, value for each subband) / NOQNT (no quant)*/ + tccp->qntsty = parameters->irreversible ? J3D_CCP_QNTSTY_SEQNT : J3D_CCP_QNTSTY_NOQNT; + tccp->numgbits = 2; + if (i == parameters->roi_compno) { + tccp->roishift = parameters->roi_shift; + } else { + tccp->roishift = 0; + } + /* Custom defined precints */ + if (parameters->csty & J3D_CCP_CSTY_PRT) { + int k; + for (k = 0; k < 3; k++) { + int p = 0; + for (j = tccp->numresolution[k] - 1; j >= 0; j--) { + if (p < parameters->res_spec) {/* p < number of precinct size specifications */ + if (parameters->prct_init[k][p] < 1) { + tccp->prctsiz[k][j] = 1; + } else { + tccp->prctsiz[k][j] = int_floorlog2(parameters->prct_init[k][p]); + } + } else { + int res_spec = parameters->res_spec; + int size_prct = parameters->prct_init[k][res_spec - 1] >> (p - (res_spec - 1)); + if (size_prct < 1) { + tccp->prctsiz[k][j] = 1; + } else { + tccp->prctsiz[k][j] = int_floorlog2(size_prct); + } + } + } + p++; + } + } else { + int k; + for (k = 0; k < 3; k++) { + for (j = 0; j < tccp->numresolution[k]; j++) { + tccp->prctsiz[k][j] = 15; + } + } + } + //Calcular stepsize for each subband (if NOQNT -->stepsize = 1.0) + dwt_calc_explicit_stepsizes(tccp, volume->comps[i].prec); + } + } +} + +/** +Create an index file +@param j3d +@param cio +@param volume_info +@param index Index filename +@return Returns 1 if successful, returns 0 otherwise +*/ +static int j3d_create_index(opj_j3d_t *j3d, opj_cio_t *cio, opj_volume_info_t *volume_info, char *index) { + + int tileno, compno, layno, resno, precno, pack_nb, x, y, z; + FILE *stream = NULL; + double total_disto = 0; + + volume_info->codestream_size = cio_tell(cio) + j3d->pos_correction; /* Correction 14/4/03 suite rmq de Patrick */ + + stream = fopen(index, "w"); + if (!stream) { + opj_event_msg(j3d->cinfo, EVT_ERROR, "failed to open %s for writing\n", index); + return 0; + } + + fprintf(stream, "w %d\t h %d\t l %d\n", volume_info->volume_w, volume_info->volume_h, volume_info->volume_l); + fprintf(stream, "TRASNFORM\t%d\n", volume_info->transform_format); + fprintf(stream, "ENTROPY CODING\t%d\n", volume_info->encoding_format); + fprintf(stream, "PROG\t%d\n", volume_info->prog); + fprintf(stream, "TILE\tx %d y %d z %d\n", volume_info->tile_x, volume_info->tile_y, volume_info->tile_z); + fprintf(stream, "NOTILE\tx %d y %d z %d\n", volume_info->tw, volume_info->th, volume_info->tl); + fprintf(stream, "COMPONENTS\t%d\n", volume_info->comp); + fprintf(stream, "LAYER\t%d\n", volume_info->layer); + fprintf(stream, "RESOLUTIONS\tx %d y %d z %d\n", volume_info->decomposition[0], volume_info->decomposition[1], volume_info->decomposition[2]); + + fprintf(stream, "Precint sizes for each resolution:\n"); + for (resno = volume_info->decomposition[0]; resno >= 0; resno--) { + fprintf(stream, "Resno %d \t [%d,%d,%d] \n", resno, + (1 << volume_info->tile[0].prctsiz[0][resno]), (1 << volume_info->tile[0].prctsiz[0][resno]), (1 << volume_info->tile[0].prctsiz[2][resno])); /* based on tile 0 */ + } + fprintf(stream, "HEADER_END\t%d\n", volume_info->main_head_end); + fprintf(stream, "CODESTREAM\t%d\n", volume_info->codestream_size); + fprintf(stream, "Num_tile Start_pos End_header End_pos Distotile Nbpix Ratio\n"); + for (tileno = 0; tileno < (volume_info->tw * volume_info->th * volume_info->tl); tileno++) { + fprintf(stream, "%4d\t%9d\t%9d\t%9d\t%9e\t%9d\t%9e\n", + volume_info->tile[tileno].num_tile, + volume_info->tile[tileno].start_pos, + volume_info->tile[tileno].end_header, + volume_info->tile[tileno].end_pos, + volume_info->tile[tileno].distotile, volume_info->tile[tileno].nbpix, + volume_info->tile[tileno].distotile / volume_info->tile[tileno].nbpix); + } + + for (tileno = 0; tileno < (volume_info->tw * volume_info->th * volume_info->tl); tileno++) { + int start_pos, end_pos; + double disto = 0; + pack_nb = 0; + if (volume_info->prog == LRCP) { /* LRCP */ + fprintf(stream, "pack_nb tileno layno resno compno precno start_pos end_pos disto\n"); + for (layno = 0; layno < volume_info->layer; layno++) { + for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) { + for (compno = 0; compno < volume_info->comp; compno++) { + int prec_max = volume_info->tile[tileno].prctno[0][resno] * volume_info->tile[tileno].prctno[1][resno] * volume_info->tile[tileno].prctno[2][resno]; + for (precno = 0; precno < prec_max; precno++) { + start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos; + end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos; + disto = volume_info->tile[tileno].packet[pack_nb].disto; + fprintf(stream, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",pack_nb, tileno, layno, resno, compno, precno, start_pos, end_pos, disto); + total_disto += disto; + pack_nb++; + } + } + } + } + } /* LRCP */ + else if (volume_info->prog == RLCP) { /* RLCP */ + /* + fprintf(stream, "pack_nb tileno resno layno compno precno start_pos end_pos disto"); + */ + for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) { + for (layno = 0; layno < volume_info->layer; layno++) { + for (compno = 0; compno < volume_info->comp; compno++) { + int prec_max = volume_info->tile[tileno].prctno[0][resno] * volume_info->tile[tileno].prctno[1][resno]* volume_info->tile[tileno].prctno[2][resno]; + for (precno = 0; precno < prec_max; precno++) { + start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos; + end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos; + disto = volume_info->tile[tileno].packet[pack_nb].disto; + fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %8e\n", + pack_nb, tileno, resno, layno, compno, precno, start_pos, end_pos, disto); + total_disto += disto; + pack_nb++; + } + } + } + } + } /* RLCP */ + else if (volume_info->prog == RPCL) { /* RPCL */ + /* + fprintf(stream, "\npack_nb tileno resno precno compno layno start_pos end_pos disto\n"); + */ + for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) { + /* I suppose components have same XRsiz, YRsiz */ + //int x0 = volume_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tw * volume_info->tile_x; + //int y0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_y; + int x0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_x; + int y0 = volume_info->tile_Oy + (int)floor( (float)tileno/(float)volume_info->th ) * volume_info->tile_y; + int z0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tl ) * volume_info->tile_z; + int x1 = x0 + volume_info->tile_x; + int y1 = y0 + volume_info->tile_y; + int z1 = z0 + volume_info->tile_z; + for(z = z0; z < z1; z++) { + for(y = y0; y < y1; y++) { + for(x = x0; x < x1; x++) { + for (compno = 0; compno < volume_info->comp; compno++) { + int prec_max = volume_info->tile[tileno].prctno[0][resno] * volume_info->tile[tileno].prctno[1][resno] * volume_info->tile[tileno].prctno[2][resno]; + for (precno = 0; precno < prec_max; precno++) { + int pcnx = volume_info->tile[tileno].prctno[0][resno]; + int pcx = (int) pow( 2, volume_info->tile[tileno].prctsiz[0][resno] + volume_info->decomposition[0] - resno ); + int pcy = (int) pow( 2, volume_info->tile[tileno].prctsiz[1][resno] + volume_info->decomposition[1] - resno ); + int pcz = (int) pow( 2, volume_info->tile[tileno].prctsiz[2][resno] + volume_info->decomposition[2] - resno ); + int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx; + int precno_y = (int) floor( (float)precno/(float)pcnx ); + if (precno_y*pcy == y ) { + if (precno_x*pcx == x ) { + for (layno = 0; layno < volume_info->layer; layno++) { + start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos; + end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos; + disto = volume_info->tile[tileno].packet[pack_nb].disto; + fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %8e\n", + pack_nb, tileno, resno, precno, compno, layno, start_pos, end_pos, disto); + total_disto += disto; + pack_nb++; + } + } + } + } /* precno */ + } /* compno */ + } /* x = x0..x1 */ + } /* y = y0..y1 */ + } /* z = z0..z1 */ + } /* resno */ + } /* RPCL */ + else if (volume_info->prog == PCRL) { /* PCRL */ + /* I suppose components have same XRsiz, YRsiz */ + int x0 = volume_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tw * volume_info->tile_x; + int y0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_y; + int z0 = volume_info->tile_Oz + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_z; + int x1 = x0 + volume_info->tile_x; + int y1 = y0 + volume_info->tile_y; + int z1 = z0 + volume_info->tile_z; + /* + fprintf(stream, "\npack_nb tileno precno compno resno layno start_pos end_pos disto\n"); + */ + for(z = z0; z < z1; z++) { + for(y = y0; y < y1; y++) { + for(x = x0; x < x1; x++) { + for (compno = 0; compno < volume_info->comp; compno++) { + for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) { + int prec_max = volume_info->tile[tileno].prctno[0][resno] * volume_info->tile[tileno].prctno[1][resno]; + for (precno = 0; precno < prec_max; precno++) { + int pcnx = volume_info->tile[tileno].prctno[0][resno]; + int pcx = (int) pow( 2, volume_info->tile[tileno].prctsiz[0][resno] + volume_info->decomposition[0] - resno ); + int pcy = (int) pow( 2, volume_info->tile[tileno].prctsiz[1][resno] + volume_info->decomposition[1] - resno ); + int pcz = (int) pow( 2, volume_info->tile[tileno].prctsiz[2][resno] + volume_info->decomposition[2] - resno ); + int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx; + int precno_y = (int) floor( (float)precno/(float)pcnx ); + int precno_z = (int) floor( (float)precno/(float)pcnx ); + if (precno_z*pcz == z ) { + if (precno_y*pcy == y ) { + if (precno_x*pcx == x ) { + for (layno = 0; layno < volume_info->layer; layno++) { + start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos; + end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos; + disto = volume_info->tile[tileno].packet[pack_nb].disto; + fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n", + pack_nb, tileno, precno, compno, resno, layno, start_pos, end_pos, disto); + total_disto += disto; + pack_nb++; + } + } + } + } + } /* precno */ + } /* resno */ + } /* compno */ + } /* x = x0..x1 */ + } /* y = y0..y1 */ + } + } /* PCRL */ + else { /* CPRL */ + /* + fprintf(stream, "\npack_nb tileno compno precno resno layno start_pos end_pos disto\n"); + */ + for (compno = 0; compno < volume_info->comp; compno++) { + /* I suppose components have same XRsiz, YRsiz */ + int x0 = volume_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tw * volume_info->tile_x; + int y0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_y; + int z0 = volume_info->tile_Oz + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_z; + int x1 = x0 + volume_info->tile_x; + int y1 = y0 + volume_info->tile_y; + int z1 = z0 + volume_info->tile_z; + for(z = z0; z < z1; z++) { + for(y = y0; y < y1; y++) { + for(x = x0; x < x1; x++) { + for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) { + int prec_max = volume_info->tile[tileno].prctno[0][resno] * volume_info->tile[tileno].prctno[1][resno] * volume_info->tile[tileno].prctno[2][resno]; + for (precno = 0; precno < prec_max; precno++) { + int pcnx = volume_info->tile[tileno].prctno[0][resno]; + int pcny = volume_info->tile[tileno].prctno[1][resno]; + int pcx = (int) pow( 2, volume_info->tile[tileno].prctsiz[0][resno] + volume_info->decomposition[0] - resno ); + int pcy = (int) pow( 2, volume_info->tile[tileno].prctsiz[1][resno] + volume_info->decomposition[1] - resno ); + int pcz = (int) pow( 2, volume_info->tile[tileno].prctsiz[2][resno] + volume_info->decomposition[2] - resno ); + int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx; + int precno_y = (int) floor( (float)precno/(float)pcnx ); + int precno_z = 0; /*???*/ + if (precno_z*pcz == z ) { + if (precno_y*pcy == y ) { + if (precno_x*pcx == x ) { + for (layno = 0; layno < volume_info->layer; layno++) { + start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos; + end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos; + disto = volume_info->tile[tileno].packet[pack_nb].disto; + fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n", + pack_nb, tileno, compno, precno, resno, layno, start_pos, end_pos, disto); + total_disto += disto; + pack_nb++; + } + } + } + } + } /* precno */ + } /* resno */ + } /* x = x0..x1 */ + } /* y = y0..y1 */ + } /* z = z0..z1 */ + } /* comno */ + } /* CPRL */ + } /* tileno */ + + fprintf(stream, "SE_MAX\t%8e\n", volume_info->D_max); /* SE max */ + fprintf(stream, "SE_TOTAL\t%.8e\n", total_disto); /* SE totale */ + + + fclose(stream); + + return 1; +} + +bool j3d_encode(opj_j3d_t *j3d, opj_cio_t *cio, opj_volume_t *volume, char *index) { + int tileno, compno; + opj_volume_info_t *volume_info = NULL; + opj_cp_t *cp = NULL; + opj_tcd_t *tcd = NULL; /* TCD component */ + + j3d->cio = cio; + j3d->volume = volume; + cp = j3d->cp; + + /*j3d_dump_volume(stdout, volume); + j3d_dump_cp(stdout, volume, cp);*/ + + /* INDEX >> */ + volume_info = j3d->volume_info; + if (volume_info && cp->index_on) { + volume_info->index_on = cp->index_on; + volume_info->tile = (opj_tile_info_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(opj_tile_info_t)); + volume_info->volume_w = volume->x1 - volume->x0; + volume_info->volume_h = volume->y1 - volume->y0; + volume_info->volume_l = volume->z1 - volume->z0; + volume_info->prog = (&cp->tcps[0])->prg; + volume_info->tw = cp->tw; + volume_info->th = cp->th; + volume_info->tl = cp->tl; + volume_info->tile_x = cp->tdx; /* new version parser */ + volume_info->tile_y = cp->tdy; /* new version parser */ + volume_info->tile_z = cp->tdz; /* new version parser */ + volume_info->tile_Ox = cp->tx0; /* new version parser */ + volume_info->tile_Oy = cp->ty0; /* new version parser */ + volume_info->tile_Oz = cp->tz0; /* new version parser */ + volume_info->transform_format = cp->transform_format; + volume_info->encoding_format = cp->encoding_format; + volume_info->comp = volume->numcomps; + volume_info->layer = (&cp->tcps[0])->numlayers; + volume_info->decomposition[0] = (&cp->tcps[0])->tccps->numresolution[0] - 1; + volume_info->decomposition[1] = (&cp->tcps[0])->tccps->numresolution[1] - 1; + volume_info->decomposition[2] = (&cp->tcps[0])->tccps->numresolution[2] - 1; + volume_info->D_max = 0; /* ADD Marcela */ + } + /* << INDEX */ + + j3d_write_soc(j3d); + j3d_write_siz(j3d); + if (j3d->cinfo->codec_format == CODEC_J3D) { + j3d_write_cap(j3d); + j3d_write_zsi(j3d); + } + j3d_write_cod(j3d); + j3d_write_qcd(j3d); + for (compno = 0; compno < volume->numcomps; compno++) { + opj_tcp_t *tcp = &cp->tcps[0]; + if (tcp->tccps[compno].roishift) + j3d_write_rgn(j3d, compno, 0); + } + /*Optional 15444-2 markers*/ + if (j3d->cp->tcps->tccps[0].atk != NULL) + j3d_write_atk(j3d); + if (j3d->volume->comps[0].dcoffset != 0) + j3d_write_dco(j3d); + + if (j3d->cp->transform_format != TRF_2D_DWT || j3d->cp->encoding_format != ENCOD_2EB) + j3d_write_com(j3d); + + /* INDEX >> */ + if(volume_info && volume_info->index_on) { + volume_info->main_head_end = cio_tell(cio) - 1; + } + /* << INDEX */ + + /* create the tile encoder */ + tcd = tcd_create(j3d->cinfo); + + /* encode each tile */ + for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) { + opj_event_msg(j3d->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1, cp->tw * cp->th * cp->tl); + + j3d->curtileno = tileno; + + /* initialisation before tile encoding */ + if (tileno == 0) { + tcd_malloc_encode(tcd, volume, cp, j3d->curtileno); + } else { + tcd_init_encode(tcd, volume, cp, j3d->curtileno); + } + + /* INDEX >> */ + if(volume_info && volume_info->index_on) { + volume_info->tile[j3d->curtileno].num_tile = j3d->curtileno; + volume_info->tile[j3d->curtileno].start_pos = cio_tell(cio) + j3d->pos_correction; + } + /* << INDEX */ + + j3d_write_sot(j3d); + + for (compno = 1; compno < volume->numcomps; compno++) { + j3d_write_coc(j3d, compno); + j3d_write_qcc(j3d, compno); + } + + if (cp->tcps[tileno].numpocs) { + j3d_write_poc(j3d); + } + j3d_write_sod(j3d, tcd); //--> tcd_encode_tile + + /* INDEX >> */ + if(volume_info && volume_info->index_on) { + volume_info->tile[j3d->curtileno].end_pos = cio_tell(cio) + j3d->pos_correction - 1; + } + /* << INDEX */ + } + + /* destroy the tile encoder */ + tcd_free_encode(tcd); + tcd_destroy(tcd); + + j3d_write_eoc(j3d); + + /* Creation of the index file */ + if(volume_info && volume_info->index_on) { + if(!j3d_create_index(j3d, cio, volume_info, index)) { + opj_event_msg(j3d->cinfo, EVT_ERROR, "failed to create index file %s\n", index); + return false; + } + } + + return true; +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d.h new file mode 100755 index 0000000000..d9dcc8e328 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d.h @@ -0,0 +1,518 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __J3D_H +#define __J3D_H +/** +@file j3d.h +@brief The JPEG-2000 Codestream Reader/Writer (J3D) + +The functions in J3D.C have for goal to read/write the several parts of the codestream: markers and data. +*/ + +/** @defgroup J3D J3D - JPEG-2000 codestream reader/writer */ +/*@{*/ + +#define J3D_CP_CSTY_PRT 0x01 +#define J3D_CP_CSTY_SOP 0x02 +#define J3D_CP_CSTY_EPH 0x04 +#define J3D_CCP_CSTY_PRT 0x01 +/** Table A-8 */ +#define J3D_CCP_CBLKSTY_LAZY 0x01 /* Selective arithmetic coding bypass */ +#define J3D_CCP_CBLKSTY_RESET 0x02 /* Reset context probabilities on coding pass boundaries */ +#define J3D_CCP_CBLKSTY_TERMALL 0x04 /* Termination on each coding pass */ +#define J3D_CCP_CBLKSTY_VSC 0x08 /* Vertically causal context, add also hook for switching off and on 3D context models */ +#define J3D_CCP_CBLKSTY_PTERM 0x10 /* Predictable termination */ +#define J3D_CCP_CBLKSTY_SEGSYM 0x20 /* Segmentation symbols are used */ +#define J3D_CCP_CBLKSTY_3DCTXT 0x40 /* 3D context models (3D-EBCOT) vs 2D context models */ + +#define J3D_CCP_QNTSTY_NOQNT 0 /* Quantization style : no quantization */ +#define J3D_CCP_QNTSTY_SIQNT 1 /* Quantization style : scalar derived (values signalled only in LLL subband) */ +#define J3D_CCP_QNTSTY_SEQNT 2 /* Quantization style : scalar expounded (values signalled for each subband) */ + +/* ----------------------------------------------------------------------- */ + +#define J3D_MS_SOC 0xff4f /**< SOC marker value */ +#define J3D_MS_SOT 0xff90 /**< SOT marker value */ +#define J3D_MS_SOD 0xff93 /**< SOD marker value */ +#define J3D_MS_EOC 0xffd9 /**< EOC marker value */ +#define J3D_MS_CAP 0xff50 /**< CAP marker value */ +#define J3D_MS_SIZ 0xff51 /**< SIZ marker value */ +#define J3D_MS_ZSI 0xff54 /**< ZSI marker value */ +#define J3D_MS_COD 0xff52 /**< COD marker value */ +#define J3D_MS_COC 0xff53 /**< COC marker value */ +#define J3D_MS_RGN 0xff5e /**< RGN marker value */ +#define J3D_MS_QCD 0xff5c /**< QCD marker value */ +#define J3D_MS_QCC 0xff5d /**< QCC marker value */ +#define J3D_MS_POC 0xff5f /**< POC marker value */ +#define J3D_MS_TLM 0xff55 /**< TLM marker value */ +#define J3D_MS_PLM 0xff57 /**< PLM marker value */ +#define J3D_MS_PLT 0xff58 /**< PLT marker value */ +#define J3D_MS_PPM 0xff60 /**< PPM marker value */ +#define J3D_MS_PPT 0xff61 /**< PPT marker value */ +#define J3D_MS_SOP 0xff91 /**< SOP marker value */ +#define J3D_MS_EPH 0xff92 /**< EPH marker value */ +#define J3D_MS_CRG 0xff63 /**< CRG marker value */ +#define J3D_MS_COM 0xff64 /**< COM marker value */ +//15444-2 +#define J3D_MS_DCO 0xff70 /**< DCO marker value */ +#define J3D_MS_VMS 0xff71 /**< VMS marker value */ +#define J3D_MS_DFS 0xff72 /**< DFS marker value */ +#define J3D_MS_ADS 0xff73 /**< ADS marker value */ +#define J3D_MS_ATK 0xff79 /**< ATK marker value */ +#define J3D_MS_CBD 0xff78 /**< CBD marker value */ +#define J3D_MS_MCT 0xff74 /**< MCT marker value */ +#define J3D_MS_MCC 0xff75 /**< MCC marker value */ +#define J3D_MS_MCO 0xff77 /**< MCO marker value */ +#define J3D_MS_NLT 0xff76 /**< NLT marker value */ +#define J3D_MS_QPD 0xff5a /**< QPD marker value */ +#define J3D_MS_QPC 0xff5b /**< QPC marker value */ + +/* ----------------------------------------------------------------------- */ +/* Capability RSIZ parameter, extended */ +#define J3D_RSIZ_BASIC 0x0000 + +#define J3D_RSIZ_DCO 0x8001 /* Required */ +#define J3D_RSIZ_VSQNT 0x8002 +#define J3D_RSIZ_TCQNT 0x8004 +#define J3D_RSIZ_VMASK 0x8008 +#define J3D_RSIZ_SSOVL 0x8010 +#define J3D_RSIZ_ADECS 0x8020 +#define J3D_RSIZ_ATK 0x8040 /*Required*/ +#define J3D_RSIZ_SSYMK 0x8080 +#define J3D_RSIZ_MCT 0x8100 /*Not compatible with DCO*/ +#define J3D_RSIZ_NLT 0x8200 /*Required*/ +#define J3D_RSIZ_ASHAP 0x8400 +#define J3D_RSIZ_PRQNT 0x8800 + +#define J3D_CAP_10 0x00400000 +/* Arbitrary transformation kernel, 15444-2 */ +#define J3D_ATK_IRR 0 +#define J3D_ATK_REV 1 +#define J3D_ATK_ARB 0 +#define J3D_ATK_WS 1 +#define J3D_ATK_CON 0 +/* ----------------------------------------------------------------------- */ + +/** +Values that specify the status of the decoding process when decoding the main header. +These values may be combined with a | operator. +*/ +typedef enum J3D_STATUS { + /**< a SOC marker is expected */ + J3D_STATE_MHSOC = 0x0001, + /**< a SIZ marker is expected */ + J3D_STATE_MHSIZ = 0x0002, + /**< the decoding process is in the main header */ + J3D_STATE_MH = 0x0004, + /**< the decoding process is in a tile part header and expects a SOT marker */ + J3D_STATE_TPHSOT = 0x0008, + /**< the decoding process is in a tile part header */ + J3D_STATE_TPH = 0x0010, + /**< the EOC marker has just been read */ + J3D_STATE_MT = 0x0020, + /**< the decoding process must not expect a EOC marker because the codestream is truncated */ + J3D_STATE_NEOC = 0x0040 +} J3D_STATUS; + + + +/** +Arbitrary transformation kernel +*/ +typedef struct opj_atk { +/** index of wavelet kernel */ + int index; +/** Numerical type of scaling factor and lifting step parameters */ + int coeff_typ; +/** Wavelet filter category */ + int filt_cat; +/** Wavelet transformation type (REV/IRR) */ + int wt_typ; +/** Initial odd/even subsequence */ + int minit; +/** Boundary extension method (constant CON / whole-sample symmetric WS) */ + int exten; +/** Scaling factor. Only for wt_typ=IRR */ + double Katk; +/** Number of lifting steps */ + int Natk; +/** Offset for lifting step s. Only for filt_cat=ARB */ + int Oatk[256]; +/** Base 2 scaling exponent for lifting step s. Only for wt_typ=REV */ + int Eatk[256]; +/** Additive residue for lifting step s. Only for wt_typ=REV */ + int Batk[256]; +/** Number of lifting coefficients signaled for lifting step s */ + int LCatk[256]; +/** Lifting coefficient k for lifting step s */ + double Aatk[256][256]; +} opj_atk_t; + + +/** +Quantization stepsize +*/ +typedef struct opj_stepsize { +/** exponent */ + int expn; +/** mantissa */ + int mant; +} opj_stepsize_t; + +/** +Tile-component coding parameters +*/ +typedef struct opj_tccp { + /** coding style */ + int csty; + /** number of resolutions of x, y and z-axis */ + int numresolution[3]; + /** code-blocks width height & depth*/ + int cblk[3]; + /** code-block coding style */ + int cblksty; + /** 0: no ATK (only 9-7 or 5-3) 1: ATK defined WT*/ + int atk_wt[3]; + /** Arbitrary transformation kernel (15444-2)*/ + opj_atk_t *atk; + /** DWT identifier for x, y and z-axis (0:WT9-7 1:WT5-3 >1:WT-atk->index) */ + int dwtid[3]; + /** reversible/irreversible wavelet transfomation (0:irrev 1:reversible)*/ + int reversible; + /** quantisation style */ + int qntsty; + /** stepsizes used for quantization */ + opj_stepsize_t stepsizes[J3D_MAXBANDS]; + /** number of guard bits. Table A28 de 15444-1*/ + int numgbits; + /** Region Of Interest shift */ + int roishift; + /** precinct width heigth & depth*/ + int prctsiz[3][J3D_MAXRLVLS]; +} opj_tccp_t; + +/** +Tile coding parameters : coding/decoding parameters common to all tiles +(information like COD, COC in main header) +*/ +typedef struct opj_tcp { +/** 1 : first part-tile of a tile */ + int first; + /** coding style */ + int csty; + /** progression order */ + OPJ_PROG_ORDER prg; + /** number of layers */ + int numlayers; + /** multi-component transform identifier */ + int mct; + /** rates of layers */ + float rates[100]; + /** number of progression order changes */ + int numpocs; + /** indicates if a POC marker has been used O:NO, 1:YES */ + int POC; + /** progression order changes */ + opj_poc_t pocs[J3D_MAXRLVLS - 1]; + /** add fixed_quality */ + float distoratio[100]; + /** tile-component coding parameters */ + opj_tccp_t *tccps; +/** packet header store there for futur use in t2_decode_packet */ + unsigned char *ppt_data; + /** pointer remaining on the first byte of the first header if ppt is used */ + unsigned char *ppt_data_first; + /** If ppt == 1 --> there was a PPT marker for the present tile */ + int ppt; + /** used in case of multiple marker PPT (number of info already stored) */ + int ppt_store; + int ppt_len; +} opj_tcp_t; + +/** +Coding parameters +*/ +typedef struct opj_cp { +/** transform format 0: 2DWT, 1: 2D1P, 2: 3DWT, 3: 3RLS */ + OPJ_TRANSFORM transform_format; + /** entropy coding format 0: 2EB, 1: 3EB, 2: 2GR, 3: 3GR, 4: GRI*/ + OPJ_ENTROPY_CODING encoding_format; + /** allocation by rate/distortion */ + int disto_alloc; + /** allocation by fixed layer */ + int fixed_alloc; + /** add fixed_quality */ + int fixed_quality; + /** Rsiz: capabilities */ + int rsiz; + /** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, volume is decoded to the full resolution */ + int reduce[3]; + /** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */ + int layer; + /** 0 = no index || 1 = index */ + int index_on; + /** Big-Endian/Little-endian order */ + int bigendian; + /** XTOsiz */ + int tx0; + /** YTOsiz */ + int ty0; + /** ZTOsiz */ + int tz0; + /** XTsiz */ + int tdx; + /** YTsiz */ + int tdy; + /** ZTsiz */ + int tdz; + /** comment for coding */ + char *comment; + /** number of tiles in width, heigth and depth */ + int tw; + int th; + int tl; + /** ID number of the tiles present in the codestream */ + int *tileno; + /** size of the vector tileno */ + int tileno_size; + /** tile coding parameters */ + opj_tcp_t *tcps; + /** fixed layer */ + int *matrice; + + /** packet header store there for futur use in t2_decode_packet */ + unsigned char *ppm_data; + /** pointer remaining on the first byte of the first header if ppm is used */ + unsigned char *ppm_data_first; + /** if ppm == 1 --> there was a PPM marker for the present tile */ + int ppm; + /** use in case of multiple marker PPM (number of info already store) */ + int ppm_store; + /** use in case of multiple marker PPM (case on non-finished previous info) */ + int ppm_previous; + int ppm_len; +} opj_cp_t; + +/** +Information concerning a packet inside tile +*/ +typedef struct opj_packet_info { + /** start position */ + int start_pos; + /** end position */ + int end_pos; + /** distorsion introduced */ + double disto; +} opj_packet_info_t; + +/** +Index structure : information regarding tiles inside volume +*/ +typedef struct opj_tile_info { + /** value of thresh for each layer by tile cfr. Marcela */ + double *thresh; + /** number of tile */ + int num_tile; + /** start position */ + int start_pos; + /** end position of the header */ + int end_header; + /** end position */ + int end_pos; + /** precinct number for each resolution level (width, heigth and depth) */ + int prctno[3][J3D_MAXRLVLS]; + /** precinct size (in power of 2), in X for each resolution level */ + int prctsiz[3][J3D_MAXRLVLS]; + /** information concerning packets inside tile */ + opj_packet_info_t *packet; + + /** add fixed_quality */ + int nbpix; + /** add fixed_quality */ + double distotile; +} opj_tile_info_t; + +/** +Index structure +*/ +typedef struct opj_volume_info { + + /** transform format 0: 2DWT, 1: 2D1P, 2: 3DWT, 3: 3RLS */ + OPJ_TRANSFORM transform_format; + /** output file format 0: 2EB, 1: 3EB, 2: 2GR, 3: 3GR, 4: GRI*/ + OPJ_ENTROPY_CODING encoding_format; /** 0 = no index || 1 = index */ + int index_on; + /** 0 = wt 9-7 || 1 = wt 5-3 || >=2 wt atk defined */ + int dwtid[3]; + /** maximum distortion reduction on the whole volume (add for Marcela) */ + double D_max; + /** packet number */ + int num; + /** writing the packet in the index with t2_encode_packets */ + int index_write; + /** volume width, height and depth */ + int volume_w; + int volume_h; + int volume_l; + /** progression order */ + OPJ_PROG_ORDER prog; + /** tile size in x, y and z */ + int tile_x; + int tile_y; + int tile_z; + /** tile origin in x, y and z */ + int tile_Ox; + int tile_Oy; + int tile_Oz; + /** number of tiles in X, Y and Z */ + int tw; + int th; + int tl; + /** component numbers */ + int comp; + /** number of layer */ + int layer; + /** number of decomposition in X, Y and Z*/ + int decomposition[3]; + /** DC offset (15444-2) */ + int dcoffset; + /** main header position */ + int main_head_end; + /** codestream's size */ + int codestream_size; + /** information regarding tiles inside volume */ + opj_tile_info_t *tile; +} opj_volume_info_t; + +/** +JPEG-2000 codestream reader/writer +*/ +typedef struct opj_j3d { + /** codec context */ + opj_common_ptr cinfo; + /** locate in which part of the codestream the decoder is (main header, tile header, end) */ + int state; + /** number of the tile curently concern by coding/decoding */ + int curtileno; + /** locate the position of the end of the tile in the codestream, used to detect a truncated codestream (in j3d_read_sod) */ + unsigned char *eot; + /** locate the start position of the SOT marker of the current coded tile: */ + int sot_start; + /* after encoding the tile, a jump (in j3d_write_sod) is done to the SOT marker to store the value of its length. */ + int sod_start; + /** as the J3D-file is written in several parts during encoding, it enables to make the right correction in position return by cio_tell */ + int pos_correction; + /** array used to store the data of each tile */ + unsigned char **tile_data; + /** array used to store the length of each tile */ + int *tile_len; + + /** decompression only : store decoding parameters common to all tiles */ + opj_tcp_t *default_tcp; + /** pointer to the encoded / decoded volume */ + opj_volume_t *volume; + /** pointer to the coding parameters */ + opj_cp_t *cp; + /** helper used to write the index file */ + opj_volume_info_t *volume_info; + /** pointer to the byte i/o stream */ + opj_cio_t *cio; +} opj_j3d_t; + +/** @name Funciones generales */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Creates a J3D decompression structure +@param cinfo Codec context info +@return Returns a handle to a J3D decompressor if successful, returns NULL otherwise +*/ +opj_j3d_t* j3d_create_decompress(opj_common_ptr cinfo); +/** +Destroy a J3D decompressor handle +@param j3d J3D decompressor handle to destroy +*/ +void j3d_destroy_decompress(opj_j3d_t *j3d); +/** +Setup the decoder decoding parameters using user parameters. +Decoding parameters are returned in j3d->cp. +@param j3d J3D decompressor handle +@param parameters decompression parameters +*/ +void j3d_setup_decoder(opj_j3d_t *j3d, opj_dparameters_t *parameters); +/** +Decode an volume from a JPEG-2000 codestream +@param j3d J3D decompressor handle +@param cio Input buffer stream +@return Returns a decoded volume if successful, returns NULL otherwise +*/ +opj_volume_t* j3d_decode(opj_j3d_t *j3d, opj_cio_t *cio); +/** +Decode an volume form a JPT-stream (JPEG 2000, JPIP) +@param j3d J3D decompressor handle +@param cio Input buffer stream +@return Returns a decoded volume if successful, returns NULL otherwise +*/ +opj_volume_t* j3d_decode_jpt_stream(opj_j3d_t *j3d, opj_cio_t *cio); +/** +Creates a J3D compression structure +@param cinfo Codec context info +@return Returns a handle to a J3D compressor if successful, returns NULL otherwise +*/ +opj_j3d_t* j3d_create_compress(opj_common_ptr cinfo); +/** +Destroy a J3D compressor handle +@param j3d J3D compressor handle to destroy +*/ +void j3d_destroy_compress(opj_j3d_t *j3d); +/** +Setup the encoder parameters using the current volume and using user parameters. +Coding parameters are returned in j3d->cp. +@param j3d J3D compressor handle +@param parameters compression parameters +@param volume input filled volume +*/ +void j3d_setup_encoder(opj_j3d_t *j3d, opj_cparameters_t *parameters, opj_volume_t *volume); +/** +Encode an volume into a JPEG-2000 codestream +@param j3d J3D compressor handle +@param cio Output buffer stream +@param volume Volume to encode +@param index Name of the index file if required, NULL otherwise +@return Returns true if successful, returns false otherwise +*/ +bool j3d_encode(opj_j3d_t *j3d, opj_cio_t *cio, opj_volume_t *volume, char *index); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __J3D_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d_lib.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d_lib.c new file mode 100755 index 0000000000..b2303991f5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d_lib.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef _WIN32 +#include +#else +#include +#include +#include +#endif /* _WIN32 */ +#include "opj_includes.h" + +double opj_clock() { +#ifdef _WIN32 + /* WIN32: use QueryPerformance (very accurate) */ + LARGE_INTEGER freq , t ; + /* freq is the clock speed of the CPU */ + QueryPerformanceFrequency(&freq) ; + /* cout << "freq = " << ((double) freq.QuadPart) << endl; */ + /* t is the high resolution performance counter (see MSDN) */ + QueryPerformanceCounter ( & t ) ; + return ( t.QuadPart /(double) freq.QuadPart ) ; +#else + /* Unix or Linux: use resource usage */ + struct rusage t; + double procTime; + /* (1) Get the rusage data structure at this moment (man getrusage) */ + getrusage(0,&t); + /* (2) What is the elapsed time ? - CPU time = User time + System time */ + /* (2a) Get the seconds */ + procTime = t.ru_utime.tv_sec + t.ru_stime.tv_sec; + /* (2b) More precisely! Get the microseconds part ! */ + return ( procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ; +#endif /* _WIN32 */ +} + +void* opj_malloc( size_t size ) { + void *memblock = malloc(size); + if(memblock) { + memset(memblock, 0, size); + } + return memblock; +} + +void* opj_realloc( void *memblock, size_t size ) { + return realloc(memblock, size); +} + +void opj_free( void *memblock ) { + free(memblock); +} + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d_lib.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d_lib.h new file mode 100755 index 0000000000..45b283097e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/jp3d_lib.h @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __J3D_LIB_H +#define __J3D_LIB_H +/** +@file jp3d_lib.h +@brief Internal functions + +The functions in JP3D_LIB.C are internal utilities mainly used for memory management. +*/ + +/** @defgroup MISC MISC - Miscellaneous internal functions */ +/*@{*/ + +/** @name Funciones generales */ +/*@{*/ +/* ----------------------------------------------------------------------- */ + +/** +Difference in successive opj_clock() calls tells you the elapsed time +@return Returns time in seconds +*/ +double opj_clock(); + +/** +Allocate a memory block with elements initialized to 0 +@param size Bytes to allocate +@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available +*/ +void* opj_malloc( size_t size ); + +/** +Reallocate memory blocks. +@param memblock Pointer to previously allocated memory block +@param size New size in bytes +@return Returns a void pointer to the reallocated (and possibly moved) memory block +*/ +void* opj_realloc( void *memblock, size_t size ); + +/** +Deallocates or frees a memory block. +@param memblock Previously allocated memory block to be freed +*/ +void opj_free( void *memblock ); + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __J3D_LIB_H */ + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mct.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mct.c new file mode 100755 index 0000000000..be4b875e99 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mct.c @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/* */ +/* This table contains the norms of the basis function of the reversible MCT. */ +/* */ +static const double mct_norms[3] = { 1.732, .8292, .8292 }; + +/* */ +/* This table contains the norms of the basis function of the irreversible MCT. */ +/* */ +static const double mct_norms_real[3] = { 1.732, 1.805, 1.573 }; + +/* */ +/* Foward reversible MCT. */ +/* */ +void mct_encode(int *c0, int *c1, int *c2, int n) { + int i; + for (i = 0; i < n; i++) { + int r, g, b, y, u, v; + r = c0[i]; + g = c1[i]; + b = c2[i]; + y = (r + (g << 1) + b) >> 2; + u = b - g; + v = r - g; + c0[i] = y; + c1[i] = u; + c2[i] = v; + } +} + +/* */ +/* Inverse reversible MCT. */ +/* */ +void mct_decode(int *c0, int *c1, int *c2, int n) { + int i; + for (i = 0; i < n; i++) { + int y, u, v, r, g, b; + y = c0[i]; + u = c1[i]; + v = c2[i]; + g = y - ((u + v) >> 2); + r = v + g; + b = u + g; + c0[i] = r; + c1[i] = g; + c2[i] = b; + } +} + +/* */ +/* Get norm of basis function of reversible MCT. */ +/* */ +double mct_getnorm(int compno) { + return mct_norms[compno]; +} + +/* */ +/* Foward irreversible MCT. */ +/* */ +void mct_encode_real(int *c0, int *c1, int *c2, int n) { + int i; + for (i = 0; i < n; i++) { + int r, g, b, y, u, v; + r = c0[i]; + g = c1[i]; + b = c2[i]; + y = fix_mul(r, 2449) + fix_mul(g, 4809) + fix_mul(b, 934); + u = -fix_mul(r, 1382) - fix_mul(g, 2714) + fix_mul(b, 4096); + v = fix_mul(r, 4096) - fix_mul(g, 3430) - fix_mul(b, 666); + c0[i] = y; + c1[i] = u; + c2[i] = v; + } +} + +/* */ +/* Inverse irreversible MCT. */ +/* */ +void mct_decode_real(int *c0, int *c1, int *c2, int n) { + int i; + for (i = 0; i < n; i++) { + int y, u, v, r, g, b; + y = c0[i]; + u = c1[i]; + v = c2[i]; + r = y + fix_mul(v, 11485); + g = y - fix_mul(u, 2819) - fix_mul(v, 5850); + b = y + fix_mul(u, 14516); + c0[i] = r; + c1[i] = g; + c2[i] = b; + } +} + +/* */ +/* Get norm of basis function of irreversible MCT. */ +/* */ +double mct_getnorm_real(int compno) { + return mct_norms_real[compno]; +} diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mct.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mct.h new file mode 100755 index 0000000000..81513f7c8e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mct.h @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __MCT_H +#define __MCT_H +/** +@file mct.h +@brief Implementation of a multi-component transforms (MCT) + +The functions in MCT.C have for goal to realize reversible and irreversible multicomponent +transform. The functions in MCT.C are used by some function in TCD.C. +*/ + +/** @defgroup MCT MCT - Implementation of a multi-component transform */ +/*@{*/ + +/** @name Funciones generales */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Apply a reversible multi-component transform to an image +@param c0 Samples for red component +@param c1 Samples for green component +@param c2 Samples blue component +@param n Number of samples for each component +*/ +void mct_encode(int *c0, int *c1, int *c2, int n); +/** +Apply a reversible multi-component inverse transform to an image +@param c0 Samples for luminance component +@param c1 Samples for red chrominance component +@param c2 Samples for blue chrominance component +@param n Number of samples for each component +*/ +void mct_decode(int *c0, int *c1, int *c2, int n); +/** +Get norm of the basis function used for the reversible multi-component transform +@param compno Number of the component (0->Y, 1->U, 2->V) +@return +*/ +double mct_getnorm(int compno); + +/** +Apply an irreversible multi-component transform to an image +@param c0 Samples for red component +@param c1 Samples for green component +@param c2 Samples blue component +@param n Number of samples for each component +*/ +void mct_encode_real(int *c0, int *c1, int *c2, int n); +/** +Apply an irreversible multi-component inverse transform to an image +@param c0 Samples for luminance component +@param c1 Samples for red chrominance component +@param c2 Samples for blue chrominance component +@param n Number of samples for each component +*/ +void mct_decode_real(int *c0, int *c1, int *c2, int n); +/** +Get norm of the basis function used for the irreversible multi-component transform +@param compno Number of the component (0->Y, 1->U, 2->V) +@return +*/ +double mct_getnorm_real(int compno); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __MCT_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mqc.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mqc.c new file mode 100755 index 0000000000..4117bf1fd7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mqc.c @@ -0,0 +1,548 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup MQC MQC - Implementation of an MQ-Coder */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +/** +Output a byte, doing bit-stuffing if necessary. +After a 0xff byte, the next byte must be smaller than 0x90. +@param mqc MQC handle +*/ +static void mqc_byteout(opj_mqc_t *mqc); +/** +Renormalize mqc->a and mqc->c while encoding, so that mqc->a stays between 0x8000 and 0x10000 +@param mqc MQC handle +*/ +static void mqc_renorme(opj_mqc_t *mqc); +/** +Encode the most probable symbol +@param mqc MQC handle +*/ +static void mqc_codemps(opj_mqc_t *mqc); +/** +Encode the most least symbol +@param mqc MQC handle +*/ +static void mqc_codelps(opj_mqc_t *mqc); +/** +Fill mqc->c with 1's for flushing +@param mqc MQC handle +*/ +static void mqc_setbits(opj_mqc_t *mqc); +/** +Exchange MPS with LPS +@param mqc MQC handle +@return +*/ +static int mqc_mpsexchange(opj_mqc_t *mqc); +/** +Exchange LPS with MPS +@param mqc MQC handle +@return +*/ +static int mqc_lpsexchange(opj_mqc_t *mqc); +/** +Input a byte +@param mqc MQC handle +*/ +static void mqc_bytein(opj_mqc_t *mqc); +/** +Renormalize mqc->a and mqc->c while decoding +@param mqc MQC handle +*/ +static void mqc_renormd(opj_mqc_t *mqc); + +/*@}*/ + +/*@}*/ + +/* */ +/* This array defines all the possible states for a context. */ +/* */ +static opj_mqc_state_t mqc_states[47 * 2] = { + {0x5601, 0, &mqc_states[2], &mqc_states[3]}, + {0x5601, 1, &mqc_states[3], &mqc_states[2]}, + {0x3401, 0, &mqc_states[4], &mqc_states[12]}, + {0x3401, 1, &mqc_states[5], &mqc_states[13]}, + {0x1801, 0, &mqc_states[6], &mqc_states[18]}, + {0x1801, 1, &mqc_states[7], &mqc_states[19]}, + {0x0ac1, 0, &mqc_states[8], &mqc_states[24]}, + {0x0ac1, 1, &mqc_states[9], &mqc_states[25]}, + {0x0521, 0, &mqc_states[10], &mqc_states[58]}, + {0x0521, 1, &mqc_states[11], &mqc_states[59]}, + {0x0221, 0, &mqc_states[76], &mqc_states[66]}, + {0x0221, 1, &mqc_states[77], &mqc_states[67]}, + {0x5601, 0, &mqc_states[14], &mqc_states[13]}, + {0x5601, 1, &mqc_states[15], &mqc_states[12]}, + {0x5401, 0, &mqc_states[16], &mqc_states[28]}, + {0x5401, 1, &mqc_states[17], &mqc_states[29]}, + {0x4801, 0, &mqc_states[18], &mqc_states[28]}, + {0x4801, 1, &mqc_states[19], &mqc_states[29]}, + {0x3801, 0, &mqc_states[20], &mqc_states[28]}, + {0x3801, 1, &mqc_states[21], &mqc_states[29]}, + {0x3001, 0, &mqc_states[22], &mqc_states[34]}, + {0x3001, 1, &mqc_states[23], &mqc_states[35]}, + {0x2401, 0, &mqc_states[24], &mqc_states[36]}, + {0x2401, 1, &mqc_states[25], &mqc_states[37]}, + {0x1c01, 0, &mqc_states[26], &mqc_states[40]}, + {0x1c01, 1, &mqc_states[27], &mqc_states[41]}, + {0x1601, 0, &mqc_states[58], &mqc_states[42]}, + {0x1601, 1, &mqc_states[59], &mqc_states[43]}, + {0x5601, 0, &mqc_states[30], &mqc_states[29]}, + {0x5601, 1, &mqc_states[31], &mqc_states[28]}, + {0x5401, 0, &mqc_states[32], &mqc_states[28]}, + {0x5401, 1, &mqc_states[33], &mqc_states[29]}, + {0x5101, 0, &mqc_states[34], &mqc_states[30]}, + {0x5101, 1, &mqc_states[35], &mqc_states[31]}, + {0x4801, 0, &mqc_states[36], &mqc_states[32]}, + {0x4801, 1, &mqc_states[37], &mqc_states[33]}, + {0x3801, 0, &mqc_states[38], &mqc_states[34]}, + {0x3801, 1, &mqc_states[39], &mqc_states[35]}, + {0x3401, 0, &mqc_states[40], &mqc_states[36]}, + {0x3401, 1, &mqc_states[41], &mqc_states[37]}, + {0x3001, 0, &mqc_states[42], &mqc_states[38]}, + {0x3001, 1, &mqc_states[43], &mqc_states[39]}, + {0x2801, 0, &mqc_states[44], &mqc_states[38]}, + {0x2801, 1, &mqc_states[45], &mqc_states[39]}, + {0x2401, 0, &mqc_states[46], &mqc_states[40]}, + {0x2401, 1, &mqc_states[47], &mqc_states[41]}, + {0x2201, 0, &mqc_states[48], &mqc_states[42]}, + {0x2201, 1, &mqc_states[49], &mqc_states[43]}, + {0x1c01, 0, &mqc_states[50], &mqc_states[44]}, + {0x1c01, 1, &mqc_states[51], &mqc_states[45]}, + {0x1801, 0, &mqc_states[52], &mqc_states[46]}, + {0x1801, 1, &mqc_states[53], &mqc_states[47]}, + {0x1601, 0, &mqc_states[54], &mqc_states[48]}, + {0x1601, 1, &mqc_states[55], &mqc_states[49]}, + {0x1401, 0, &mqc_states[56], &mqc_states[50]}, + {0x1401, 1, &mqc_states[57], &mqc_states[51]}, + {0x1201, 0, &mqc_states[58], &mqc_states[52]}, + {0x1201, 1, &mqc_states[59], &mqc_states[53]}, + {0x1101, 0, &mqc_states[60], &mqc_states[54]}, + {0x1101, 1, &mqc_states[61], &mqc_states[55]}, + {0x0ac1, 0, &mqc_states[62], &mqc_states[56]}, + {0x0ac1, 1, &mqc_states[63], &mqc_states[57]}, + {0x09c1, 0, &mqc_states[64], &mqc_states[58]}, + {0x09c1, 1, &mqc_states[65], &mqc_states[59]}, + {0x08a1, 0, &mqc_states[66], &mqc_states[60]}, + {0x08a1, 1, &mqc_states[67], &mqc_states[61]}, + {0x0521, 0, &mqc_states[68], &mqc_states[62]}, + {0x0521, 1, &mqc_states[69], &mqc_states[63]}, + {0x0441, 0, &mqc_states[70], &mqc_states[64]}, + {0x0441, 1, &mqc_states[71], &mqc_states[65]}, + {0x02a1, 0, &mqc_states[72], &mqc_states[66]}, + {0x02a1, 1, &mqc_states[73], &mqc_states[67]}, + {0x0221, 0, &mqc_states[74], &mqc_states[68]}, + {0x0221, 1, &mqc_states[75], &mqc_states[69]}, + {0x0141, 0, &mqc_states[76], &mqc_states[70]}, + {0x0141, 1, &mqc_states[77], &mqc_states[71]}, + {0x0111, 0, &mqc_states[78], &mqc_states[72]}, + {0x0111, 1, &mqc_states[79], &mqc_states[73]}, + {0x0085, 0, &mqc_states[80], &mqc_states[74]}, + {0x0085, 1, &mqc_states[81], &mqc_states[75]}, + {0x0049, 0, &mqc_states[82], &mqc_states[76]}, + {0x0049, 1, &mqc_states[83], &mqc_states[77]}, + {0x0025, 0, &mqc_states[84], &mqc_states[78]}, + {0x0025, 1, &mqc_states[85], &mqc_states[79]}, + {0x0015, 0, &mqc_states[86], &mqc_states[80]}, + {0x0015, 1, &mqc_states[87], &mqc_states[81]}, + {0x0009, 0, &mqc_states[88], &mqc_states[82]}, + {0x0009, 1, &mqc_states[89], &mqc_states[83]}, + {0x0005, 0, &mqc_states[90], &mqc_states[84]}, + {0x0005, 1, &mqc_states[91], &mqc_states[85]}, + {0x0001, 0, &mqc_states[90], &mqc_states[86]}, + {0x0001, 1, &mqc_states[91], &mqc_states[87]}, + {0x5601, 0, &mqc_states[92], &mqc_states[92]}, + {0x5601, 1, &mqc_states[93], &mqc_states[93]}, +}; + +/* +========================================================== + local functions +========================================================== +*/ + +static void mqc_byteout(opj_mqc_t *mqc) { + if (*mqc->bp == 0xff) { + mqc->bp++; + *mqc->bp = mqc->c >> 20; + mqc->c &= 0xfffff; + mqc->ct = 7; + } else { + if ((mqc->c & 0x8000000) == 0) { /* ((mqc->c&0x8000000)==0) CHANGE */ + mqc->bp++; + *mqc->bp = mqc->c >> 19; + mqc->c &= 0x7ffff; + mqc->ct = 8; + } else { + (*mqc->bp)++; + if (*mqc->bp == 0xff) { + mqc->c &= 0x7ffffff; + mqc->bp++; + *mqc->bp = mqc->c >> 20; + mqc->c &= 0xfffff; + mqc->ct = 7; + } else { + mqc->bp++; + *mqc->bp = mqc->c >> 19; + mqc->c &= 0x7ffff; + mqc->ct = 8; + } + } + } +} + +static void mqc_renorme(opj_mqc_t *mqc) { + do { + mqc->a <<= 1; + mqc->c <<= 1; + mqc->ct--; + if (mqc->ct == 0) { + mqc_byteout(mqc); + } + } while ((mqc->a & 0x8000) == 0); +} + +static void mqc_codemps(opj_mqc_t *mqc) { + mqc->a -= (*mqc->curctx)->qeval; + if ((mqc->a & 0x8000) == 0) { + if (mqc->a < (*mqc->curctx)->qeval) { + mqc->a = (*mqc->curctx)->qeval; + } else { + mqc->c += (*mqc->curctx)->qeval; + } + *mqc->curctx = (*mqc->curctx)->nmps; + mqc_renorme(mqc); + } else { + mqc->c += (*mqc->curctx)->qeval; + } +} + +static void mqc_codelps(opj_mqc_t *mqc) { + mqc->a -= (*mqc->curctx)->qeval; + if (mqc->a < (*mqc->curctx)->qeval) { + mqc->c += (*mqc->curctx)->qeval; + } else { + mqc->a = (*mqc->curctx)->qeval; + } + *mqc->curctx = (*mqc->curctx)->nlps; + mqc_renorme(mqc); +} + +static void mqc_setbits(opj_mqc_t *mqc) { + unsigned int tempc = mqc->c + mqc->a; + mqc->c |= 0xffff; + if (mqc->c >= tempc) { + mqc->c -= 0x8000; + } +} + +static int mqc_mpsexchange(opj_mqc_t *mqc) { + int d; + if (mqc->a < (*mqc->curctx)->qeval) { + d = 1 - (*mqc->curctx)->mps; + *mqc->curctx = (*mqc->curctx)->nlps; + } else { + d = (*mqc->curctx)->mps; + *mqc->curctx = (*mqc->curctx)->nmps; + } + + return d; +} + +static int mqc_lpsexchange(opj_mqc_t *mqc) { + int d; + if (mqc->a < (*mqc->curctx)->qeval) { + mqc->a = (*mqc->curctx)->qeval; + d = (*mqc->curctx)->mps; + *mqc->curctx = (*mqc->curctx)->nmps; + } else { + mqc->a = (*mqc->curctx)->qeval; + d = 1 - (*mqc->curctx)->mps; + *mqc->curctx = (*mqc->curctx)->nlps; + } + + return d; +} + +static void mqc_bytein(opj_mqc_t *mqc) { + if (mqc->bp != mqc->end) { + unsigned int c; + if (mqc->bp + 1 != mqc->end) { + c = *(mqc->bp + 1); + } else { + c = 0xff; + } + if (*mqc->bp == 0xff) { + if (c > 0x8f) { + mqc->c += 0xff00; + mqc->ct = 8; + } else { + mqc->bp++; + mqc->c += c << 9; + mqc->ct = 7; + } + } else { + mqc->bp++; + mqc->c += c << 8; + mqc->ct = 8; + } + } else { + mqc->c += 0xff00; + mqc->ct = 8; + } +} + +static void mqc_renormd(opj_mqc_t *mqc) { + do { + if (mqc->ct == 0) { + mqc_bytein(mqc); + } + mqc->a <<= 1; + mqc->c <<= 1; + mqc->ct--; + } while (mqc->a < 0x8000); +} + +/* +========================================================== + MQ-Coder interface +========================================================== +*/ + +opj_mqc_t* mqc_create() { + opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t)); + return mqc; +} + +void mqc_destroy(opj_mqc_t *mqc) { + if(mqc) { + opj_free(mqc); + } +} + +int mqc_numbytes(opj_mqc_t *mqc) { + return mqc->bp - mqc->start; +} + +void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp) { + mqc_setcurctx(mqc, 0); + mqc->a = 0x8000; + mqc->c = 0; + mqc->bp = bp - 1; + mqc->ct = 12; + if (*mqc->bp == 0xff) { + mqc->ct = 13; + } + mqc->start = bp; +} + +void mqc_setcurctx(opj_mqc_t *mqc, int ctxno) { + mqc->curctx = &mqc->ctxs[ctxno]; +} + +void mqc_encode(opj_mqc_t *mqc, int d) { + if ((*mqc->curctx)->mps == d) { + mqc_codemps(mqc); + } else { + mqc_codelps(mqc); + } +} + +void mqc_flush(opj_mqc_t *mqc) { + mqc_setbits(mqc); + mqc->c <<= mqc->ct; + mqc_byteout(mqc); + mqc->c <<= mqc->ct; + mqc_byteout(mqc); + + if (*mqc->bp != 0xff) { + mqc->bp++; + } +} + +void mqc_bypass_init_enc(opj_mqc_t *mqc) { + mqc->c = 0; + mqc->ct = 8; + /*if (*mqc->bp == 0xff) { + mqc->ct = 7; + } */ +} + +void mqc_bypass_enc(opj_mqc_t *mqc, int d) { + mqc->ct--; + mqc->c = mqc->c + (d << mqc->ct); + if (mqc->ct == 0) { + mqc->bp++; + *mqc->bp = mqc->c; + mqc->ct = 8; + if (*mqc->bp == 0xff) { + mqc->ct = 7; + } + mqc->c = 0; + } +} + +int mqc_bypass_flush_enc(opj_mqc_t *mqc) { + unsigned char bit_padding; + + bit_padding = 0; + + if (mqc->ct != 0) { + while (mqc->ct > 0) { + mqc->ct--; + mqc->c += bit_padding << mqc->ct; + bit_padding = (bit_padding + 1) & 0x01; + } + mqc->bp++; + *mqc->bp = mqc->c; + mqc->ct = 8; + mqc->c = 0; + } + + return 1; +} + +void mqc_reset_enc(opj_mqc_t *mqc) { + mqc_resetstates(mqc); + mqc_setstate(mqc, 18, 0, 46); + mqc_setstate(mqc, 0, 0, 3); + mqc_setstate(mqc, 1, 0, 4); +} + +void mqc_reset_enc_3(opj_mqc_t *mqc) { + mqc_resetstates(mqc); + mqc_setstate(mqc, T1_3D_CTXNO_UNI, 0, 46); + mqc_setstate(mqc, T1_3D_CTXNO_AGG, 0, 3); + mqc_setstate(mqc, T1_3D_CTXNO_ZC, 0, 4); +} + +int mqc_restart_enc(opj_mqc_t *mqc) { + int correction = 1; + + /* */ + int n = 27 - 15 - mqc->ct; + mqc->c <<= mqc->ct; + while (n > 0) { + mqc_byteout(mqc); + n -= mqc->ct; + mqc->c <<= mqc->ct; + } + mqc_byteout(mqc); + + return correction; +} + +void mqc_restart_init_enc(opj_mqc_t *mqc) { + /* */ + mqc_setcurctx(mqc, 0); + mqc->a = 0x8000; + mqc->c = 0; + mqc->ct = 12; + mqc->bp--; + if (*mqc->bp == 0xff) { + mqc->ct = 13; + } +} + +void mqc_erterm_enc(opj_mqc_t *mqc) { + int k = 11 - mqc->ct + 1; + + while (k > 0) { + mqc->c <<= mqc->ct; + mqc->ct = 0; + mqc_byteout(mqc); + k -= mqc->ct; + } + + if (*mqc->bp != 0xff) { + mqc_byteout(mqc); + } +} + +void mqc_segmark_enc(opj_mqc_t *mqc) { + int i; + mqc_setcurctx(mqc, 18); + + for (i = 1; i < 5; i++) { + mqc_encode(mqc, i % 2); + } +} + +void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len) { + mqc_setcurctx(mqc, 0); + mqc->start = bp; + mqc->end = bp + len; + mqc->bp = bp; + if (len==0) mqc->c = 0xff << 16; + else mqc->c = *mqc->bp << 16; + mqc_bytein(mqc); + mqc->c <<= 7; + mqc->ct -= 7; + mqc->a = 0x8000; +} + +int mqc_decode(opj_mqc_t *mqc) { + int d; + mqc->a -= (*mqc->curctx)->qeval; + if ((mqc->c >> 16) < (*mqc->curctx)->qeval) { + d = mqc_lpsexchange(mqc); + mqc_renormd(mqc); + } else { + mqc->c -= (*mqc->curctx)->qeval << 16; + if ((mqc->a & 0x8000) == 0) { + d = mqc_mpsexchange(mqc); + mqc_renormd(mqc); + } else { + d = (*mqc->curctx)->mps; + } + } + + return d; +} + +void mqc_resetstates(opj_mqc_t *mqc) { + int i; + for (i = 0; i < MQC_NUMCTXS; i++) { + mqc->ctxs[i] = mqc_states; + } +} + +void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob) { + mqc->ctxs[ctxno] = &mqc_states[msb + (prob << 1)]; +} + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mqc.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mqc.h new file mode 100755 index 0000000000..67cfc0081e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/mqc.h @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __MQC_H +#define __MQC_H +/** +@file mqc.h +@brief Implementation of an MQ-Coder (MQC) + +The functions in MQC.C have for goal to realize the MQ-coder operations. The functions +in MQC.C are used by some function in T1.C. +*/ + +/** @defgroup MQC MQC - Implementation of an MQ-Coder */ +/*@{*/ + +/** +This struct defines the state of a context. +*/ +typedef struct opj_mqc_state { + /** the probability of the Least Probable Symbol (0.75->0x8000, 1.5->0xffff) */ + unsigned int qeval; + /** the Most Probable Symbol (0 or 1) */ + int mps; + /** next state if the next encoded symbol is the MPS */ + struct opj_mqc_state *nmps; + /** next state if the next encoded symbol is the LPS */ + struct opj_mqc_state *nlps; +} opj_mqc_state_t; + +#define MQC_NUMCTXS 32 + +/** +MQ coder +*/ +typedef struct opj_mqc { + unsigned int c; + unsigned int a; + unsigned int ct; + unsigned char *bp; + unsigned char *start; + unsigned char *end; + opj_mqc_state_t *ctxs[MQC_NUMCTXS]; + opj_mqc_state_t **curctx; +} opj_mqc_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a new MQC handle +@return Returns a new MQC handle if successful, returns NULL otherwise +*/ +opj_mqc_t* mqc_create(); +/** +Destroy a previously created MQC handle +@param mqc MQC handle to destroy +*/ +void mqc_destroy(opj_mqc_t *mqc); +/** +Return the number of bytes written/read since initialisation +@param mqc MQC handle +@return Returns the number of bytes already encoded +*/ +int mqc_numbytes(opj_mqc_t *mqc); +/** +Reset the states of all the context of the coder/decoder +(each context is set to a state where 0 and 1 are more or less equiprobable) +@param mqc MQC handle +*/ +void mqc_resetstates(opj_mqc_t *mqc); +/** +Set the state of a particular context +@param mqc MQC handle +@param ctxno Number that identifies the context +@param msb The MSB of the new state of the context +@param prob Number that identifies the probability of the symbols for the new state of the context +*/ +void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob); +/** +Initialize the encoder +@param mqc MQC handle +@param bp Pointer to the start of the buffer where the bytes will be written +*/ +void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp); +/** +Set the current context used for coding/decoding +@param mqc MQC handle +@param ctxno Number that identifies the context +*/ +void mqc_setcurctx(opj_mqc_t *mqc, int ctxno); +/** +Encode a symbol using the MQ-coder +@param mqc MQC handle +@param d The symbol to be encoded (0 or 1) +*/ +void mqc_encode(opj_mqc_t *mqc, int d); +/** +Flush the encoder, so that all remaining data is written +@param mqc MQC handle +*/ +void mqc_flush(opj_mqc_t *mqc); +/** +BYPASS mode switch, initialization operation. +JPEG 2000 p 505. +

Not fully implemented and tested !!

+@param mqc MQC handle +*/ +void mqc_bypass_init_enc(opj_mqc_t *mqc); +/** +BYPASS mode switch, coding operation. +JPEG 2000 p 505. +

Not fully implemented and tested !!

+@param mqc MQC handle +@param d The symbol to be encoded (0 or 1) +*/ +void mqc_bypass_enc(opj_mqc_t *mqc, int d); +/** +BYPASS mode switch, flush operation +

Not fully implemented and tested !!

+@param mqc MQC handle +@return Returns 1 (always) +*/ +int mqc_bypass_flush_enc(opj_mqc_t *mqc); +/** +RESET mode switch +@param mqc MQC handle +*/ +void mqc_reset_enc(opj_mqc_t *mqc); +/** +RESET mode switch +@param mqc MQC handle +*/ +void mqc_reset_enc_3(opj_mqc_t *mqc); +/** +RESTART mode switch (TERMALL) +@param mqc MQC handle +@return Returns 1 (always) +*/ +int mqc_restart_enc(opj_mqc_t *mqc); +/** +RESTART mode switch (TERMALL) reinitialisation +@param mqc MQC handle +*/ +void mqc_restart_init_enc(opj_mqc_t *mqc); +/** +ERTERM mode switch (PTERM) +@param mqc MQC handle +*/ +void mqc_erterm_enc(opj_mqc_t *mqc); +/** +SEGMARK mode switch (SEGSYM) +@param mqc MQC handle +*/ +void mqc_segmark_enc(opj_mqc_t *mqc); +/** +Initialize the decoder +@param mqc MQC handle +@param bp Pointer to the start of the buffer from which the bytes will be read +@param len Length of the input buffer +*/ +void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len); +/** +Decode a symbol +@param mqc MQC handle +@return Returns the decoded symbol (0 or 1) +*/ +int mqc_decode(opj_mqc_t *mqc); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __MQC_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/openjpeg.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/openjpeg.c new file mode 100755 index 0000000000..8e3a0782f7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/openjpeg.c @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef _WIN32 +#include +#endif /* _WIN32 */ + +#include "opj_includes.h" +#define JP3D_VERSION "1.3.0" +/* ---------------------------------------------------------------------- */ +#ifdef _WIN32 +#ifndef OPJ_STATIC +BOOL APIENTRY +DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { + switch (ul_reason_for_call) { + case DLL_PROCESS_ATTACH : + break; + case DLL_PROCESS_DETACH : + break; + case DLL_THREAD_ATTACH : + case DLL_THREAD_DETACH : + break; + } + + return TRUE; +} +#endif /* OPJ_STATIC */ +#endif /* _WIN32 */ + +/* ---------------------------------------------------------------------- */ + +const char* OPJ_CALLCONV opj_version() { + return JP3D_VERSION; +} +opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format) { + opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_malloc(sizeof(opj_dinfo_t)); + if(!dinfo) return NULL; + dinfo->is_decompressor = true; + switch(format) { + case CODEC_J3D: + case CODEC_J2K: + /* get a J3D decoder handle */ + dinfo->j3d_handle = (void*)j3d_create_decompress((opj_common_ptr)dinfo); + if(!dinfo->j3d_handle) { + opj_free(dinfo); + return NULL; + } + break; + default: + opj_free(dinfo); + return NULL; + } + + dinfo->codec_format = format; + + return dinfo; +} + +void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo) { + if(dinfo) { + /* destroy the codec */ + if(dinfo->codec_format != CODEC_UNKNOWN) { + j3d_destroy_decompress((opj_j3d_t*)dinfo->j3d_handle); + } + /* destroy the decompressor */ + opj_free(dinfo); + } +} + +void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters) { + if(parameters) { + memset(parameters, 0, sizeof(opj_dparameters_t)); + /* default decoding parameters */ + parameters->cp_layer = 0; + parameters->cp_reduce[0] = 0; + parameters->cp_reduce[1] = 0; + parameters->cp_reduce[2] = 0; + parameters->bigendian = 0; + + parameters->decod_format = -1; + parameters->cod_format = -1; + } +} + +void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters) { + if(dinfo && parameters) { + if (dinfo->codec_format != CODEC_UNKNOWN) { + j3d_setup_decoder((opj_j3d_t*)dinfo->j3d_handle, parameters); + } + } +} + +opj_volume_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio) { + if(dinfo && cio) { + if (dinfo->codec_format != CODEC_UNKNOWN) { + return j3d_decode((opj_j3d_t*)dinfo->j3d_handle, cio); + } + } + + return NULL; +} + +opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format) { + opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_malloc(sizeof(opj_cinfo_t)); + if(!cinfo) return NULL; + cinfo->is_decompressor = false; + switch(format) { + case CODEC_J3D: + case CODEC_J2K: + /* get a J3D coder handle */ + cinfo->j3d_handle = (void*)j3d_create_compress((opj_common_ptr)cinfo); + if(!cinfo->j3d_handle) { + opj_free(cinfo); + return NULL; + } + break; + default: + opj_free(cinfo); + return NULL; + } + + cinfo->codec_format = format; + + return cinfo; +} + +void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo) { + if(cinfo) { + /* destroy the codec */ + if (cinfo->codec_format != CODEC_UNKNOWN) { + j3d_destroy_compress((opj_j3d_t*)cinfo->j3d_handle); + } + /* destroy the decompressor */ + opj_free(cinfo); + } +} + +void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters) { + if(parameters) { + memset(parameters, 0, sizeof(opj_cparameters_t)); + /* default coding parameters */ + parameters->numresolution[0] = 3; + parameters->numresolution[1] = 3; + parameters->numresolution[2] = 1; + parameters->cblock_init[0] = 64; + parameters->cblock_init[1] = 64; + parameters->cblock_init[2] = 64; + parameters->prog_order = LRCP; + parameters->roi_compno = -1; /* no ROI */ + parameters->atk_wt[0] = 1; /* 5-3 WT */ + parameters->atk_wt[1] = 1; /* 5-3 WT */ + parameters->atk_wt[2] = 1; /* 5-3 WT */ + parameters->irreversible = 0; + parameters->subsampling_dx = 1; + parameters->subsampling_dy = 1; + parameters->subsampling_dz = 1; + + parameters->decod_format = -1; + parameters->cod_format = -1; + parameters->encoding_format = ENCOD_2EB; + parameters->transform_format = TRF_2D_DWT; + } +} + +void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_volume_t *volume) { + if(cinfo && parameters && volume) { + if (cinfo->codec_format != CODEC_UNKNOWN) { + j3d_setup_encoder((opj_j3d_t*)cinfo->j3d_handle, parameters, volume); + } + } +} + +bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_volume_t *volume, char *index) { + if(cinfo && cio && volume) { + if (cinfo->codec_format != CODEC_UNKNOWN) { + return j3d_encode((opj_j3d_t*)cinfo->j3d_handle, cio, volume, index); + } + } + + return false; +} + + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/openjpeg3d.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/openjpeg3d.h new file mode 100755 index 0000000000..ee878ebcf4 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/openjpeg3d.h @@ -0,0 +1,713 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef OPENJPEG_H +#define OPENJPEG_H + +/* +========================================================== + Compiler directives +========================================================== +*/ + +#if defined(OPJ_STATIC) || !(defined(WIN32) || defined(__WIN32__)) +#define OPJ_API +#define OPJ_CALLCONV +#else +#define OPJ_CALLCONV __stdcall +/* +The following ifdef block is the standard way of creating macros which make exporting +from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS +symbol defined on the command line. this symbol should not be defined on any project +that uses this DLL. This way any other project whose source files include this file see +OPJ_API functions as being imported from a DLL, wheras this DLL sees symbols +defined with this macro as being exported. +*/ +#ifdef OPJ_EXPORTS +#define OPJ_API __declspec(dllexport) +#else +#define OPJ_API __declspec(dllimport) +#endif /* OPJ_EXPORTS */ +#endif /* !OPJ_STATIC || !WIN32 */ + +#ifndef __cplusplus +#if defined(HAVE_STDBOOL_H) +/* +The C language implementation does correctly provide the standard header +file "stdbool.h". + */ +#include +#else +/* +The C language implementation does not provide the standard header file +"stdbool.h" as required by ISO/IEC 9899:1999. Try to compensate for this +braindamage below. +*/ +#if !defined(bool) +#define bool int +#endif +#if !defined(true) +#define true 1 +#endif +#if !defined(false) +#define false 0 +#endif +#endif +#endif /* __cplusplus */ + +/* +========================================================== + Useful constant definitions +========================================================== +*/ +#ifndef MAX_SLICES +#define MAX_SLICES 300 /**< Maximum allowed size for slices */ +#endif /* MAX_PATH */ + +#ifndef MAX_PATH +#define MAX_PATH 260 /**< Maximum allowed size for filenames */ +#endif /* MAX_PATH */ + +#define J3D_MAXRLVLS 32 /**< Number of maximum resolution level authorized */ +#define J3D_MAXBANDS (7*J3D_MAXRLVLS + 1) /**< Number of maximum sub-band linked to number of resolution level */ + +#define TINY 1.0E-20 +/* +========================================================== + enum definitions +========================================================== +*/ + +#define J2K_CFMT 0 +#define J3D_CFMT 1 +#define LSE_CFMT 2 + +#define BIN_DFMT 0 +#define PGX_DFMT 1 +#define IMG_DFMT 2 +/* ----------------------------------------------------------------------- */ + +/** Progression order */ +typedef enum PROG_ORDER { +/**< place-holder */ + PROG_UNKNOWN = -1, +/**< layer-resolution-component-precinct order */ + LRCP = 0, +/**< resolution-layer-component-precinct order */ + RLCP = 1, +/**< resolution-precinct-component-layer order */ + RPCL = 2, +/**< precinct-component-resolution-layer order */ + PCRL = 3, +/**< component-precinct-resolution-layer order */ + CPRL = 4 +} OPJ_PROG_ORDER; + +/** +Supported volume color spaces +*/ +typedef enum COLOR_SPACE { +/**< place-holder */ + CLRSPC_UNKNOWN = -1, +/**< sRGB */ + CLRSPC_SRGB = 1, +/**< grayscale */ + CLRSPC_GRAY = 2, +/**< YUV */ + CLRSPC_SYCC = 3 +} OPJ_COLOR_SPACE; + +/** +Supported codec +*/ +typedef enum CODEC_FORMAT { + /**< place-holder */ + CODEC_UNKNOWN = -1, +/**< JPEG-2000 codestream : read/write */ + CODEC_J2K = 0, +/**< JPEG-2000 Part 10 file format : read/write */ + CODEC_J3D = 1 +} OPJ_CODEC_FORMAT; + +/** +Supported entropy coding algorithms +*/ +typedef enum ENTROPY_CODING { +/**< place-holder */ + ENCOD_UNKNOWN = -1, +/**< 2D EBCOT encoding */ + ENCOD_2EB = 0, +/**< 3D EBCOT encoding */ + ENCOD_3EB = 1, +/**< Golomb-Rice coding with 2D context */ + ENCOD_2GR = 2, +/**< Golomb-Rice coding with 3D context */ + ENCOD_3GR = 3 +} OPJ_ENTROPY_CODING; + +/** +Supported transforms +*/ +typedef enum TRANSFORM { +/**< place-holder */ + TRF_UNKNOWN = -1, +/**< 2D DWT, no transform in axial dim */ + TRF_2D_DWT = 0, +/**< 3D DWT */ + TRF_3D_DWT = 1, +/**< 3D prediction*/ + TRF_3D_RLS = 2, + TRF_3D_LSE = 3 +} OPJ_TRANSFORM; +/* +========================================================== + event manager typedef definitions +========================================================== +*/ + +/** +Callback function prototype for events +@param msg Event message +@param client_data +*/ +typedef void (*opj_msg_callback) (const char *msg, void *client_data); + +/** +Message handler object +used for +
    +
  • Error messages +
  • Warning messages +
  • Debugging messages +
+*/ +typedef struct opj_event_mgr { + /** Error message callback if available, NULL otherwise */ + opj_msg_callback error_handler; + /** Warning message callback if available, NULL otherwise */ + opj_msg_callback warning_handler; + /** Debug message callback if available, NULL otherwise */ + opj_msg_callback info_handler; +} opj_event_mgr_t; + + +/* +========================================================== + codec typedef definitions +========================================================== +*/ + +/** +Progression order changes +*/ +typedef struct opj_poc { + int resno0, compno0; + int layno1, resno1, compno1; + OPJ_PROG_ORDER prg; + int tile; + char progorder[4]; +} opj_poc_t; + + +/** +Compression parameters +*/ +typedef struct opj_cparameters { +/** size of tile: tile_size_on = false (not in argument) or = true (in argument) */ + bool tile_size_on; +/** XTOsiz */ + int cp_tx0; +/** YTOsiz */ + int cp_ty0; +/** ZTOsiz */ + int cp_tz0; + +/** XTsiz */ + int cp_tdx; +/** YTsiz */ + int cp_tdy; +/** ZTsiz */ + int cp_tdz; + +/** allocation by rate/distortion */ + int cp_disto_alloc; +/** allocation by fixed layer */ + int cp_fixed_alloc; +/** add fixed_quality */ + int cp_fixed_quality; +/** fixed layer */ + int *cp_matrice; +/** number of layers */ + int tcp_numlayers; +/** rates for successive layers */ + float tcp_rates[100]; +/** psnr's for successive layers */ + float tcp_distoratio[100]; +/** comment for coding */ + char *cp_comment; +/** csty : coding style */ + int csty; +/** DC offset (DCO) */ + int dcoffset; +/** progression order (default LRCP) */ + OPJ_PROG_ORDER prog_order; +/** progression order changes */ + opj_poc_t POC[J3D_MAXRLVLS-1]; +/** number of progression order changes (POC), default to 0 */ + int numpocs; + +/** number of resolutions */ + int numresolution[3]; +/** initial code block width, height and depth, default to 64 */ + int cblock_init[3]; +/** mode switch (1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL) 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)) */ + int mode; + +/** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */ + int irreversible; +/** WT from ATK, default to 0 (false), no of atk used */ + int atk_wt[3]; +/** region of interest: affected component in [0..3], -1 means no ROI */ + int roi_compno; +/** region of interest: upshift value */ + int roi_shift; + +/* number of precinct size specifications */ + int res_spec; +/** initial precinct width */ + int prct_init[3][J3D_MAXRLVLS]; + +/** transform format 0: 0: 2DWT, 1: 2D1P, 2: 3DWT, 3: 3RLS */ + OPJ_TRANSFORM transform_format; +/** output file format 0: 2EB, 1: 3EB, 2: 2GR, 3: 3GR, 4: GRI */ + OPJ_ENTROPY_CODING encoding_format; + + /**@name command line encoder parameters (not used inside the library) */ + /*@{*/ + char infile[MAX_PATH]; /** input file name */ + char outfile[MAX_PATH]; /** output file name */ + char imgfile[MAX_PATH]; /** IMG file name for BIN volumes*/ + int index_on; /** creation of an index file, default to 0 (false) */ + char index[MAX_PATH]; /** index file name */ + + int volume_offset_x0; /** subvolume encoding: origin volume offset in x, y and z direction */ + int volume_offset_y0; + int volume_offset_z0; + + int subsampling_dx; /** subsampling value for dx */ + int subsampling_dy; + int subsampling_dz; + + int decod_format; /** input file format 0: BIN, 1: PGX */ + int cod_format; /** output file format 0: JP3D */ + /*@}*/ +} opj_cparameters_t; + +/** +Decompression parameters +*/ +typedef struct opj_dparameters { +/** Set the number of highest resolution levels to be discarded. if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, volume is decoded to the full resolution */ + int cp_reduce[3]; +/** Set the maximum number of quality layers to decode. if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */ + int cp_layer; + int bigendian; + + /**@name command line encoder parameters (not used inside the library) */ + /*@{*/ +/** input file name */ + char infile[MAX_PATH]; +/** output file name */ + char outfile[MAX_PATH]; +/** IMG file name for BIN volumes*/ + char imgfile[MAX_PATH]; +/** Original file name for PSNR measures*/ + char original[MAX_PATH]; +/** input file format 0: J2K, 1: JP3D */ + int decod_format; +/** input file format 0: BIN, 1: PGM */ + int cod_format; +/** original file format 0: BIN, 1: PGM */ + int orig_format; + /*@}*/ +} opj_dparameters_t; + +/** Common fields between JPEG-2000 compression and decompression master structs. */ +#define opj_common_fields \ + opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\ + void * client_data; /**< Available for use by application */\ + bool is_decompressor; /**< So common code can tell which is which */\ + OPJ_CODEC_FORMAT codec_format; /**< selected codec */\ + OPJ_ENTROPY_CODING encoding_format; /**< selected entropy coding */\ + OPJ_TRANSFORM transform_format; /**< selected transform */\ + void *j3d_handle /**< pointer to the J3D codec */ + +/* Routines that are to be used by both halves of the library are declared + * to receive a pointer to this structure. There are no actual instances of + * opj_common_struct_t, only of opj_cinfo_t and opj_dinfo_t. + */ +typedef struct opj_common_struct { + opj_common_fields; /* Fields common to both master struct types */ + /* Additional fields follow in an actual opj_cinfo_t or + * opj_dinfo_t. All three structs must agree on these + * initial fields! (This would be a lot cleaner in C++.) + */ +} opj_common_struct_t; + +typedef opj_common_struct_t * opj_common_ptr; + +/** +Compression context info +*/ +typedef struct opj_cinfo { + /** Fields shared with opj_dinfo_t */ + opj_common_fields; + /* other specific fields go here */ +} opj_cinfo_t; + +/** +Decompression context info +*/ +typedef struct opj_dinfo { + /** Fields shared with opj_cinfo_t */ + opj_common_fields; + /* other specific fields go here */ +} opj_dinfo_t; + +/* +========================================================== + I/O stream typedef definitions +========================================================== +*/ + +/* + * Stream open flags. + */ +/** The stream was opened for reading. */ +#define OPJ_STREAM_READ 0x0001 +/** The stream was opened for writing. */ +#define OPJ_STREAM_WRITE 0x0002 + +/** +Byte input-output stream (CIO) +*/ +typedef struct opj_cio { +/** codec context */ + opj_common_ptr cinfo; +/** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRITE */ + int openmode; +/** pointer to the start of the buffer */ + unsigned char *buffer; +/** buffer size in bytes */ + int length; +/** pointer to the start of the stream */ + unsigned char *start; +/** pointer to the end of the stream */ + unsigned char *end; +/** pointer to the current position */ + unsigned char *bp; +} opj_cio_t; + +/* +========================================================== + volume typedef definitions +========================================================== +*/ + +/** +Defines a single volume component +*/ +typedef struct opj_volume_comp { +/** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */ + int dx; +/** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */ + int dy; +/** ZRsiz: vertical separation of a sample of ith component with respect to the reference grid */ + int dz; +/** data width */ + int w; + /** data height */ + int h; + /** data length : no of slices */ + int l; + /** x component offset compared to the whole volume */ + int x0; + /** y component offset compared to the whole volume */ + int y0; + /** z component offset compared to the whole volume */ + int z0; + /** precision */ + int prec; + /** volume depth in bits */ + int bpp; + /** DC offset (15444-2) */ + int dcoffset; + /** signed (1) / unsigned (0) */ + int sgnd; + /** BE byte order (1) / LE byte order (0) */ + int bigendian; + /** number of decoded resolution */ + int resno_decoded[3]; + /** number of division by 2 of the out volume compared to the original size of volume */ + int factor[3]; + /** volume component data */ + int *data; +} opj_volume_comp_t; + +/** +Defines volume data and characteristics +*/ +typedef struct opj_volume { +/** XOsiz: horizontal offset from the origin of the reference grid to the left side of the volume area */ + int x0; +/** YOsiz: vertical offset from the origin of the reference grid to the top side of the volume area */ + int y0; +/** ZOsiz: vertical offset from the origin of the reference grid to the top side of the volume area */ + int z0; +/** Xsiz: width of the reference grid */ + int x1; +/** Ysiz: height of the reference grid */ + int y1; +/** Zsiz: length of the reference grid */ + int z1; +/** number of components in the volume */ + int numcomps; +/** number of slices in the volume */ + int numslices; +/** color space: sRGB, Greyscale or YUV */ + OPJ_COLOR_SPACE color_space; +/** volume components */ + opj_volume_comp_t *comps; +} opj_volume_t; + +/** +Component parameters structure used by the opj_volume_create function +*/ +typedef struct opj_volume_comptparm { + /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */ + int dx; + /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */ + int dy; + /** ZRsiz: axial separation of a sample of ith component with respect to the reference grid */ + int dz; + /** data width */ + int w; + /** data height */ + int h; + /** data length */ + int l; + /** x component offset compared to the whole volume */ + int x0; + /** y component offset compared to the whole volume */ + int y0; + /** z component offset compared to the whole volume */ + int z0; + /** precision */ + int prec; + /** volume depth in bits */ + int bpp; + /** signed (1) / unsigned (0) */ + int sgnd; + /** DC offset*/ + int dcoffset; + /** BE byte order (1) / LE byte order (0) */ + int bigendian; +} opj_volume_cmptparm_t; + +#ifdef __cplusplus +extern "C" { +#endif + + +/* +========================================================== + openjpeg version +========================================================== +*/ + +OPJ_API const char * OPJ_CALLCONV opj_version(); + +/* +========================================================== + volume functions definitions +========================================================== +*/ + +/** +Create an volume +@param numcmpts number of components +@param cmptparms components parameters +@param clrspc volume color space +@return returns a new volume structure if successful, returns NULL otherwise +*/ +OPJ_API opj_volume_t* OPJ_CALLCONV opj_volume_create(int numcmpts, opj_volume_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc); + +/** +Deallocate any resources associated with an volume +@param volume volume to be destroyed +*/ +OPJ_API void OPJ_CALLCONV opj_volume_destroy(opj_volume_t *volume); + +/* +========================================================== + stream functions definitions +========================================================== +*/ + +/** +Open and allocate a memory stream for read / write. +On reading, the user must provide a buffer containing encoded data. The buffer will be +wrapped by the returned CIO handle. +On writing, buffer parameters must be set to 0: a buffer will be allocated by the library +to contain encoded data. +@param cinfo Codec context info +@param buffer Reading: buffer address. Writing: NULL +@param length Reading: buffer length. Writing: 0 +@return Returns a CIO handle if successful, returns NULL otherwise +*/ +OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length); + +/** +Close and free a CIO handle +@param cio CIO handle to free +*/ +OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio); + +/** +Get position in byte stream +@param cio CIO handle +@return Returns the position in bytes +*/ +OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio); +/** +Set position in byte stream +@param cio CIO handle +@param pos Position, in number of bytes, from the beginning of the stream +*/ +OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos); + +/* +========================================================== + event manager functions definitions +========================================================== +*/ + +OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context); + +/* +========================================================== + codec functions definitions +========================================================== +*/ +/** +Creates a J3D decompression structure +@param format Decoder to select +@return Returns a handle to a decompressor if successful, returns NULL otherwise +*/ +OPJ_API opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format); +/** +Destroy a decompressor handle +@param dinfo decompressor handle to destroy +*/ +OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo); +/** +Set decoding parameters to default values +@param parameters Decompression parameters +*/ +OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters); +/** +Setup the decoder decoding parameters using user parameters. +Decoding parameters are returned in j3d->cp. +@param dinfo decompressor handle +@param parameters decompression parameters +*/ +OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters); +/** +Decode an volume from a JPEG-2000 codestream +@param dinfo decompressor handle +@param cio Input buffer stream +@return Returns a decoded volume if successful, returns NULL otherwise +*/ +OPJ_API opj_volume_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio); +/** +Creates a J3D/JP2 compression structure +@param format Coder to select +@return Returns a handle to a compressor if successful, returns NULL otherwise +*/ +OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format); +/** +Destroy a compressor handle +@param cinfo compressor handle to destroy +*/ +OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo); +/** +Set encoding parameters to default values, that means : +
    +
  • Lossless +
  • 1 tile +
  • Size of precinct : 2^15 x 2^15 (means 1 precinct) +
  • Size of code-block : 64 x 64 +
  • Number of resolutions: 6 +
  • No SOP marker in the codestream +
  • No EPH marker in the codestream +
  • No sub-sampling in x or y direction +
  • No mode switch activated +
  • Progression order: LRCP +
  • No index file +
  • No ROI upshifted +
  • No offset of the origin of the volume +
  • No offset of the origin of the tiles +
  • Reversible DWT 5-3 +
+@param parameters Compression parameters +*/ +OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters); +/** +Setup the encoder parameters using the current volume and using user parameters. +@param cinfo compressor handle +@param parameters compression parameters +@param volume input filled volume +*/ +OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_volume_t *volume); +/** +Encode an volume into a JPEG-2000 codestream +@param cinfo compressor handle +@param cio Output buffer stream +@param volume Volume to encode +@param index Name of the index file if required, NULL otherwise +@return Returns true if successful, returns false otherwise +*/ +OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_volume_t *volume, char *index); + +#ifdef __cplusplus +} +#endif + +#endif /* OPENJPEG_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/opj_includes.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/opj_includes.h new file mode 100755 index 0000000000..0c70ff100e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/opj_includes.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef OPJ_INCLUDES_H +#define OPJ_INCLUDES_H + +/* + ========================================================== + Standard includes used by the library + ========================================================== +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +/* + ========================================================== + OpenJPEG interface + ========================================================== + */ +#include "openjpeg3d.h" + +/* + ========================================================== + OpenJPEG modules + ========================================================== +*/ + +#include "jp3d_lib.h" +#include "event.h" +#include "cio.h" + +#include "volume.h" +#include "jp3d.h" + +#include "mqc.h" +#include "raw.h" +#include "bio.h" +#include "tgt.h" +#include "tcd.h" +#include "t1.h" +#include "t1_3d.h" +#include "dwt.h" +#include "pi.h" +#include "t2.h" +#include "mct.h" +#include "int.h" +#include "fix.h" + +//#include "pred.h" +//#include "golomb.h" + +#endif /* OPJ_INCLUDES_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/pi.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/pi.c new file mode 100755 index 0000000000..5fd673fdb1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/pi.c @@ -0,0 +1,630 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez, LPI-UVA, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup PI PI - Implementation of a packet iterator */ +/*@{*/ + +/** @name Funciones locales */ +/*@{*/ + +/** +Get next packet in layer-resolution-component-precinct order. +@param pi packet iterator to modify +@return returns false if pi pointed to the last packet or else returns true +*/ +static bool pi_next_lrcp(opj_pi_iterator_t * pi); +/** +Get next packet in resolution-layer-component-precinct order. +@param pi packet iterator to modify +@return returns false if pi pointed to the last packet or else returns true +*/ +static bool pi_next_rlcp(opj_pi_iterator_t * pi); +/** +Get next packet in resolution-precinct-component-layer order. +@param pi packet iterator to modify +@return returns false if pi pointed to the last packet or else returns true +*/ +static bool pi_next_rpcl(opj_pi_iterator_t * pi); +/** +Get next packet in precinct-component-resolution-layer order. +@param pi packet iterator to modify +@return returns false if pi pointed to the last packet or else returns true +*/ +static bool pi_next_pcrl(opj_pi_iterator_t * pi); +/** +Get next packet in component-precinct-resolution-layer order. +@param pi packet iterator to modify +@return returns false if pi pointed to the last packet or else returns true +*/ +static bool pi_next_cprl(opj_pi_iterator_t * pi); + +/*@}*/ + +/*@}*/ + +/* +========================================================== + local functions +========================================================== +*/ + +static bool pi_next_lrcp(opj_pi_iterator_t * pi) { + opj_pi_comp_t *comp = NULL; + opj_pi_resolution_t *res = NULL; + long index = 0; + + if (!pi->first) { + comp = &pi->comps[pi->compno]; + res = &comp->resolutions[pi->resno]; + goto LABEL_SKIP; + } else { + pi->first = 0; + } + + for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) { + for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolution[0]) { + continue; + } + res = &comp->resolutions[pi->resno]; + //for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1]); pi->precno++) { + for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); pi->precno++) { + index = pi->layno * pi->step_l + + pi->resno * pi->step_r + + pi->compno * pi->step_c + + pi->precno * pi->step_p; + if (!pi->include[index]) { + pi->include[index] = 1; + return true; + } +LABEL_SKIP:; + + } + } + } + } + + return false; +} + +static bool pi_next_rlcp(opj_pi_iterator_t * pi) { + opj_pi_comp_t *comp = NULL; + opj_pi_resolution_t *res = NULL; + long index = 0; + + if (!pi->first) { + comp = &pi->comps[pi->compno]; + res = &comp->resolutions[pi->resno]; + goto LABEL_SKIP; + } else { + pi->first = 0; + } + + for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { + for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolution[0]) { + continue; + } + res = &comp->resolutions[pi->resno]; + //for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1]); pi->precno++) { + for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); pi->precno++) { + index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; + if (!pi->include[index]) { + pi->include[index] = 1; + return true; + } +LABEL_SKIP:; + } + } + } + } + + return false; +} + +static bool pi_next_rpcl(opj_pi_iterator_t * pi) { + opj_pi_comp_t *comp = NULL; + opj_pi_resolution_t *res = NULL; + long index = 0; + + if (!pi->first) { + goto LABEL_SKIP; + } else { + int compno, resno; + pi->first = 0; + pi->dx = 0; + pi->dy = 0; + for (compno = 0; compno < pi->numcomps; compno++) { + comp = &pi->comps[compno]; + for (resno = 0; resno < comp->numresolution[0]; resno++) { + int dx, dy,dz; + res = &comp->resolutions[resno]; + dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno)); + dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno)); + dz = comp->dz * (1 << (res->pdz + comp->numresolution[2] - 1 - resno)); + pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); + pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); + pi->dz = !pi->dz ? dz : int_min(pi->dz, dz); + } + } + } + + for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { + for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) { + for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) { + for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { + int levelnox, levelnoy, levelnoz; + int trx0, try0, trz0; + int trx1, try1, trz1; + int rpx, rpy, rpz; + int prci, prcj, prck; + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolution[0]) { + continue; + } + res = &comp->resolutions[pi->resno]; + levelnox = comp->numresolution[0] - 1 - pi->resno; + levelnoy = comp->numresolution[1] - 1 - pi->resno; + levelnoz = comp->numresolution[2] - 1 - pi->resno; + trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox); + try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy); + trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz); + trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox); + try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy); + trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz); + rpx = res->pdx + levelnox; + rpy = res->pdy + levelnoy; + rpz = res->pdz + levelnoz; + if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 && (trx0 << levelnox) % (1 << rpx)))) { + continue; + } + if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 && (try0 << levelnoy) % (1 << rpx)))) { + continue; + } + if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 && (trz0 << levelnoz) % (1 << rpx)))) { + continue; + } + if ((res->prctno[0]==0)||(res->prctno[1]==0)||(res->prctno[2]==0)) continue; + + if ((trx0==trx1)||(try0==try1)||(trz0==trz1)) continue; + + prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx) + - int_floordivpow2(trx0, res->pdx); + prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy) + - int_floordivpow2(try0, res->pdy); + prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz) + - int_floordivpow2(trz0, res->pdz); + pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] * res->prctno[1]; + for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) { + index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; + if (!pi->include[index]) { + pi->include[index] = 1; + return true; + } + LABEL_SKIP:; + } + } + } + } + } + } + + return false; +} + +static bool pi_next_pcrl(opj_pi_iterator_t * pi) { + opj_pi_comp_t *comp = NULL; + opj_pi_resolution_t *res = NULL; + long index = 0; + + if (!pi->first) { + comp = &pi->comps[pi->compno]; + goto LABEL_SKIP; + } else { + int compno, resno; + pi->first = 0; + pi->dx = 0; + pi->dy = 0; + pi->dz = 0; + for (compno = 0; compno < pi->numcomps; compno++) { + comp = &pi->comps[compno]; + for (resno = 0; resno < comp->numresolution[0]; resno++) { + int dx, dy, dz; + res = &comp->resolutions[resno]; + dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno)); + dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno)); + dz = comp->dz * (1 << (res->pdy + comp->numresolution[2] - 1 - resno)); + pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); + pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); + pi->dz = !pi->dz ? dz : int_min(pi->dz, dz); + } + } + } + +for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) { + for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) { + for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { + comp = &pi->comps[pi->compno]; + for (pi->resno = pi->poc.resno0; pi->resno < int_min(pi->poc.resno1, comp->numresolution[0]); pi->resno++) { + int levelnox, levelnoy, levelnoz; + int trx0, try0, trz0; + int trx1, try1, trz1; + int rpx, rpy, rpz; + int prci, prcj, prck; + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolution[0]) { + continue; + } + res = &comp->resolutions[pi->resno]; + levelnox = comp->numresolution[0] - 1 - pi->resno; + levelnoy = comp->numresolution[1] - 1 - pi->resno; + levelnoz = comp->numresolution[2] - 1 - pi->resno; + trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox); + try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy); + trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz); + trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox); + try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy); + trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz); + rpx = res->pdx + levelnox; + rpy = res->pdy + levelnoy; + rpz = res->pdz + levelnoz; + if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 && (trx0 << levelnox) % (1 << rpx)))) { + continue; + } + if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 && (try0 << levelnoy) % (1 << rpx)))) { + continue; + } + if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 && (trz0 << levelnoz) % (1 << rpx)))) { + continue; + } + if ((res->prctno[0]==0)||(res->prctno[1]==0)||(res->prctno[2]==0)) continue; + + if ((trx0==trx1)||(try0==try1)||(trz0==trz1)) continue; + + prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx) + - int_floordivpow2(trx0, res->pdx); + prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy) + - int_floordivpow2(try0, res->pdy); + prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz) + - int_floordivpow2(trz0, res->pdz); + pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] * res->prctno[1]; + for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) { + index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; + if (!pi->include[index]) { + pi->include[index] = 1; + return true; + } +LABEL_SKIP:; + } + } + } + } + } +} + + return false; +} + +static bool pi_next_cprl(opj_pi_iterator_t * pi) { + opj_pi_comp_t *comp = NULL; + opj_pi_resolution_t *res = NULL; + long index = 0; + + if (!pi->first) { + comp = &pi->comps[pi->compno]; + goto LABEL_SKIP; + } else { + pi->first = 0; + } + + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { + int resno; + comp = &pi->comps[pi->compno]; + pi->dx = 0; + pi->dy = 0; + for (resno = 0; resno < comp->numresolution[0]; resno++) { + int dx, dy; + res = &comp->resolutions[resno]; + dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno)); + dy = comp->dy * (1 << (res->pdy + comp->numresolution[0] - 1 - resno)); + pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); + pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); + } + for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) { + for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) { + for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) { + for (pi->resno = pi->poc.resno0; pi->resno < int_min(pi->poc.resno1, comp->numresolution[0]); pi->resno++) { + int levelnox, levelnoy, levelnoz; + int trx0, try0, trz0; + int trx1, try1, trz1; + int rpx, rpy, rpz; + int prci, prcj, prck; + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolution[0]) { + continue; + } + res = &comp->resolutions[pi->resno]; + levelnox = comp->numresolution[0] - 1 - pi->resno; + levelnoy = comp->numresolution[1] - 1 - pi->resno; + levelnoz = comp->numresolution[2] - 1 - pi->resno; + trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox); + try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy); + trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz); + trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox); + try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy); + trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz); + rpx = res->pdx + levelnox; + rpy = res->pdy + levelnoy; + rpz = res->pdz + levelnoz; + if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 && (trx0 << levelnox) % (1 << rpx)))) { + continue; + } + if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 && (try0 << levelnoy) % (1 << rpx)))) { + continue; + } + if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 && (trz0 << levelnoz) % (1 << rpx)))) { + continue; + } + if ((res->prctno[0]==0)||(res->prctno[1]==0)||(res->prctno[2]==0)) continue; + + if ((trx0==trx1)||(try0==try1)||(trz0==trz1)) continue; + + prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx) + - int_floordivpow2(trx0, res->pdx); + prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy) + - int_floordivpow2(try0, res->pdy); + prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz) + - int_floordivpow2(trz0, res->pdz); + pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] * res->prctno[1]; + for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) { + index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; + if (!pi->include[index]) { + pi->include[index] = 1; + return true; + } + LABEL_SKIP:; + } + } + } + } + } + } + + return false; +} + +/* +========================================================== + Packet iterator interface +========================================================== +*/ + +opj_pi_iterator_t *pi_create(opj_volume_t *volume, opj_cp_t *cp, int tileno) { + int p, q, r; + int compno, resno, pino; + opj_pi_iterator_t *pi = NULL; + opj_tcp_t *tcp = NULL; + opj_tccp_t *tccp = NULL; + size_t array_size; + + tcp = &cp->tcps[tileno]; + + array_size = (tcp->numpocs + 1) * sizeof(opj_pi_iterator_t); + pi = (opj_pi_iterator_t *) opj_malloc(array_size); + if(!pi) { + fprintf(stdout,"[ERROR] Malloc of opj_pi_iterator failed \n"); + return NULL; + } + + for (pino = 0; pino < tcp->numpocs + 1; pino++) { /* change */ + int maxres = 0; + int maxprec = 0; + p = tileno % cp->tw; + q = tileno / cp->tw; + r = tileno / (cp->tw * cp->th); + + pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, volume->x0); + pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, volume->y0); + pi[pino].tz0 = int_max(cp->tz0 + r * cp->tdz, volume->z0); + pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1); + pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1); + pi[pino].tz1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1); + pi[pino].numcomps = volume->numcomps; + + array_size = volume->numcomps * sizeof(opj_pi_comp_t); + pi[pino].comps = (opj_pi_comp_t *) opj_malloc(array_size); + if(!pi[pino].comps) { + fprintf(stdout,"[ERROR] Malloc of opj_pi_comp failed \n"); + pi_destroy(pi, cp, tileno); + return NULL; + } + memset(pi[pino].comps, 0, array_size); + + for (compno = 0; compno < pi->numcomps; compno++) { + int tcx0, tcx1, tcy0, tcy1, tcz0, tcz1; + int i; + opj_pi_comp_t *comp = &pi[pino].comps[compno]; + tccp = &tcp->tccps[compno]; + + comp->dx = volume->comps[compno].dx; + comp->dy = volume->comps[compno].dy; + comp->dz = volume->comps[compno].dz; + for (i = 0; i < 3; i++) { + comp->numresolution[i] = tccp->numresolution[i]; + if (comp->numresolution[i] > maxres) { + maxres = comp->numresolution[i]; + } + } + array_size = comp->numresolution[0] * sizeof(opj_pi_resolution_t); + comp->resolutions = (opj_pi_resolution_t *) opj_malloc(array_size); + if(!comp->resolutions) { + fprintf(stdout,"[ERROR] Malloc of opj_pi_resolution failed \n"); + pi_destroy(pi, cp, tileno); + return NULL; + } + + tcx0 = int_ceildiv(pi->tx0, comp->dx); + tcy0 = int_ceildiv(pi->ty0, comp->dy); + tcz0 = int_ceildiv(pi->tz0, comp->dz); + tcx1 = int_ceildiv(pi->tx1, comp->dx); + tcy1 = int_ceildiv(pi->ty1, comp->dy); + tcz1 = int_ceildiv(pi->tz1, comp->dz); + + for (resno = 0; resno < comp->numresolution[0]; resno++) { + int levelnox, levelnoy, levelnoz, diff; + int rx0, ry0, rz0, rx1, ry1, rz1; + int px0, py0, pz0, px1, py1, pz1; + opj_pi_resolution_t *res = &comp->resolutions[resno]; + if (tccp->csty & J3D_CCP_CSTY_PRT) { + res->pdx = tccp->prctsiz[0][resno]; + res->pdy = tccp->prctsiz[1][resno]; + res->pdz = tccp->prctsiz[2][resno]; + } else { + res->pdx = 15; + res->pdy = 15; + res->pdz = 15; + } + levelnox = comp->numresolution[0] - 1 - resno; + levelnoy = comp->numresolution[1] - 1 - resno; + levelnoz = comp->numresolution[2] - 1 - resno; + if (levelnoz < 0) levelnoz = 0; + diff = comp->numresolution[0] - comp->numresolution[2]; + + rx0 = int_ceildivpow2(tcx0, levelnox); + ry0 = int_ceildivpow2(tcy0, levelnoy); + rz0 = int_ceildivpow2(tcz0, levelnoz); + rx1 = int_ceildivpow2(tcx1, levelnox); + ry1 = int_ceildivpow2(tcy1, levelnoy); + rz1 = int_ceildivpow2(tcz1, levelnoz); + px0 = int_floordivpow2(rx0, res->pdx) << res->pdx; + py0 = int_floordivpow2(ry0, res->pdy) << res->pdy; + pz0 = int_floordivpow2(rz0, res->pdz) << res->pdz; + px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx; + py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy; + pz1 = int_ceildivpow2(rz1, res->pdz) << res->pdz; + res->prctno[0] = (rx0==rx1)? 0 : ((px1 - px0) >> res->pdx); + res->prctno[1] = (ry0==ry1)? 0 : ((py1 - py0) >> res->pdy); + res->prctno[2] = (rz0==rz1)? 0 : ((pz1 - pz0) >> res->pdz); + + if (res->prctno[0]*res->prctno[1]*res->prctno[2] > maxprec) { + maxprec = res->prctno[0]*res->prctno[1]*res->prctno[2]; + } + } + } + + tccp = &tcp->tccps[0]; + pi[pino].step_p = 1; + pi[pino].step_c = maxprec * pi[pino].step_p; + pi[pino].step_r = volume->numcomps * pi[pino].step_c; + pi[pino].step_l = maxres * pi[pino].step_r; + + if (pino == 0) { + array_size = volume->numcomps * maxres * tcp->numlayers * maxprec * sizeof(short int); + pi[pino].include = (short int *) opj_malloc(array_size); + if(!pi[pino].include) { + fprintf(stdout,"[ERROR] Malloc of pi[pino].include failed \n"); + pi_destroy(pi, cp, tileno); + return NULL; + } + } + else { + pi[pino].include = pi[pino - 1].include; + } + + if (tcp->POC == 0) { + pi[pino].first = 1; + pi[pino].poc.resno0 = 0; + pi[pino].poc.compno0 = 0; + pi[pino].poc.layno1 = tcp->numlayers; + pi[pino].poc.resno1 = maxres; + pi[pino].poc.compno1 = volume->numcomps; + pi[pino].poc.prg = tcp->prg; + } else { + pi[pino].first = 1; + pi[pino].poc.resno0 = tcp->pocs[pino].resno0; + pi[pino].poc.compno0 = tcp->pocs[pino].compno0; + pi[pino].poc.layno1 = tcp->pocs[pino].layno1; + pi[pino].poc.resno1 = tcp->pocs[pino].resno1; + pi[pino].poc.compno1 = tcp->pocs[pino].compno1; + pi[pino].poc.prg = tcp->pocs[pino].prg; + } + } + + return pi; +} + +void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno) { + int compno, pino; + opj_tcp_t *tcp = &cp->tcps[tileno]; + if(pi) { + for (pino = 0; pino < tcp->numpocs + 1; pino++) { + if(pi[pino].comps) { + for (compno = 0; compno < pi->numcomps; compno++) { + opj_pi_comp_t *comp = &pi[pino].comps[compno]; + if(comp->resolutions) { + opj_free(comp->resolutions); + } + } + opj_free(pi[pino].comps); + } + } + if(pi->include) { + opj_free(pi->include); + } + opj_free(pi); + } +} + +bool pi_next(opj_pi_iterator_t * pi) { + switch (pi->poc.prg) { + case LRCP: + return pi_next_lrcp(pi); + case RLCP: + return pi_next_rlcp(pi); + case RPCL: + return pi_next_rpcl(pi); + case PCRL: + return pi_next_pcrl(pi); + case CPRL: + return pi_next_cprl(pi); + } + + return false; +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/pi.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/pi.h new file mode 100755 index 0000000000..1d3340be11 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/pi.h @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __PI_H +#define __PI_H +/** +@file pi.h +@brief Implementation of a packet iterator (PI) + +The functions in PI.C have for goal to realize a packet iterator that permits to get the next +packet following the progression order and change of it. The functions in PI.C are used +by some function in T2.C. +*/ + +/** @defgroup PI PI - Implementation of a packet iterator */ +/*@{*/ + +/** +Packet iterator : resolution level information +*/ +typedef struct opj_pi_resolution { +/** Size of precints in horizontal axis */ + int pdx; +/** Size of precints in vertical axis */ + int pdy; +/** Size of precints in axial axis */ + int pdz; +/** Number of precints in each axis */ + int prctno[3]; +} opj_pi_resolution_t; + +/** +Packet iterator : component information +*/ +typedef struct opj_pi_comp { +/** Size in horizontal axis */ + int dx; +/** Size in vertical axis */ + int dy; +/** Size in axial axis */ + int dz; +/** Number of resolution levels */ + int numresolution[3]; +/** Packet iterator : resolution level information */ + opj_pi_resolution_t *resolutions; +} opj_pi_comp_t; + +/** +Packet iterator +*/ +typedef struct opj_pi_iterator { +/** precise if the packet has been already used (usefull for progression order change) */ + short int *include; +/** layer step used to localize the packet in the include vector */ + int step_l; +/** resolution step used to localize the packet in the include vector */ + int step_r; +/** component step used to localize the packet in the include vector */ + int step_c; +/** precinct step used to localize the packet in the include vector */ + int step_p; +/** component that identify the packet */ + int compno; +/** resolution that identify the packet */ + int resno; +/** precinct that identify the packet */ + int precno; +/** layer that identify the packet */ + int layno; +/** 0 if the first packet */ + int first; +/** progression order change information */ + opj_poc_t poc; +/** Packet iterator : component information */ +opj_pi_comp_t *comps; + + int numcomps; + int tx0, ty0, tz0; + int tx1, ty1, tz1; + int x, y, z; + int dx, dy, dz; +} opj_pi_iterator_t; + +/** @name Funciones generales */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a packet iterator +@param volume Raw volume for which the packets will be listed +@param cp Coding parameters +@param tileno Number that identifies the tile for which to list the packets +@return Returns a packet iterator that points to the first packet of the tile +@see pi_destroy +*/ +opj_pi_iterator_t *pi_create(opj_volume_t * volume, opj_cp_t * cp, int tileno); + +/** +Destroy a packet iterator +@param pi Previously created packet iterator +@param cp Coding parameters +@param tileno Number that identifies the tile for which the packets were listed +@see pi_create +*/ +void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno); + +/** +Modify the packet iterator to point to the next packet +@param pi Packet iterator to modify +@return Returns false if pi pointed to the last packet or else returns true +*/ +bool pi_next(opj_pi_iterator_t * pi); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __PI_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/raw.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/raw.c new file mode 100755 index 0000000000..59d7d35be6 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/raw.c @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/* +========================================================== + local functions +========================================================== +*/ + + +/* +========================================================== + RAW encoding interface +========================================================== +*/ + +opj_raw_t* raw_create() { + opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t)); + return raw; +} + +void raw_destroy(opj_raw_t *raw) { + if(raw) { + opj_free(raw); + } +} + +int raw_numbytes(opj_raw_t *raw) { + return raw->bp - raw->start; +} + +void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len) { + raw->start = bp; + raw->lenmax = len; + raw->len = 0; + raw->c = 0; + raw->ct = 0; +} + +int raw_decode(opj_raw_t *raw) { + int d; + if (raw->ct == 0) { + raw->ct = 8; + if (raw->len == raw->lenmax) { + raw->c = 0xff; + } else { + if (raw->c == 0xff) { + raw->ct = 7; + } + raw->c = *(raw->start + raw->len); + raw->len++; + } + } + raw->ct--; + d = (raw->c >> raw->ct) & 0x01; + + return d; +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/raw.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/raw.h new file mode 100755 index 0000000000..e17070ab29 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/raw.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __RAW_H +#define __RAW_H +/** +@file raw.h +@brief Implementation of operations for raw encoding (RAW) + +The functions in RAW.C have for goal to realize the operation of raw encoding linked +with the corresponding mode switch. +*/ + +/** @defgroup RAW RAW - Implementation of operations for raw encoding */ +/*@{*/ + +/** +RAW encoding operations +*/ +typedef struct opj_raw { +/** Temporary buffer where bits are coded or decoded */ + unsigned char c; +/** Number of bits already read or free to write */ + unsigned int ct; +/** Maximum length to decode */ + unsigned int lenmax; +/** Length decoded */ + unsigned int len; +/** Pointer to the current position in the buffer */ + unsigned char *bp; +/** Pointer to the start of the buffer */ + unsigned char *start; +/** Pointer to the end of the buffer */ + unsigned char *end; +} opj_raw_t; + +/** @name Funciones generales */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a new RAW handle +@return Returns a new RAW handle if successful, returns NULL otherwise +*/ +opj_raw_t* raw_create(); +/** +Destroy a previously created RAW handle +@param raw RAW handle to destroy +*/ +void raw_destroy(opj_raw_t *raw); +/** +Return the number of bytes written/read since initialisation +@param raw RAW handle to destroy +@return Returns the number of bytes already encoded +*/ +int raw_numbytes(opj_raw_t *raw); +/** +Initialize the decoder +@param raw RAW handle +@param bp Pointer to the start of the buffer from which the bytes will be read +@param len Length of the input buffer +*/ +void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len); +/** +Decode a symbol using raw-decoder. Cfr p.506 TAUBMAN +@param raw RAW handle +@return Returns the decoded symbol (0 or 1) +*/ +int raw_decode(opj_raw_t *raw); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __RAW_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1.c new file mode 100755 index 0000000000..43a78b6adc --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1.c @@ -0,0 +1,1181 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup T1 T1 - Implementation of the tier-1 coding */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +static int t1_getctxno_zc(opj_t1_t *t1, int f, int orient); +static int t1_getctxno_sc(opj_t1_t *t1, int f); +static int t1_getctxno_mag(opj_t1_t *t1, int f); +static int t1_getspb(opj_t1_t *t1, int f); +static int t1_getnmsedec_sig(opj_t1_t *t1, int x, int bitpos); +static int t1_getnmsedec_ref(opj_t1_t *t1, int x, int bitpos); +static void t1_updateflags(int *fp, int s); +/** +Encode significant pass +*/ +static void t1_enc_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc); +/** +Decode significant pass +*/ +static void t1_dec_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int oneplushalf, char type, int vsc); +/** +Encode significant pass +*/ +static void t1_enc_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, char type, int cblksty); +/** +Decode significant pass +*/ +static void t1_dec_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, char type, int cblksty); +/** +Encode refinement pass +*/ +static void t1_enc_refpass_step(opj_t1_t *t1, int *fp, int *dp, int bpno, int one, int *nmsedec, char type, int vsc); +/** +Decode refinement pass +*/ +static void t1_dec_refpass_step(opj_t1_t *t1, int *fp, int *dp, int poshalf, int neghalf, char type, int vsc); +/** +Encode refinement pass +*/ +static void t1_enc_refpass(opj_t1_t *t1, int w, int h, int l, int bpno, int *nmsedec, char type, int cblksty); +/** +Decode refinement pass +*/ +static void t1_dec_refpass(opj_t1_t *t1, int w, int h, int l, int bpno, char type, int cblksty); +/** +Encode clean-up pass +*/ +static void t1_enc_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc); +/** +Decode clean-up pass +*/ +static void t1_dec_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int oneplushalf, int partial, int vsc); +/** +Encode clean-up pass +*/ +static void t1_enc_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, int cblksty); +/** +Decode clean-up pass +*/ +static void t1_dec_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int cblksty); +/** +Encode 1 code-block +@param t1 T1 handle +@param cblk Code-block coding parameters +@param orient +@param compno Component number +@param level +@param dwtid +@param stepsize +@param cblksty Code-block style +@param numcomps +@param tile +*/ +static void t1_encode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient, int compno, int level[3], int dwtid[3], double stepsize, int cblksty, int numcomps, opj_tcd_tile_t * tile); +/** +Decode 1 code-block +@param t1 T1 handle +@param cblk Code-block coding parameters +@param orient +@param roishift Region of interest shifting value +@param cblksty Code-block style +*/ +static void t1_decode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient, int roishift, int cblksty); + +static int t1_init_ctxno_zc(int f, int orient); +static int t1_init_ctxno_sc(int f); +static int t1_init_ctxno_mag(int f); +static int t1_init_spb(int f); +/** +Initialize the look-up tables of the Tier-1 coder/decoder +@param t1 T1 handle +*/ +static void t1_init_luts(opj_t1_t *t1); + +/*@}*/ + +/*@}*/ + +/* ----------------------------------------------------------------------- */ + +static int t1_getctxno_zc(opj_t1_t *t1, int f, int orient) { + return t1->lut_ctxno_zc[(orient << 8) | (f & T1_SIG_OTH)]; +} + +static int t1_getctxno_sc(opj_t1_t *t1, int f) { + return t1->lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4]; +} + +static int t1_getctxno_mag(opj_t1_t *t1, int f) { + return t1->lut_ctxno_mag[(f & T1_SIG_OTH) | (((f & T1_REFINE) != 0) << 11)]; +} + +static int t1_getspb(opj_t1_t *t1, int f) { + return t1->lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4]; +} + +static int t1_getnmsedec_sig(opj_t1_t *t1, int x, int bitpos) { + if (bitpos > T1_NMSEDEC_FRACBITS) { + return t1->lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)]; + } + + return t1->lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)]; +} + +static int t1_getnmsedec_ref(opj_t1_t *t1, int x, int bitpos) { + if (bitpos > T1_NMSEDEC_FRACBITS) { + return t1->lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)]; + } + + return t1->lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)]; +} + +static void t1_updateflags(int *fp, int s) { + int *np = fp - (T1_MAXCBLKW + 2); + int *sp = fp + (T1_MAXCBLKW + 2); + np[-1] |= T1_SIG_SE; + np[1] |= T1_SIG_SW; + sp[-1] |= T1_SIG_NE; + sp[1] |= T1_SIG_NW; + *np |= T1_SIG_S; + *sp |= T1_SIG_N; + fp[-1] |= T1_SIG_E; + fp[1] |= T1_SIG_W; + if (s) { + *np |= T1_SGN_S; + *sp |= T1_SGN_N; + fp[-1] |= T1_SGN_E; + fp[1] |= T1_SGN_W; + } +} + +static void t1_enc_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc) { + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp); + if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) { + v = int_abs(*dp) & one ? 1 : 0; + if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ + mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient)); /* ESSAI */ + mqc_bypass_enc(mqc, v); + } else { + mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient)); + mqc_encode(mqc, v); + } + if (v) { + v = *dp < 0 ? 1 : 0; + *nmsedec += t1_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS); + if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ + mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag)); /* ESSAI */ + mqc_bypass_enc(mqc, v); + } else { + mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag)); + mqc_encode(mqc, v ^ t1_getspb(t1, flag)); + } + t1_updateflags(fp, v); + *fp |= T1_SIG; + } + *fp |= T1_VISIT; + } +} + +static void t1_dec_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int oneplushalf, char type, int vsc) { + int v, flag; + + opj_raw_t *raw = t1->raw; /* RAW component */ + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp); + if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) { + if (type == T1_TYPE_RAW) { + if (raw_decode(raw)) { + v = raw_decode(raw); /* ESSAI */ + *dp = v ? -oneplushalf : oneplushalf; + t1_updateflags(fp, v); + *fp |= T1_SIG; + } + } else { + mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient)); + if (mqc_decode(mqc)) { + mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag)); + v = mqc_decode(mqc) ^ t1_getspb(t1, flag); + *dp = v ? -oneplushalf : oneplushalf; + t1_updateflags(fp, v); + *fp |= T1_SIG; + } + } + *fp |= T1_VISIT; + } +} /* VSC and BYPASS by Antonin */ + +static void t1_enc_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, char type, int cblksty) { + int i, j, k, m, one, vsc; + *nmsedec = 0; + one = 1 << (bpno + T1_NMSEDEC_FRACBITS); + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + for (j = k; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_enc_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, bpno, one, nmsedec, type, vsc); + } + } + } + } +} + +static void t1_dec_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, char type, int cblksty) { + int i, j, k, m, one, half, oneplushalf, vsc; + one = 1 << bpno; + half = one >> 1; + oneplushalf = one | half; + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + for (j = k; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_dec_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf, type, vsc); + } + } + } + } +} /* VSC and BYPASS by Antonin */ + +static void t1_enc_refpass_step(opj_t1_t *t1, int *fp, int *dp, int bpno, int one, int *nmsedec, char type, int vsc) { + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp); + if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) { + *nmsedec += t1_getnmsedec_ref(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS); + v = int_abs(*dp) & one ? 1 : 0; + if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ + mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag)); /* ESSAI */ + mqc_bypass_enc(mqc, v); + } else { + mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag)); + mqc_encode(mqc, v); + } + *fp |= T1_REFINE; + } +} + +static void t1_dec_refpass_step(opj_t1_t *t1, int *fp, int *dp, int poshalf, int neghalf, char type, int vsc) { + int v, t, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + opj_raw_t *raw = t1->raw; /* RAW component */ + + flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp); + if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) { + if (type == T1_TYPE_RAW) { + mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag)); /* ESSAI */ + v = raw_decode(raw); + } else { + mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag)); + v = mqc_decode(mqc); + } + t = v ? poshalf : neghalf; + *dp += *dp < 0 ? -t : t; + *fp |= T1_REFINE; + } +} /* VSC and BYPASS by Antonin */ + +static void t1_enc_refpass(opj_t1_t *t1, int w, int h, int l, int bpno, int *nmsedec, char type, int cblksty) { + int i, j, k, m, one, vsc; + *nmsedec = 0; + one = 1 << (bpno + T1_NMSEDEC_FRACBITS); + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + for (j = k; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_enc_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i], bpno, one, nmsedec, type, vsc); + } + } + } + } +} + +static void t1_dec_refpass(opj_t1_t *t1, int w, int h, int l, int bpno, char type, int cblksty) { + int i, j, k, m, one, poshalf, neghalf; + int vsc; + one = 1 << bpno; + poshalf = one >> 1; + neghalf = bpno > 0 ? -poshalf : -1; + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + for (j = k; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_dec_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i], poshalf, neghalf, type, vsc); + } + } + } + } +} /* VSC and BYPASS by Antonin */ + +static void t1_enc_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc) { + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp); + if (partial) { + goto LABEL_PARTIAL; + } + if (!(*fp & (T1_SIG | T1_VISIT))) { + mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient)); + v = int_abs(*dp) & one ? 1 : 0; + mqc_encode(mqc, v); + if (v) { +LABEL_PARTIAL: + *nmsedec += t1_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS); + mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag)); + v = *dp < 0 ? 1 : 0; + mqc_encode(mqc, v ^ t1_getspb(t1, flag)); + t1_updateflags(fp, v); + *fp |= T1_SIG; + } + } + *fp &= ~T1_VISIT; +} + +static void t1_dec_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int oneplushalf, int partial, int vsc) { + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp); + if (partial) { + goto LABEL_PARTIAL; + } + if (!(flag & (T1_SIG | T1_VISIT))) { + mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient)); + if (mqc_decode(mqc)) { +LABEL_PARTIAL: + mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag)); + v = mqc_decode(mqc) ^ t1_getspb(t1, flag); + *dp = v ? -oneplushalf : oneplushalf; + t1_updateflags(fp, v); + *fp |= T1_SIG; + } + } + *fp &= ~T1_VISIT; +} /* VSC and BYPASS by Antonin */ + +static void t1_enc_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, int cblksty) { + int i, j, k, m, one, agg, runlen, vsc; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + *nmsedec = 0; + one = 1 << (bpno + T1_NMSEDEC_FRACBITS); + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + if (k + 3 < h) { + if (cblksty & J3D_CCP_CBLKSTY_VSC) { + agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || (t1->flags[1 + m][1 + k + 3][1 + i] + & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH)); + } else { + agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || t1->flags[1 + m][1 + k + 3][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)); + } + } else { + agg = 0; + } + if (agg) { + for (runlen = 0; runlen < 4; runlen++) { + if (int_abs(t1->data[m][k + runlen][i]) & one) + break; + } + mqc_setcurctx(mqc, T1_CTXNO_AGG); + mqc_encode(mqc, runlen != 4); + if (runlen == 4) { + continue; + } + mqc_setcurctx(mqc, T1_CTXNO_UNI); + mqc_encode(mqc, runlen >> 1); + mqc_encode(mqc, runlen & 1); + } else { + runlen = 0; + } + for (j = k + runlen; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_enc_clnpass_step(t1, &(t1->flags[1 + m][1 + j][1 + i]), &(t1->data[m][j][i]), orient, bpno, one, nmsedec, agg && (j == k + runlen), vsc); + } + } + } + } +} + +static void t1_dec_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int cblksty) { + int i, j, k, m, one, half, oneplushalf, agg, runlen, vsc; + int segsym = cblksty & J3D_CCP_CBLKSTY_SEGSYM; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + one = 1 << bpno; + half = one >> 1; + oneplushalf = one | half; + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + if (k + 3 < h) { + if (cblksty & J3D_CCP_CBLKSTY_VSC) { + agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || (t1->flags[1 + m][1 + k + 3][1 + i] + & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH)); + } else { + agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || t1->flags[1 + m][1 + k + 3][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)); + } + } else { + agg = 0; + } + if (agg) { + mqc_setcurctx(mqc, T1_CTXNO_AGG); + if (!mqc_decode(mqc)) { + continue; + } + mqc_setcurctx(mqc, T1_CTXNO_UNI); + runlen = mqc_decode(mqc); + runlen = (runlen << 1) | mqc_decode(mqc); + } else { + runlen = 0; + } + for (j = k + runlen; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_dec_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf, agg && (j == k + runlen), vsc); + } + } + } + } + if (segsym) { + int v = 0; + mqc_setcurctx(mqc, T1_CTXNO_UNI); + v = mqc_decode(mqc); + v = (v << 1) | mqc_decode(mqc); + v = (v << 1) | mqc_decode(mqc); + v = (v << 1) | mqc_decode(mqc); + /* + if (v!=0xa) { + opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v); + } + */ + } +} /* VSC and BYPASS by Antonin */ + + +static void t1_encode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient, int compno, int level[3], int dwtid[3], double stepsize, int cblksty, int numcomps, opj_tcd_tile_t * tile) { + int i, j, k; + int w, h, l; + int passno; + int bpno, passtype; + int max; + int nmsedec = 0; + double cumwmsedec = 0; + char type = T1_TYPE_MQ; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + w = cblk->x1 - cblk->x0; + h = cblk->y1 - cblk->y0; + l = cblk->z1 - cblk->z0; + + max = 0; + for (k = 0; k < l; k++) { + for (j = 0; j < h; j++) { + for (i = 0; i < w; i++) { + max = int_max(max, int_abs(t1->data[k][j][i])); + } + } + } + for (k = 0; k <= l; k++) { + for (j = 0; j <= h; j++) { + for (i = 0; i <= w; i++) { + t1->flags[k][j][i] = 0; + } + } + } + + cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0; + + bpno = cblk->numbps - 1; + passtype = 2; + + mqc_reset_enc(mqc); + mqc_init_enc(mqc, cblk->data); + + for (passno = 0; bpno >= 0; passno++) { + opj_tcd_pass_t *pass = &cblk->passes[passno]; + int correction = 3; + double tmpwmsedec; + type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; + //fprintf(stdout,"passno %d passtype %d w %d h %d l %d bpno %d orient %d type %d cblksty %d\n",passno,passtype,w,h,l,bpno,orient,type,cblksty); + + switch (passtype) { + case 0: + t1_enc_sigpass(t1, w, h, l, bpno, orient, &nmsedec, type, cblksty); + break; + case 1: + t1_enc_refpass(t1, w, h, l, bpno, &nmsedec, type, cblksty); + break; + case 2: + //fprintf(stdout,"w %d h %d l %d bpno %d orient %d \n",w,h,l,bpno,orient); + t1_enc_clnpass(t1, w, h, l, bpno, orient, &nmsedec, cblksty); + /* code switch SEGMARK (i.e. SEGSYM) */ + if (cblksty & J3D_CCP_CBLKSTY_SEGSYM) + mqc_segmark_enc(mqc); + break; + } + + /* fixed_quality */ + tmpwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, stepsize, numcomps, dwtid); + cumwmsedec += tmpwmsedec; + tile->distotile += tmpwmsedec; + + /* Code switch "RESTART" (i.e. TERMALL) */ + if ((cblksty & J3D_CCP_CBLKSTY_TERMALL) && !((passtype == 2) && (bpno - 1 < 0))) { + if (type == T1_TYPE_RAW) { + mqc_flush(mqc); + correction = 1; + /* correction = mqc_bypass_flush_enc(); */ + } else { /* correction = mqc_restart_enc(); */ + mqc_flush(mqc); + correction = 1; + } + pass->term = 1; + } else { + if (((bpno < (cblk->numbps - 4) && (passtype > 0)) + || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) { + if (type == T1_TYPE_RAW) { + mqc_flush(mqc); + correction = 1; + /* correction = mqc_bypass_flush_enc(); */ + } else { /* correction = mqc_restart_enc(); */ + mqc_flush(mqc); + correction = 1; + } + pass->term = 1; + } else { + pass->term = 0; + } + } + + if (++passtype == 3) { + passtype = 0; + bpno--; + } + + if (pass->term && bpno > 0) { + type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; + if (type == T1_TYPE_RAW) + mqc_bypass_init_enc(mqc); + else + mqc_restart_init_enc(mqc); + } + + pass->distortiondec = cumwmsedec; + pass->rate = mqc_numbytes(mqc) + correction; /* FIXME */ + pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate); + + /* Code-switch "RESET" */ + if (cblksty & J3D_CCP_CBLKSTY_RESET) + mqc_reset_enc(mqc); + } + + /* Code switch "ERTERM" (i.e. PTERM) */ + if (cblksty & J3D_CCP_CBLKSTY_PTERM) + mqc_erterm_enc(mqc); + else /* Default coding */ if (!(cblksty & J3D_CCP_CBLKSTY_LAZY)) + mqc_flush(mqc); + + cblk->totalpasses = passno; +} + +static void t1_decode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient, int roishift, int cblksty) { + int i, j, k, w, h, l; + int bpno, passtype; + int segno, passno; + char type = T1_TYPE_MQ; /* BYPASS mode */ + + opj_raw_t *raw = t1->raw; /* RAW component */ + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + w = cblk->x1 - cblk->x0; + h = cblk->y1 - cblk->y0; + l = cblk->z1 - cblk->z0; + + for (k = 0; k < l; k++) { + for (j = 0; j < h; j++) { + for (i = 0; i < w; i++) { + t1->data[k][j][i] = 0; + } + } + } + + for (k = 0; k <= l; k++) { + for (j = 0; j <= h; j++) { + for (i = 0; i <= w; i++) { + t1->flags[k][j][i] = 0; + } + } + } + + bpno = roishift + cblk->numbps - 1; + passtype = 2; + + mqc_reset_enc(mqc); + + for (segno = 0; segno < cblk->numsegs; segno++) { + opj_tcd_seg_t *seg = &cblk->segs[segno]; + + /* BYPASS mode */ + type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; + if (type == T1_TYPE_RAW) { + raw_init_dec(raw, seg->data, seg->len); + } else { + mqc_init_dec(mqc, seg->data, seg->len); + } + + for (passno = 0; passno < seg->numpasses; passno++) { + switch (passtype) { + case 0: + t1_dec_sigpass(t1, w, h, l, bpno+1, orient, type, cblksty); + break; + case 1: + t1_dec_refpass(t1, w, h, l, bpno+1, type, cblksty); + break; + case 2: + t1_dec_clnpass(t1, w, h, l, bpno+1, orient, cblksty); + break; + } + + if ((cblksty & J3D_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) { + mqc_reset_enc(mqc); + } + if (++passtype == 3) { + passtype = 0; + bpno--; + } + } + } +} + +static int t1_init_ctxno_zc(int f, int orient) { + int h, v, d, n, t, hv; + n = 0; + h = ((f & T1_SIG_W) != 0) + ((f & T1_SIG_E) != 0); + v = ((f & T1_SIG_N) != 0) + ((f & T1_SIG_S) != 0); + d = ((f & T1_SIG_NW) != 0) + ((f & T1_SIG_NE) != 0) + ((f & T1_SIG_SE) != 0) + ((f & T1_SIG_SW) != 0); + + switch (orient) { + case 2: + t = h; + h = v; + v = t; + case 0: + case 1: + if (!h) { + if (!v) { + if (!d) + n = 0; + else if (d == 1) + n = 1; + else + n = 2; + } else if (v == 1) { + n = 3; + } else { + n = 4; + } + } else if (h == 1) { + if (!v) { + if (!d) + n = 5; + else + n = 6; + } else { + n = 7; + } + } else + n = 8; + break; + case 3: + hv = h + v; + if (!d) { + if (!hv) { + n = 0; + } else if (hv == 1) { + n = 1; + } else { + n = 2; + } + } else if (d == 1) { + if (!hv) { + n = 3; + } else if (hv == 1) { + n = 4; + } else { + n = 5; + } + } else if (d == 2) { + if (!hv) { + n = 6; + } else { + n = 7; + } + } else { + n = 8; + } + break; + } + + return (T1_CTXNO_ZC + n); +} + +static int t1_init_ctxno_sc(int f) { + int hc, vc, n; + n = 0; + + hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) == + T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W), + 1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) == + (T1_SIG_E | T1_SGN_E)) + + ((f & (T1_SIG_W | T1_SGN_W)) == + (T1_SIG_W | T1_SGN_W)), 1); + + vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) == + T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S), + 1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) == + (T1_SIG_N | T1_SGN_N)) + + ((f & (T1_SIG_S | T1_SGN_S)) == + (T1_SIG_S | T1_SGN_S)), 1); + + if (hc < 0) { + hc = -hc; + vc = -vc; + } + if (!hc) { + if (vc == -1) + n = 1; + else if (!vc) + n = 0; + else + n = 1; + } else if (hc == 1) { + if (vc == -1) + n = 2; + else if (!vc) + n = 3; + else + n = 4; + } + + return (T1_CTXNO_SC + n); +} + +static int t1_init_ctxno_mag(int f) { + int n; + if (!(f & T1_REFINE)) + n = (f & (T1_SIG_OTH)) ? 1 : 0; + else + n = 2; + + return (T1_CTXNO_MAG + n); +} + +static int t1_init_spb(int f) { + int hc, vc, n; + + hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) == + T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W), + 1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) == + (T1_SIG_E | T1_SGN_E)) + + ((f & (T1_SIG_W | T1_SGN_W)) == + (T1_SIG_W | T1_SGN_W)), 1); + + vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) == + T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S), + 1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) == + (T1_SIG_N | T1_SGN_N)) + + ((f & (T1_SIG_S | T1_SGN_S)) == + (T1_SIG_S | T1_SGN_S)), 1); + + if (!hc && !vc) + n = 0; + else + n = (!(hc > 0 || (!hc && vc > 0))); + + return n; +} + +static void t1_init_luts(opj_t1_t *t1) { + int i, j; + double u, v, t; + for (j = 0; j < 4; j++) { + for (i = 0; i < 256; ++i) { + t1->lut_ctxno_zc[(j << 8) | i] = t1_init_ctxno_zc(i, j); + } + } + for (i = 0; i < 256; i++) { + t1->lut_ctxno_sc[i] = t1_init_ctxno_sc(i << 4); + } + for (j = 0; j < 2; j++) { + for (i = 0; i < 2048; ++i) { + t1->lut_ctxno_mag[(j << 11) + i] = t1_init_ctxno_mag((j ? T1_REFINE : 0) | i); + } + } + for (i = 0; i < 256; ++i) { + t1->lut_spb[i] = t1_init_spb(i << 4); + } + /* FIXME FIXME FIXME */ + /* fprintf(stdout,"nmsedec luts:\n"); */ + for (i = 0; i < (1 << T1_NMSEDEC_BITS); i++) { + t = i / pow(2, T1_NMSEDEC_FRACBITS); + u = t; + v = t - 1.5; + t1->lut_nmsedec_sig[i] = + int_max(0, + (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + t1->lut_nmsedec_sig0[i] = + int_max(0, + (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + u = t - 1.0; + if (i & (1 << (T1_NMSEDEC_BITS - 1))) { + v = t - 1.5; + } else { + v = t - 0.5; + } + t1->lut_nmsedec_ref[i] = + int_max(0, + (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + t1->lut_nmsedec_ref0[i] = + int_max(0, + (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + } +} + +/* ----------------------------------------------------------------------- */ + +opj_t1_t* t1_create(opj_common_ptr cinfo) { + opj_t1_t *t1 = (opj_t1_t*)opj_malloc(sizeof(opj_t1_t)); + if(t1) { + t1->cinfo = cinfo; + /* create MQC and RAW handles */ + t1->mqc = mqc_create(); + t1->raw = raw_create(); + /* initialize the look-up tables of the Tier-1 coder/decoder */ + t1_init_luts(t1); + } + return t1; +} + +void t1_destroy(opj_t1_t *t1) { + if(t1) { + /* destroy MQC and RAW handles */ + mqc_destroy(t1->mqc); + raw_destroy(t1->raw); + //opj_free(t1->data); + //opj_free(t1->flags); + opj_free(t1); + } +} + +void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp) { + int compno, resno, bandno, precno, cblkno; + int x, y, z, i, j, k, orient; + int n=0; + int level[3]; + FILE *fid = NULL; +// char filename[10]; + tile->distotile = 0; /* fixed_quality */ + + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + + for (resno = 0; resno < tilec->numresolution[0]; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + /* Weighted first order entropy + sprintf(filename,"res%d.txt",resno); + if ((fid = fopen(filename,"w")) == 0){ + fprintf(stdout,"Error while opening %s\n", filename); + exit(1); + } + */ + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + + //fprintf(stdout,"Precno %d Cblkno %d \n",precno,cblkno); + if (band->bandno == 0) { + x = cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 1) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 2) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 3) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 4) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 5) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 6) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 7) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } + + if (tcp->tccps[compno].reversible == 1) { + for (k = 0; k < cblk->z1 - cblk->z0; k++) { + for (j = 0; j < cblk->y1 - cblk->y0; j++) { + for (i = 0; i < cblk->x1 - cblk->x0; i++) { + t1->data[k][j][i] = + tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] << T1_NMSEDEC_FRACBITS; +//fprintf(fid," %d",t1->data[k][j][i]); + } + } + } + } else if (tcp->tccps[compno].reversible == 0) { + for (k = 0; k < cblk->z1 - cblk->z0; k++) { + for (j = 0; j < cblk->y1 - cblk->y0; j++) { + for (i = 0; i < cblk->x1 - cblk->x0; i++) { + t1->data[k][j][i] = fix_mul( + tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)], + 8192 * 8192 / ((int) floor(band->stepsize * 8192))) >> (13 - T1_NMSEDEC_FRACBITS); + } + } + } + } + + orient = band->bandno; /* FIXME */ + if (orient == 2) { + orient = 1; + } else if (orient == 1) { + orient = 2; + } + for (i = 0; i < 3; i++) + level[i] = tilec->numresolution[i] - 1 - resno; + //fprintf(stdout,"t1_encode_cblk(t1, cblk, %d, %d, %d %d %d, %d, %f, %d, %d, tile);\n", orient, compno, level[0], level[1], level[2], tcp->tccps[compno].reversible, band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps); + t1_encode_cblk(t1, cblk, orient, compno, level, tcp->tccps[compno].dwtid, band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps, tile); + + } /* cblkno */ + } /* precno */ +//fprintf(fid,"\n"); + } /* bandno */ +//fclose(fid); + } /* resno */ + } /* compno */ +} + +void t1_decode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp) { + int compno, resno, bandno, precno, cblkno; + + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + + for (resno = 0; resno < tilec->numresolution[0]; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + + for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + int x, y, k, i, j, z, orient; + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + + orient = band->bandno; /* FIXME */ + if (orient == 2) { + orient = 1; + } else if (orient == 1) { + orient = 2; + } + + t1_decode_cblk(t1, cblk, orient, tcp->tccps[compno].roishift, tcp->tccps[compno].cblksty); + + if (band->bandno == 0) { + x = cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 1) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 2) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 3) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 4) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 5) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 6) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 7) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } + + if (tcp->tccps[compno].roishift) { + int thresh, val, mag; + thresh = 1 << tcp->tccps[compno].roishift; + for (k = 0; k < cblk->z1 - cblk->z0; k++) { + for (j = 0; j < cblk->y1 - cblk->y0; j++) { + for (i = 0; i < cblk->x1 - cblk->x0; i++) { + val = t1->data[k][j][i]; + mag = int_abs(val); + if (mag >= thresh) { + mag >>= tcp->tccps[compno].roishift; + t1->data[k][j][i] = val < 0 ? -mag : mag; + } + } + } + } + } + + if (tcp->tccps[compno].reversible == 1) { + for (k = 0; k < cblk->z1 - cblk->z0; k++) { + for (j = 0; j < cblk->y1 - cblk->y0; j++) { + for (i = 0; i < cblk->x1 - cblk->x0; i++) { + int tmp = t1->data[k][j][i]; + tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = tmp/2; + } + } + } + } else { /* if (tcp->tccps[compno].reversible == 0) */ + for (k = 0; k < cblk->z1 - cblk->z0; k++) { + for (j = 0; j < cblk->y1 - cblk->y0; j++) { + for (i = 0; i < cblk->x1 - cblk->x0; i++) { + double tmp = (double)(t1->data[k][j][i] * band->stepsize * 4096.0); + if (t1->data[k][j][i] >> 1 == 0) { + tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = 0; + } else { + int tmp2 = ((int) (floor(fabs(tmp)))) + ((int) floor(fabs(tmp*2))%2); + tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = ((tmp<0)?-tmp2:tmp2); + } + } + } + } + } + } /* cblkno */ + } /* precno */ + } /* bandno */ + } /* resno */ + } /* compno */ +} + + +/** mod fixed_quality */ +double t1_getwmsedec(int nmsedec, int compno, int level[3], int orient, int bpno, double stepsize, int numcomps, int dwtid[3]) { + double w1, w2, wmsedec; + + if (dwtid[0] == 1 || dwtid[1] == 1 || dwtid[2] == 1) { + w1 = (numcomps > 1) ? mct_getnorm_real(compno) : 1; + } else { + w1 = (numcomps > 1) ? mct_getnorm(compno) : 1; + } + w2 = dwt_getnorm(orient, level, dwtid); + + //fprintf(stdout,"nmsedec %d level %d %d %d orient %d bpno %d stepsize %f \n",nmsedec ,level[0],level[1],level[2],orient,bpno,stepsize); + wmsedec = w1 * w2 * stepsize * (1 << bpno); + wmsedec *= wmsedec * nmsedec / 8192.0; + + return wmsedec; +} +/** mod fixed_quality */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1.h new file mode 100755 index 0000000000..ec7160c124 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1.h @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __T1_H +#define __T1_H +/** +@file t1.h +@brief Implementation of the tier-1 coding (coding of code-block coefficients) (T1) + +The functions in T1.C have for goal to realize the tier-1 coding operation. The functions +in T1.C are used by some function in TCD.C. +*/ + +/** @defgroup T1 T1 - Implementation of the tier-1 coding */ +/*@{*/ + +/* ----------------------------------------------------------------------- */ +#define T1_NMSEDEC_BITS 7 + +#define T1_MAXCBLKW 256 /*< Maximum size of code-block (width) */ +#define T1_MAXCBLKH 256 /*< Maximum size of code-block (heigth) */ +#define T1_MAXCBLKD 256 /*< Maximum size of code-block (depth) */ +#define T1_MINCBLKW 4 /*< Minimum size of code-block (width) */ +#define T1_MINCBLKH 4 /*< Minimum size of code-block (heigth) */ +#define T1_MINCBLKD 4 /*< Minimum size of code-block (depth) */ +#define T1_MAXWHD 18 +#define T1_CBLKW 256 +#define T1_CBLKH 256 +#define T1_CBLKD 256 + +#define T1_SIG_NE 0x0001 /*< Context orientation : North-East direction */ +#define T1_SIG_SE 0x0002 /*< Context orientation : South-East direction */ +#define T1_SIG_SW 0x0004 /*< Context orientation : South-West direction */ +#define T1_SIG_NW 0x0008 /*< Context orientation : North-West direction */ +#define T1_SIG_N 0x0010 /*< Context orientation : North direction */ +#define T1_SIG_E 0x0020 /*< Context orientation : East direction */ +#define T1_SIG_S 0x0040 /*< Context orientation : South direction */ +#define T1_SIG_W 0x0080 /*< Context orientation : West direction */ +#define T1_SIG_OTH (T1_SIG_N|T1_SIG_NE|T1_SIG_E|T1_SIG_SE|T1_SIG_S|T1_SIG_SW|T1_SIG_W|T1_SIG_NW) +#define T1_SIG_PRIM (T1_SIG_N|T1_SIG_E|T1_SIG_S|T1_SIG_W) + +#define T1_SGN_N 0x0100 +#define T1_SGN_E 0x0200 +#define T1_SGN_S 0x0400 +#define T1_SGN_W 0x0800 +#define T1_SGN (T1_SGN_N|T1_SGN_E|T1_SGN_S|T1_SGN_W) + +#define T1_SIG 0x1000 +#define T1_REFINE 0x2000 +#define T1_VISIT 0x4000 + +#define T1_NUMCTXS_AGG 1 +#define T1_NUMCTXS_ZC 9 +#define T1_NUMCTXS_MAG 3 +#define T1_NUMCTXS_SC 5 +#define T1_NUMCTXS_UNI 1 + +#define T1_CTXNO_AGG 0 +#define T1_CTXNO_ZC (T1_CTXNO_AGG+T1_NUMCTXS_AGG) +#define T1_CTXNO_MAG (T1_CTXNO_ZC+T1_NUMCTXS_ZC) +#define T1_CTXNO_SC (T1_CTXNO_MAG+T1_NUMCTXS_MAG) +#define T1_CTXNO_UNI (T1_CTXNO_SC+T1_NUMCTXS_SC) +#define T1_NUMCTXS (T1_CTXNO_UNI+T1_NUMCTXS_UNI) + +#define T1_NMSEDEC_FRACBITS (T1_NMSEDEC_BITS-1) + +#define T1_TYPE_MQ 0 /*< Normal coding using entropy coder */ +#define T1_TYPE_RAW 1 /*< No encoding the information is store under raw format in codestream (mode switch RAW)*/ + +/* ----------------------------------------------------------------------- */ + +/** +Tier-1 coding (coding of code-block coefficients) +*/ +typedef struct opj_t1 { + /** codec context */ + opj_common_ptr cinfo; + + /** MQC component */ + opj_mqc_t *mqc; + /** RAW component */ + opj_raw_t *raw; + /** LUTs for context-based coding */ + int lut_ctxno_zc[1024]; + int lut_ctxno_sc[256]; + int lut_ctxno_mag[4096]; + int lut_spb[256]; + /** LUTs for decoding normalised MSE */ + int lut_nmsedec_sig[1 << T1_NMSEDEC_BITS]; + int lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS]; + int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS]; + int lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS]; + /** Codeblock data */ + int data[T1_CBLKD][T1_CBLKH][T1_CBLKW];//int ***data; + /** Context information for each voxel in codeblock */ + int flags[T1_CBLKD + 2][T1_CBLKH + 2][T1_CBLKH + 2];//int ***flags; +} opj_t1_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a new T1 handle +and initialize the look-up tables of the Tier-1 coder/decoder +@return Returns a new T1 handle if successful, returns NULL otherwise +@see t1_init_luts +*/ +opj_t1_t* t1_create(opj_common_ptr cinfo); +/** +Destroy a previously created T1 handle +@param t1 T1 handle to destroy +*/ +void t1_destroy(opj_t1_t *t1); +/** +Encode the code-blocks of a tile +@param t1 T1 handle +@param tile The tile to encode +@param tcp Tile coding parameters +*/ +void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp); +/** +Decode the code-blocks of a tile +@param t1 T1 handle +@param tile The tile to decode +@param tcp Tile coding parameters +*/ +void t1_decode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp); +/** +Get weigths of MSE decoding +@param nmsedec The normalized MSE reduction +@param compno +@param level +@param orient +@param bpno +@param stepsize +@param numcomps +@param dwtid +returns MSE associated to decoding pass +*/ +double t1_getwmsedec(int nmsedec, int compno, int level[3], int orient, int bpno, double stepsize, int numcomps, int dwtid[3]); + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __T1_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1_3d.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1_3d.c new file mode 100755 index 0000000000..efdf2efcf5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1_3d.c @@ -0,0 +1,1230 @@ +/* + * Copyrigth (c) 2006, Mónica Díez, LPI-UVA, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup T1_3D T1_3D - Implementation of the tier-1 coding */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +static int t1_3d_getctxno_zc(unsigned int f, int orient); +static int t1_3d_getctxno_sc(unsigned int f); +static int t1_3d_getctxno_mag(unsigned int f, int fsvr); +static int t1_3d_getspb(unsigned int f); +static int t1_3d_getnmsedec_sig(opj_t1_3d_t *t1, int x, int bitpos); +static int t1_3d_getnmsedec_ref(opj_t1_3d_t *t1, int x, int bitpos); +static void t1_3d_updateflags(unsigned int *fp, int s); +/** +Encode significant pass +*/ +static void t1_3d_enc_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc); +/** +Decode significant pass +*/ +static void t1_3d_dec_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int oneplushalf, char type, int vsc); +/** +Encode significant pass +*/ +static void t1_3d_enc_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, char type, int cblksty); +/** +Decode significant pass +*/ +static void t1_3d_dec_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, char type, int cblksty); +/** +Encode refinement pass +*/ +static void t1_3d_enc_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int bpno, int one, int *nmsedec, char type, int vsc); +/** +Decode refinement pass +*/ +static void t1_3d_dec_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int poshalf, int neghalf, char type, int vsc); +/** +Encode refinement pass +*/ +static void t1_3d_enc_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int *nmsedec, char type, int cblksty); +/** +Decode refinement pass +*/ +static void t1_3d_dec_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, char type, int cblksty); +/** +Encode clean-up pass +*/ +static void t1_3d_enc_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc); +/** +Decode clean-up pass +*/ +static void t1_3d_dec_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int oneplushalf, int partial, int vsc); +/** +Encode clean-up pass +*/ +static void t1_3d_enc_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, int cblksty); +/** +Decode clean-up pass +*/ +static void t1_3d_dec_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int cblksty); +/** +Encode 1 code-block +@param t1 T1 handle +@param cblk Code-block coding parameters +@param orient +@param compno Component number +@param level[3] +@param dwtid[3] +@param stepsize +@param cblksty Code-block style +@param numcomps +@param tile +*/ +static void t1_3d_encode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk, int orient, int compno, int level[3], int dwtid[3], double stepsize, int cblksty, int numcomps, opj_tcd_tile_t * tile); +/** +Decode 1 code-block +@param t1 T1 handle +@param cblk Code-block coding parameters +@param orient +@param roishift Region of interest shifting value +@param cblksty Code-block style +*/ +static void t1_3d_decode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk, int orient, int roishift, int cblksty); +static int t1_3d_init_ctxno_zc(unsigned int f, int orient); +static int t1_3d_init_ctxno_sc(unsigned int f); +static int t1_3d_init_ctxno_mag(unsigned int f, int f2); +static int t1_3d_init_spb(unsigned int f); +/** +Initialize the look-up tables of the Tier-1 coder/decoder +@param t1 T1 handle +*/ +static void t1_3d_init_luts(opj_t1_3d_t *t1); + +/*@}*/ + +/*@}*/ + +/* ----------------------------------------------------------------------- */ + +static int t1_3d_getctxno_zc(unsigned int f, int orient) { + return t1_3d_init_ctxno_zc((f & T1_3D_SIG_OTH), orient); +} + +static int t1_3d_getctxno_sc(unsigned int f) { + return t1_3d_init_ctxno_sc((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN)); + //return t1->lut_ctxno_sc[((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN)) >> 4]; +} + +static int t1_3d_getctxno_mag(unsigned int f, int fsvr) { + return t1_3d_init_ctxno_mag((f & T1_3D_SIG_OTH), fsvr); +} + +static int t1_3d_getspb(unsigned int f) { + return t1_3d_init_spb((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN)); + //return t1->lut_spb[((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN)) >> 4]; +} + +static int t1_3d_getnmsedec_sig(opj_t1_3d_t *t1, int x, int bitpos) { + if (bitpos > T1_NMSEDEC_FRACBITS) { + return t1->lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)]; + } + + return t1->lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)]; +} + +static int t1_3d_getnmsedec_ref(opj_t1_3d_t *t1, int x, int bitpos) { + if (bitpos > T1_NMSEDEC_FRACBITS) { + return t1->lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)]; + } + + return t1->lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)]; +} + +static void t1_3d_updateflags(unsigned int *fp, int s) { + unsigned int *np = fp - (T1_MAXCBLKW + 2); + unsigned int *sp = fp + (T1_MAXCBLKW + 2); + + unsigned int *bwp = fp + ((T1_MAXCBLKW + 2)*(T1_MAXCBLKH +2)); + unsigned int *bnp = bwp - (T1_MAXCBLKW + 2); + unsigned int *bsp = bwp + (T1_MAXCBLKW + 2); + + unsigned int *fwp = fp - ((T1_MAXCBLKW + 2)*(T1_MAXCBLKH +2)); + unsigned int *fnp = fwp - (T1_MAXCBLKW + 2); + unsigned int *fsp = fwp + (T1_MAXCBLKW + 2); + + np[-1] |= T1_3D_SIG_SE; + np[1] |= T1_3D_SIG_SW; + sp[-1] |= T1_3D_SIG_NE; + sp[1] |= T1_3D_SIG_NW; + *np |= T1_3D_SIG_S; + *sp |= T1_3D_SIG_N; + fp[-1] |= T1_3D_SIG_E; + fp[1] |= T1_3D_SIG_W; + + *fwp |= T1_3D_SIG_FC; + *bwp |= T1_3D_SIG_BC; + + fnp[-1] |= T1_3D_SIG_FSE; + fnp[1] |= T1_3D_SIG_FSW; + fsp[-1] |= T1_3D_SIG_FNE; + fsp[1] |= T1_3D_SIG_FNW; + *fnp |= T1_3D_SIG_FS; + *fsp |= T1_3D_SIG_FN; + fwp[-1] |= T1_3D_SIG_FE; + fwp[1] |= T1_3D_SIG_FW; + + bnp[-1] |= T1_3D_SIG_BSE; + bnp[1] |= T1_3D_SIG_BSW; + bsp[-1] |= T1_3D_SIG_BNE; + bsp[1] |= T1_3D_SIG_BNW; + *bnp |= T1_3D_SIG_BS; + *bsp |= T1_3D_SIG_BN; + bwp[-1] |= T1_3D_SIG_BE; + bwp[1] |= T1_3D_SIG_BW; + + if (s) { + *np |= (T1_3D_SGN_S << 16); + *sp |= (T1_3D_SGN_N << 16); + fp[-1] |= (T1_3D_SGN_E << 16); + fp[1] |= (T1_3D_SGN_W << 16); + *fwp |= (T1_3D_SGN_F << 16); + *bwp |= (T1_3D_SGN_B << 16); + } +} + +static void t1_3d_enc_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc) { + int v, flagsvr; + unsigned int flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp); + flagsvr = (*fsvr); + if ((flag & T1_3D_SIG_OTH) && !(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) { + v = int_abs(*dp) & one ? 1 : 0; + if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ + mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient)); /* ESSAI */ + mqc_bypass_enc(mqc, v); + } else { + mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient)); + mqc_encode(mqc, v); + } + if (v) { + v = *dp < 0 ? 1 : 0; + *nmsedec += t1_3d_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS); + if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ + mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag)); /* ESSAI */ + mqc_bypass_enc(mqc, v); + } else { + mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag)); + mqc_encode(mqc, v ^ t1_3d_getspb(flag)); + } + t1_3d_updateflags(fp, v); + *fsvr |= T1_3D_SIG; + } + *fsvr |= T1_3D_VISIT; + } +} + +static void t1_3d_dec_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int oneplushalf, char type, int vsc) { + int v, flagsvr; + unsigned int flag; + + opj_raw_t *raw = t1->raw; /* RAW component */ + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp); + flagsvr = (*fsvr); + if ((flag & T1_3D_SIG_OTH) && !(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) { + if (type == T1_TYPE_RAW) { + if (raw_decode(raw)) { + v = raw_decode(raw); /* ESSAI */ + *dp = v ? -oneplushalf : oneplushalf; + t1_3d_updateflags(fp, v); + *fsvr |= T1_3D_SIG; + } + } else { + mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient)); + if (mqc_decode(mqc)) { + mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag)); + v = mqc_decode(mqc) ^ t1_3d_getspb(flag); + *dp = v ? -oneplushalf : oneplushalf; + t1_3d_updateflags(fp, v); + *fsvr |= T1_3D_SIG; + } + } + *fsvr |= T1_3D_VISIT; + } +} /* VSC and BYPASS by Antonin */ + +static void t1_3d_enc_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, char type, int cblksty) { + int i, j, k, m, one, vsc; + *nmsedec = 0; + one = 1 << (bpno + T1_NMSEDEC_FRACBITS); + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + for (j = k; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_3d_enc_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, bpno, one, nmsedec, type, vsc); + } + } + } + } +} + +static void t1_3d_dec_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, char type, int cblksty) { + int i, j, k, m, one, half, oneplushalf, vsc; + one = 1 << bpno; + half = one >> 1; + oneplushalf = one | half; + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + for (j = k; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_3d_dec_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf, type, vsc); + } + } + } + } +} /* VSC and BYPASS by Antonin */ + +static void t1_3d_enc_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int bpno, int one, int *nmsedec, char type, int vsc) { + int v, flagsvr; + unsigned int flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp); + flagsvr = (*fsvr); + if ((flagsvr & (T1_3D_SIG | T1_3D_VISIT)) == T1_3D_SIG) { + *nmsedec += t1_3d_getnmsedec_ref(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS); + v = int_abs(*dp) & one ? 1 : 0; + if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ + mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr)); /* ESSAI */ + mqc_bypass_enc(mqc, v); + } else { + mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr)); + mqc_encode(mqc, v); + } + *fsvr |= T1_3D_REFINE; + } +} + +static void t1_3d_dec_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int poshalf, int neghalf, char type, int vsc) { + int v, t, flagsvr; + unsigned int flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + opj_raw_t *raw = t1->raw; /* RAW component */ + + flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp); + flagsvr = (*fsvr); + if ((flagsvr & (T1_3D_SIG | T1_3D_VISIT)) == T1_3D_SIG) { + if (type == T1_TYPE_RAW) { + mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr)); /* ESSAI */ + v = raw_decode(raw); + } else { + mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr)); + v = mqc_decode(mqc); + } + t = v ? poshalf : neghalf; + *dp += *dp < 0 ? -t : t; + *fsvr |= T1_3D_REFINE; + } +} /* VSC and BYPASS by Antonin */ + +static void t1_3d_enc_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int *nmsedec, char type, int cblksty) { + int i, j, k, m, one, vsc; + *nmsedec = 0; + one = 1 << (bpno + T1_NMSEDEC_FRACBITS); + for (m = 0; m < l; m++){ + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + for (j = k; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_3d_enc_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], bpno, one, nmsedec, type, vsc); + } + } + } + } +} + +static void t1_3d_dec_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, char type, int cblksty) { + int i, j, k, m, one, poshalf, neghalf; + int vsc; + one = 1 << bpno; + poshalf = one >> 1; + neghalf = bpno > 0 ? -poshalf : -1; + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + for (j = k; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_3d_dec_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], poshalf, neghalf, type, vsc); + } + } + } + } +} /* VSC and BYPASS by Antonin */ + +static void t1_3d_enc_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc) { + int v, flagsvr; + unsigned int flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp); + flagsvr = (*fsvr); + if (partial) { + goto LABEL_PARTIAL; + } + if (!(*fsvr & (T1_3D_SIG | T1_3D_VISIT))) { + mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient)); + v = int_abs(*dp) & one ? 1 : 0; + mqc_encode(mqc, v); + if (v) { +LABEL_PARTIAL: + *nmsedec += t1_3d_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS); + mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag)); + v = *dp < 0 ? 1 : 0; + mqc_encode(mqc, v ^ t1_3d_getspb(flag)); + t1_3d_updateflags(fp, v); + *fsvr |= T1_3D_SIG; + } + } + *fsvr &= ~T1_3D_VISIT; +} + +static void t1_3d_dec_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int oneplushalf, int partial, int vsc) { + int v, flagsvr; + unsigned int flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp); + flagsvr = (*fsvr); + if (partial) { + goto LABEL_PARTIAL; + } + if (!(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) { + mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient)); + if (mqc_decode(mqc)) { +LABEL_PARTIAL: + mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag)); + v = mqc_decode(mqc) ^ t1_3d_getspb(flag); + *dp = v ? -oneplushalf : oneplushalf; + t1_3d_updateflags(fp, v); + *fsvr |= T1_3D_SIG; + } + } + *fsvr &= ~T1_3D_VISIT; +} /* VSC and BYPASS by Antonin */ + +static void t1_3d_enc_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, int cblksty) { + int i, j, k, m, one, agg, runlen, vsc; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + *nmsedec = 0; + one = 1 << (bpno + T1_NMSEDEC_FRACBITS); + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + if (k + 3 < h) { + if (cblksty & J3D_CCP_CBLKSTY_VSC) { + agg = !( ((t1->flagSVR[1 + m][1 + k][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) & (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) & (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) & (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) & ((t1->flags[1 + m][1 + k + 3][1 + i] & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) & (T1_3D_SIG_OTH))) + ); + } else { + agg = !( + ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 3][1 + i] & T1_3D_SIG_OTH)) + ); + } + } else { + agg = 0; + } + if (agg) { + for (runlen = 0; runlen < 4; runlen++) { + if (int_abs(t1->data[m][k + runlen][i]) & one) + break; + } + mqc_setcurctx(mqc, T1_CTXNO_AGG); + mqc_encode(mqc, runlen != 4); + if (runlen == 4) { + continue; + } + mqc_setcurctx(mqc, T1_CTXNO_UNI); + mqc_encode(mqc, runlen >> 1); + mqc_encode(mqc, runlen & 1); + } else { + runlen = 0; + } + for (j = k + runlen; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_3d_enc_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, bpno, one, nmsedec, agg && (j == k + runlen), vsc); + } + } + } + } +} + +static void t1_3d_dec_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int cblksty) { + int i, j, k, m, one, half, oneplushalf, agg, runlen, vsc; + int segsym = cblksty & J3D_CCP_CBLKSTY_SEGSYM; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + one = 1 << bpno; + half = one >> 1; + oneplushalf = one | half; + for (m = 0; m < l; m++) { + for (k = 0; k < h; k += 4) { + for (i = 0; i < w; i++) { + if (k + 3 < h) { + if (cblksty & J3D_CCP_CBLKSTY_VSC) { + agg = !( + ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | ((t1->flags[1 + m][1 + k + 3][1 + i] & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) & (T1_3D_SIG_OTH))) + ); + } else { + agg = !( + ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH)) + || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 3][1 + i] & T1_3D_SIG_OTH)) + ); + } + } else { + agg = 0; + } + if (agg) { + mqc_setcurctx(mqc, T1_CTXNO_AGG); + if (!mqc_decode(mqc)) { + continue; + } + mqc_setcurctx(mqc, T1_CTXNO_UNI); + runlen = mqc_decode(mqc); + runlen = (runlen << 1) | mqc_decode(mqc); + } else { + runlen = 0; + } + for (j = k + runlen; j < k + 4 && j < h; j++) { + vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0; + t1_3d_dec_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf, agg && (j == k + runlen), vsc); + } + } + } + } + if (segsym) { + int v = 0; + mqc_setcurctx(mqc, T1_CTXNO_UNI); + v = mqc_decode(mqc); + v = (v << 1) | mqc_decode(mqc); + v = (v << 1) | mqc_decode(mqc); + v = (v << 1) | mqc_decode(mqc); + /* + if (v!=0xa) { + opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v); + } + */ + } +} /* VSC and BYPASS by Antonin */ + + +static void t1_3d_encode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk, int orient, int compno, int level[3], int dwtid[3], double stepsize, int cblksty, int numcomps, opj_tcd_tile_t * tile) { + int i, j, k; + int w, h, l; + int passno; + int bpno, passtype; + int max; + int nmsedec = 0; + double cumwmsedec = 0; + char type = T1_TYPE_MQ; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + w = cblk->x1 - cblk->x0; + h = cblk->y1 - cblk->y0; + l = cblk->z1 - cblk->z0; + + max = 0; + for (k = 0; k < l; k++) { + for (j = 0; j < h; j++) { + for (i = 0; i < w; i++) { + max = int_max(max, int_abs(t1->data[k][j][i])); + } + } + } + for (k = 0; k <= l; k++) { + for (j = 0; j <= h; j++) { + for (i = 0; i <= w; i++) { + t1->flags[k][j][i] = 0; + t1->flagSVR[k][j][i] = 0; + } + } + } + + cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0; + + bpno = cblk->numbps - 1; + passtype = 2; + + mqc_reset_enc(mqc); + mqc_init_enc(mqc, cblk->data); + + for (passno = 0; bpno >= 0; passno++) { + opj_tcd_pass_t *pass = &cblk->passes[passno]; + int correction = 3; + double tmpwmsedec; + type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; + + switch (passtype) { + case 0: + t1_3d_enc_sigpass(t1, w, h, l, bpno, orient, &nmsedec, type, cblksty); + break; + case 1: + t1_3d_enc_refpass(t1, w, h, l, bpno, &nmsedec, type, cblksty); + break; + case 2: + t1_3d_enc_clnpass(t1, w, h, l, bpno, orient, &nmsedec, cblksty); + /* code switch SEGMARK (i.e. SEGSYM) */ + if (cblksty & J3D_CCP_CBLKSTY_SEGSYM) + mqc_segmark_enc(mqc); + break; + } + + /* fixed_quality */ + tmpwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, stepsize, numcomps, dwtid); + cumwmsedec += tmpwmsedec; + tile->distotile += tmpwmsedec; + + /* Code switch "RESTART" (i.e. TERMALL) */ + if ((cblksty & J3D_CCP_CBLKSTY_TERMALL) && !((passtype == 2) && (bpno - 1 < 0))) { + if (type == T1_TYPE_RAW) { + mqc_flush(mqc); + correction = 1; + /* correction = mqc_bypass_flush_enc(); */ + } else { /* correction = mqc_restart_enc(); */ + mqc_flush(mqc); + correction = 1; + } + pass->term = 1; + } else { + if (((bpno < (cblk->numbps - 4) && (passtype > 0)) + || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) { + if (type == T1_TYPE_RAW) { + mqc_flush(mqc); + correction = 1; + } else { + mqc_flush(mqc); + correction = 1; + } + pass->term = 1; + } else { + pass->term = 0; + } + } + + if (++passtype == 3) { + passtype = 0; + bpno--; + } + + if (pass->term && bpno > 0) { + type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; + if (type == T1_TYPE_RAW) + mqc_bypass_init_enc(mqc); + else + mqc_restart_init_enc(mqc); + } + + pass->distortiondec = cumwmsedec; + pass->rate = mqc_numbytes(mqc) + correction; /* FIXME */ + pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate); + + /* Code-switch "RESET" */ + if (cblksty & J3D_CCP_CBLKSTY_RESET) + mqc_reset_enc(mqc); + } + + /* Code switch "ERTERM" (i.e. PTERM) */ + if (cblksty & J3D_CCP_CBLKSTY_PTERM) + mqc_erterm_enc(mqc); + else /* Default coding */ if (!(cblksty & J3D_CCP_CBLKSTY_LAZY)) + mqc_flush(mqc); + + cblk->totalpasses = passno; +} + +static void t1_3d_decode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk, int orient, int roishift, int cblksty) { + int i, j, k; + int w, h, l; + int bpno, passtype; + int segno, passno; + char type = T1_TYPE_MQ; /* BYPASS mode */ + opj_raw_t *raw = t1->raw; /* RAW component */ + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + w = cblk->x1 - cblk->x0; + h = cblk->y1 - cblk->y0; + l = cblk->z1 - cblk->z0; + + for (k = 0; k < l; k++) { + for (j = 0; j < h; j++) { + for (i = 0; i < w; i++) { + t1->data[k][j][i] = 0; + } + } + } + + for (k = 0; k <= l; k++) { + for (j = 0; j <= h; j++) { + for (i = 0; i <= w; i++) { + t1->flags[k][j][i] = 0; + t1->flagSVR[k][j][i] = 0; + } + } + } + + + bpno = roishift + cblk->numbps - 1; + passtype = 2; + + mqc_reset_enc(mqc); + + for (segno = 0; segno < cblk->numsegs; segno++) { + opj_tcd_seg_t *seg = &cblk->segs[segno]; + + /* BYPASS mode */ + type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; + if (type == T1_TYPE_RAW) { + raw_init_dec(raw, seg->data, seg->len); + } else { + mqc_init_dec(mqc, seg->data, seg->len); + } + + for (passno = 0; passno < seg->numpasses; passno++) { + switch (passtype) { + case 0: + t1_3d_dec_sigpass(t1, w, h, l, bpno+1, orient, type, cblksty); + break; + case 1: + t1_3d_dec_refpass(t1, w, h, l, bpno+1, type, cblksty); + break; + case 2: + t1_3d_dec_clnpass(t1, w, h, l, bpno+1, orient, cblksty); + break; + } + + if ((cblksty & J3D_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) { + mqc_reset_enc(mqc); + } + if (++passtype == 3) { + passtype = 0; + bpno--; + } + + } + } +} + +static int t1_3d_init_ctxno_zc(unsigned int f, int orient) { + unsigned int h, v, c; + unsigned int d2xy, d2xz, d2yz, d3; + int n; + unsigned int hvc, hc, d2, d2xy2yz, d2xy2xz; + n = 0; + h = ((f & T1_3D_SIG_W) != 0) + ((f & T1_3D_SIG_E) != 0); + v = ((f & T1_3D_SIG_N) != 0) + ((f & T1_3D_SIG_S) != 0); + c = ((f & T1_3D_SIG_FC) != 0) + ((f & T1_3D_SIG_BC) != 0); + d2xy = ((f & T1_3D_SIG_NW) != 0) + ((f & T1_3D_SIG_NE) != 0) + ((f & T1_3D_SIG_SE) != 0) + ((f & T1_3D_SIG_SW) != 0); + d2xz = ((f & T1_3D_SIG_FW) != 0) + ((f & T1_3D_SIG_BW) != 0) + ((f & T1_3D_SIG_FE) != 0) + ((f & T1_3D_SIG_BE) != 0); + d2yz = ((f & T1_3D_SIG_FN) != 0) + ((f & T1_3D_SIG_FS) != 0) + ((f & T1_3D_SIG_BN) != 0) + ((f & T1_3D_SIG_BS) != 0); + d3 = ((f & T1_3D_SIG_FNW) != 0) + ((f & T1_3D_SIG_FNE) != 0) + ((f & T1_3D_SIG_FSE) != 0) + ((f & T1_3D_SIG_FSW) != 0) + + ((f & T1_3D_SIG_BNW) != 0) + ((f & T1_3D_SIG_BNE) != 0) + ((f & T1_3D_SIG_BSE) != 0) + ((f & T1_3D_SIG_BSW) != 0); + + switch (orient) { + case 0: //LLL + case 7: //HHH + hvc = h + v + c; + d2 = d2xy + d2xz + d2yz; + if (!hvc) { + if (!d2) { + n = (!d3) ? 0 : 1; + } else if (d2 == 1) { + n = (!d3) ? 2 : 3; + } else { + n = (!d3) ? 4 : 5; + } + } else if (hvc == 1) { + if (!d2) { + n = (!d3) ? 6 : 7; + } else if (d2 == 1) { + n = (!d3) ? 8 : 9; + } else { + n = 10; + } + } else if (hvc == 2) { + if (!d2) { + n = (!d3) ? 11 : 12; + } else { + n = 13; + } + } else if (hvc == 3) { + n = 14; + } else { + n = 15; + } + break; + //LHL, HLL, LLH + case 1: + case 2: + case 4: + hc = h + c; + d2xy2yz = d2xy + d2yz; + if (!hc) { + if (!v) { + if (!d2xy) { + n = (!d2xy2yz) ? ((!d3) ? 0 : 1) : ((!d3) ? 2 : 3); + } else if (d2xy == 1) { + n = (!d2xy2yz) ? ((!d3) ? 4 : 5) : 6; + } else { //>=2 + n = 7; + } + } else { + n = (v == 1) ? 8 : 9; // =1 or =2 + } + } else if (hc == 1) { + n = (!v) ? ( (!d2xy) ? ( (!d2xy2yz) ? ( (!d3) ? 10 : 11) : (12) ) : (13) ) : (14); + } else { //if (hc >= 2) + n = 15; + } + break; + //HLH, HHL, LHH + case 3: + case 5: + case 6: + hc = h + c; + d2xy2xz = d2xy + d2xz; + if (!v) { + if (!d2xz) { + if (!hc && !d2xy2xz) { + n = (!d3) ? 0 : 1; + } else if (hc == 1) { + n = (!d2xy2xz) ? 2 : 3; + } else { //if >= 2 + n = 4; + } + } else if ( d2xz>=1 && !hc ) { + n = 5; + } else if ( hc>=1 ) { + n = (d2xz==1) ? 6 : 7; + } + } else if (v == 1) { + if (!d2xz) { + n = (!hc) ? 8 : 9; + } else if (d2xz == 1) { + n = (!hc) ? 10 : 11; + } else if (d2xz == 2) { + n = (!hc) ? 12 : 13; + } else { // if (d2xz >= 3) { + n = 14; + } + } else if (v == 2) { + n = 15; + } + break; + } + + return (T1_3D_CTXNO_ZC + n); +} + +static int t1_3d_init_ctxno_sc(unsigned int f) { + int hc, vc, cc; + int n = 0; + + hc = int_min( ( (f & (T1_3D_SIG_E | T1_3D_SGN_E)) == T1_3D_SIG_E ) + + ( (f & (T1_3D_SIG_W | T1_3D_SGN_W)) == T1_3D_SIG_W ) , 1) + - int_min( ( (f & (T1_3D_SIG_E | T1_3D_SGN_E)) == (T1_3D_SIG_E | T1_3D_SGN_E) ) + + ( (f & (T1_3D_SIG_W | T1_3D_SGN_W) ) == (T1_3D_SIG_W | T1_3D_SGN_W)), 1); + + vc = int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == T1_3D_SIG_N) + + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == T1_3D_SIG_S), 1) + - int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == (T1_3D_SIG_N | T1_3D_SGN_N)) + + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == (T1_3D_SIG_S | T1_3D_SGN_S)), 1); + + cc = int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == T1_3D_SIG_FC) + + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == T1_3D_SIG_BC), 1) + - int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == (T1_3D_SIG_FC | T1_3D_SGN_F)) + + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == (T1_3D_SIG_BC | T1_3D_SGN_B)), 1); + if (hc < 0) { + hc = -hc; + vc = -vc; + cc = -cc; + } + + if (!hc) { + if (!vc) + n = (!cc) ? 0 : 1; + else if (vc == -1) + n = (!cc) ? 1 : ( (cc>0) ? 2 : 4); + else if (vc == 1) + n = (!cc) ? 1 : ( (cc<0) ? 2 : 4); + } else if (hc == 1) { + if (!vc) + n = (!cc) ? 1 : ( (cc<0) ? 2 : 4); + else if (vc == 1) + n = (!cc) ? 4 : ( (cc>0) ? 5 : 3); + else if (vc == -1) + n = (!cc) ? 2 : 3; + } else if (hc == -1) { + if (!vc) + n = (!cc) ? 1 : ( (cc>0) ? 2 : 4); + else if (vc == 1) + n = (!cc) ? 2 : 3; + else if (vc == -1) + n = (!cc) ? 4 : ( (cc<0) ? 5 : 3); + } + + return (T1_3D_CTXNO_SC + n); +} + +static int t1_3d_init_ctxno_mag(unsigned int f, int f2) { + int n; + if (!(f2 & T1_3D_REFINE)) //First refinement for this coefficient (no previous refinement) + n = (f & (T1_3D_SIG_PRIM)) ? 1 : 0; + else + n = 2; + + return (T1_3D_CTXNO_MAG + n); +} + +static int t1_3d_init_spb(unsigned int f) { + int hc, vc, cc; + int n = 0; + + hc = int_min( ( (f & (T1_3D_SIG_E | T1_3D_SGN_E)) == T1_3D_SIG_E ) + + ( (f & (T1_3D_SIG_W | T1_3D_SGN_W)) == T1_3D_SIG_W ) , 1) + - int_min( ( (f & (T1_3D_SIG_E | T1_3D_SGN_E)) == (T1_3D_SIG_E | T1_3D_SGN_E) ) + + ( (f & (T1_3D_SIG_W | T1_3D_SGN_W) ) == (T1_3D_SIG_W | T1_3D_SGN_W)), 1); + + vc = int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == T1_3D_SIG_N) + + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == T1_3D_SIG_S), 1) + - int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == (T1_3D_SIG_N | T1_3D_SGN_N)) + + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == (T1_3D_SIG_S | T1_3D_SGN_S)), 1); + + cc = int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == T1_3D_SIG_FC) + + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == T1_3D_SIG_BC), 1) + - int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == (T1_3D_SIG_FC | T1_3D_SGN_F)) + + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == (T1_3D_SIG_BC | T1_3D_SGN_B)), 1); + + n = ((hc + vc + cc) < 0); + + return n; +} + +static void t1_3d_init_luts(opj_t1_3d_t *t1) { + int i; + double u, v, t; + /*for (j = 0; j < 4; j++) { + for (i = 0; i < 256; ++i) { + t1->lut_ctxno_zc[(j << 8) | i] = t1_3d_init_ctxno_zc(i, j); + } + } + for (i = 0; i < 4096; i++) { + t1->lut_ctxno_sc[i] = t1_3d_init_ctxno_sc(i << 4); + } + for (j = 0; j < 2; j++) { + for (i = 0; i < 2048; ++i) { + t1->lut_ctxno_mag[(j << 11) + i] = t1_3d_init_ctxno_mag((j ? T1_3D_REFINE : 0) | i); + } + } + for (i = 0; i < 4096; ++i) { + t1->lut_spb[i] = t1_3d_init_spb(i << 4); + }*/ + /* FIXME FIXME FIXME */ + for (i = 0; i < (1 << T1_NMSEDEC_BITS); i++) { + t = i / pow(2, T1_NMSEDEC_FRACBITS); + u = t; + v = t - 1.5; + t1->lut_nmsedec_sig[i] = + int_max(0, + (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + t1->lut_nmsedec_sig0[i] = + int_max(0, + (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + u = t - 1.0; + if (i & (1 << (T1_NMSEDEC_BITS - 1))) { + v = t - 1.5; + } else { + v = t - 0.5; + } + t1->lut_nmsedec_ref[i] = + int_max(0, + (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + t1->lut_nmsedec_ref0[i] = + int_max(0, + (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + } +} + +/* ----------------------------------------------------------------------- */ + +opj_t1_3d_t* t1_3d_create(opj_common_ptr cinfo) { + opj_t1_3d_t *t1 = (opj_t1_3d_t*)opj_malloc(sizeof(opj_t1_3d_t)); + if(t1) { + t1->cinfo = cinfo; + /* create MQC and RAW handles */ + t1->mqc = mqc_create(); + t1->raw = raw_create(); + /* initialize the look-up tables of the Tier-1 coder/decoder */ + t1_3d_init_luts(t1); + } + return t1; +} + +void t1_3d_destroy(opj_t1_3d_t *t1) { + if(t1) { + /* destroy MQC and RAW handles */ + mqc_destroy(t1->mqc); + raw_destroy(t1->raw); + opj_free(t1); + } +} + +void t1_3d_encode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp) { + int compno, resno, bandno, precno, cblkno; + int x, y, z, i, j, k, orient; + int level[3]; + tile->distotile = 0; /* fixed_quality */ + + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + + for (resno = 0; resno < tilec->numresolution[0]; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + + for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + + if (band->bandno == 0) { + x = cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 1) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 2) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 3) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 4) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 5) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 6) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 7) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } + + if (tcp->tccps[compno].reversible == 1) { + for (k = 0; k < cblk->z1 - cblk->z0; k++) { + for (j = 0; j < cblk->y1 - cblk->y0; j++) { + for (i = 0; i < cblk->x1 - cblk->x0; i++) { + t1->data[k][j][i] = + tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] << T1_NMSEDEC_FRACBITS; + } + } + } + } else if (tcp->tccps[compno].reversible == 0) { + for (k = 0; k < cblk->z1 - cblk->z0; k++) { + for (j = 0; j < cblk->y1 - cblk->y0; j++) { + for (i = 0; i < cblk->x1 - cblk->x0; i++) { + t1->data[k][j][i] = fix_mul( + tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)], + 8192 * 8192 / ((int) floor(band->stepsize * 8192))) >> (13 - T1_NMSEDEC_FRACBITS); + } + } + } + } + orient = band->bandno; /* FIXME */ + for (i = 0; i < 3; i++) + level[i] = tilec->numresolution[i] - 1 - resno; + + t1_3d_encode_cblk(t1, cblk, orient, compno, level, tcp->tccps[compno].dwtid, band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps, tile); + + } /* cblkno */ + } /* precno */ + } /* bandno */ + } /* resno */ + } /* compno */ +} + +void t1_3d_decode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp) { + int compno, resno, bandno, precno, cblkno; + + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + + for (resno = 0; resno < tilec->numresolution[0]; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + + for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + int x, y, z, i, j, k, orient; + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + + orient = band->bandno; /* FIXME */ + + //fprintf(stdout,"[INFO] t1_3d_decode_cblk(t1, cblk, orient(%d), tcp->tccps[compno].roishift (%d), tcp->tccps[compno].cblksty (%d));\n",orient,tcp->tccps[compno].roishift, tcp->tccps[compno].cblksty); + t1_3d_decode_cblk(t1, cblk, orient, tcp->tccps[compno].roishift, tcp->tccps[compno].cblksty); + + if (band->bandno == 0) { + x = cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 1) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 2) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 3) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = cblk->z0 - band->z0; + } else if (band->bandno == 4) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 5) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 6) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } else if (band->bandno == 7) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x = pres->x1 - pres->x0 + cblk->x0 - band->x0; + y = pres->y1 - pres->y0 + cblk->y0 - band->y0; + z = pres->z1 - pres->z0 + cblk->z0 - band->z0; + } + + if (tcp->tccps[compno].roishift) { + int thresh, val, mag; + thresh = 1 << tcp->tccps[compno].roishift; + for (k = 0; k < cblk->z1 - cblk->z0; k++) { + for (j = 0; j < cblk->y1 - cblk->y0; j++) { + for (i = 0; i < cblk->x1 - cblk->x0; i++) { + val = t1->data[k][j][i]; + mag = int_abs(val); + if (mag >= thresh) { + mag >>= tcp->tccps[compno].roishift; + t1->data[k][j][i] = val < 0 ? -mag : mag; + } + } + } + } + } + + if (tcp->tccps[compno].reversible == 1) { + for (k = 0; k < cblk->z1 - cblk->z0; k++) { + for (j = 0; j < cblk->y1 - cblk->y0; j++) { + for (i = 0; i < cblk->x1 - cblk->x0; i++) { + int tmp = t1->data[k][j][i]; + tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = tmp/2; + } + } + } + } else { /* if (tcp->tccps[compno].reversible == 0) */ + for (k = 0; k < cblk->z1 - cblk->z0; k++) { + for (j = 0; j < cblk->y1 - cblk->y0; j++) { + for (i = 0; i < cblk->x1 - cblk->x0; i++) { + double tmp = (double)(t1->data[k][j][i] * band->stepsize * 4096.0); + if (t1->data[k][j][i] >> 1 == 0) { + tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = 0; + } else { + int tmp2 = ((int) (floor(fabs(tmp)))) + ((int) floor(fabs(tmp*2))%2); + tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = ((tmp<0)?-tmp2:tmp2); + } + } + } + } + } + } /* cblkno */ + } /* precno */ + } /* bandno */ + } /* resno */ + } /* compno */ +} diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1_3d.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1_3d.h new file mode 100755 index 0000000000..dd73763df0 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t1_3d.h @@ -0,0 +1,173 @@ +/* + * Copyrigth (c) 2006, Mónica Díez, LPI-UVA, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __T1_3D_H +#define __T1_3D_H +/** +@file t1_3d.h +@brief Implementation of the tier-1 coding (coding of code-block coefficients) (T1) + +The functions in T1_3D.C have for goal to realize the tier-1 coding operation of 3D-EBCOT. +The functions in T1_3D.C are used by some function in TCD.C. +*/ + +/** @defgroup T1_3D T1_3D - Implementation of the tier-1 coding */ +/*@{*/ + +/* ----------------------------------------------------------------------- */ + +/* Neighbourhood of 3D EBCOT (Significance context)*/ +#define T1_3D_SIG_NE 0x00000001 /*< Context orientation : North-East direction */ +#define T1_3D_SIG_SE 0x00000002 /*< Context orientation : South-East direction */ +#define T1_3D_SIG_SW 0x00000004 /*< Context orientation : South-West direction */ +#define T1_3D_SIG_NW 0x00000008 /* Context orientation : North-West direction */ +#define T1_3D_SIG_N 0x00000010 /*< Context orientation : North direction */ +#define T1_3D_SIG_E 0x00000020 /*< Context orientation : East direction */ +#define T1_3D_SIG_S 0x00000040 /*< Context orientation : South direction */ +#define T1_3D_SIG_W 0x00000080 /*< Context orientation : West direction */ +#define T1_3D_SIG_FC 0x00000100 /*< Context orientation : Forward Central direction */ +#define T1_3D_SIG_BC 0x00000200 /*< Context orientation : Backward Central direction */ +#define T1_3D_SIG_FNE 0x00000400 /*< Context orientation : Forward North-East direction */ +#define T1_3D_SIG_FSE 0x00000800 /*< Context orientation : Forward South-East direction */ +#define T1_3D_SIG_FSW 0x00001000 /*< Context orientation : Forward South-West direction */ +#define T1_3D_SIG_FNW 0x00002000 /*< Context orientation : Forward North-West direction */ +#define T1_3D_SIG_FN 0x00004000 /*< Context orientation : Forward North direction */ +#define T1_3D_SIG_FE 0x00008000 /*< Context orientation : Forward East direction */ +#define T1_3D_SIG_FS 0x00010000 /*< Context orientation : Forward South direction */ +#define T1_3D_SIG_FW 0x00020000 /*< Context orientation : Forward West direction */ +#define T1_3D_SIG_BNE 0x00040000 /*< Context orientation : Backward North-East direction */ +#define T1_3D_SIG_BSE 0x00080000 /*< Context orientation : Backward South-East direction */ +#define T1_3D_SIG_BSW 0x00100000 /*< Context orientation : Backward South-West direction */ +#define T1_3D_SIG_BNW 0x00200000 /*< Context orientation : Backward North-West direction */ +#define T1_3D_SIG_BN 0x00400000 /*< Context orientation : Backward North direction */ +#define T1_3D_SIG_BE 0x00800000 /*< Context orientation : Backward East direction */ +#define T1_3D_SIG_BS 0x01000000 /*< Context orientation : Backward South direction */ +#define T1_3D_SIG_BW 0x02000000 /*< Context orientation : Backward West direction */ +#define T1_3D_SIG_COTH (T1_3D_SIG_N|T1_3D_SIG_NE|T1_3D_SIG_E|T1_3D_SIG_SE|T1_3D_SIG_S|T1_3D_SIG_SW|T1_3D_SIG_W|T1_3D_SIG_NW) +#define T1_3D_SIG_BOTH (T1_3D_SIG_BN|T1_3D_SIG_BNE|T1_3D_SIG_BE|T1_3D_SIG_BSE|T1_3D_SIG_BS|T1_3D_SIG_BSW|T1_3D_SIG_BW|T1_3D_SIG_BNW|T1_3D_SIG_BC) +#define T1_3D_SIG_FOTH (T1_3D_SIG_FN|T1_3D_SIG_FNE|T1_3D_SIG_FE|T1_3D_SIG_FSE|T1_3D_SIG_FS|T1_3D_SIG_FSW|T1_3D_SIG_FW|T1_3D_SIG_FNW|T1_3D_SIG_FC) +#define T1_3D_SIG_OTH (T1_3D_SIG_FOTH|T1_3D_SIG_BOTH|T1_3D_SIG_COTH) +#define T1_3D_SIG_PRIM (T1_3D_SIG_N|T1_3D_SIG_E|T1_3D_SIG_S|T1_3D_SIG_W|T1_3D_SIG_FC|T1_3D_SIG_BC) + +#define T1_3D_SGN_N 0x0400 +#define T1_3D_SGN_E 0x0800 +#define T1_3D_SGN_S 0x1000 +#define T1_3D_SGN_W 0x2000 +#define T1_3D_SGN_F 0x4000 +#define T1_3D_SGN_B 0x8000 +#define T1_3D_SGN (T1_3D_SGN_N|T1_3D_SGN_E|T1_3D_SGN_S|T1_3D_SGN_W|T1_3D_SGN_F|T1_3D_SGN_B) + +#define T1_3D_SIG 0x0001 //Significance state +#define T1_3D_REFINE 0x0002 //Delayed significance +#define T1_3D_VISIT 0x0004 //First-pass membership + +#define T1_3D_NUMCTXS_AGG 1 +#define T1_3D_NUMCTXS_ZC 16 +#define T1_3D_NUMCTXS_MAG 3 +#define T1_3D_NUMCTXS_SC 6 +#define T1_3D_NUMCTXS_UNI 1 + +#define T1_3D_CTXNO_AGG 0 +#define T1_3D_CTXNO_ZC (T1_3D_CTXNO_AGG+T1_3D_NUMCTXS_AGG) //1 +#define T1_3D_CTXNO_MAG (T1_3D_CTXNO_ZC+T1_3D_NUMCTXS_ZC) //17 +#define T1_3D_CTXNO_SC (T1_3D_CTXNO_MAG+T1_3D_NUMCTXS_MAG) //20 +#define T1_3D_CTXNO_UNI (T1_3D_CTXNO_SC+T1_3D_NUMCTXS_SC) //26 +#define T1_3D_NUMCTXS (T1_3D_CTXNO_UNI+T1_3D_NUMCTXS_UNI) //27 + + +/* ----------------------------------------------------------------------- */ + +/** +Tier-1 coding (coding of code-block coefficients) +*/ +typedef struct opj_t1_3d { + /** Codec context */ + opj_common_ptr cinfo; + /** MQC component */ + opj_mqc_t *mqc; + /** RAW component */ + opj_raw_t *raw; + /** LUTs for decoding normalised MSE */ + int lut_nmsedec_sig[1 << T1_NMSEDEC_BITS]; + int lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS]; + int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS]; + int lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS]; + /** Codeblock data */ + int data[T1_CBLKD][T1_CBLKH][T1_CBLKW]; + /** Context information for each voxel in codeblock */ + unsigned int flags[T1_CBLKD + 2][T1_CBLKH + 2][T1_CBLKH + 2]; + /** Voxel information (significance/visited/refined) */ + int flagSVR[T1_CBLKD + 2][T1_CBLKH + 2][T1_CBLKH + 2]; +} opj_t1_3d_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a new T1_3D handle +and initialize the look-up tables of the Tier-1 coder/decoder +@return Returns a new T1 handle if successful, returns NULL otherwise +@see t1_init_luts +*/ +opj_t1_3d_t* t1_3d_create(opj_common_ptr cinfo); +/** +Destroy a previously created T1_3D handle +@param t1 T1_3D handle to destroy +*/ +void t1_3d_destroy(opj_t1_3d_t *t1); +/** +Encode the code-blocks of a tile +@param t1 T1_3D handle +@param tile The tile to encode +@param tcp Tile coding parameters +*/ +void t1_3d_encode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp); +/** +Decode the code-blocks of a tile +@param t1 T1_3D handle +@param tile The tile to decode +@param tcp Tile coding parameters +*/ +void t1_3d_decode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp); +/** +Get weigths of MSE decoding +@param nmsedec The normalized MSE reduction +@param compno +@param level +@param orient +@param bpno +@param reversible +@param stepsize +@param numcomps +@param dwtid +returns MSE associated to decoding pass +double t1_3d_getwmsedec(int nmsedec, int compno, int levelxy, int levelz, int orient, int bpno, int reversible, double stepsize, int numcomps, int dwtid); +*/ +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __T1_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t2.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t2.c new file mode 100755 index 0000000000..20d8e7d26a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t2.c @@ -0,0 +1,675 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup T2 T2 - Implementation of a tier-2 coding */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +static void t2_putcommacode(opj_bio_t *bio, int n); +static int t2_getcommacode(opj_bio_t *bio); +/** +Variable length code for signalling delta Zil (truncation point) +@param bio Bit Input/Output component +@param n delta Zil +*/ +static void t2_putnumpasses(opj_bio_t *bio, int n); +static int t2_getnumpasses(opj_bio_t *bio); +/** +Encode a packet of a tile to a destination buffer +@param tile Tile for which to write the packets +@param tcp Tile coding parameters +@param pi Packet identity +@param dest Destination buffer +@param len Length of the destination buffer +@param volume_info Structure to create an index file +@param tileno Number of the tile encoded +@param cp Coding parameters +@return Number of bytes encoded from the packet +*/ +static int t2_encode_packet(opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi, unsigned char *dest, int len, opj_volume_info_t *volume_info, int tileno, opj_cp_t *cp); +/** +Initialize the segment decoder +@param seg Segment instance +@param cblksty Codeblock style +@param first Is first segment +*/ +static void t2_init_seg(opj_tcd_seg_t *seg, int cblksty, int first); +/** +Decode a packet of a tile from a source buffer +@param t2 T2 handle +@param src Source buffer +@param len Length of the source buffer +@param tile Tile for which to write the packets +@param tcp Tile coding parameters +@param pi Packet identity +@return Number of bytes decoded from the packet +*/ +int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi); + +/*@}*/ + +/*@}*/ + +/* ----------------------------------------------------------------------- */ + +/* #define RESTART 0x04 */ +static void t2_putcommacode(opj_bio_t *bio, int n) { + while (--n >= 0) { + bio_write(bio, 1, 1); + } + bio_write(bio, 0, 1); +} + +static int t2_getcommacode(opj_bio_t *bio) { + int n; + for (n = 0; bio_read(bio, 1); n++) { + ; + } + return n; +} + +static void t2_putnumpasses(opj_bio_t *bio, int n) { + if (n == 1) { + bio_write(bio, 0, 1); + } else if (n == 2) { + bio_write(bio, 2, 2); + } else if (n <= 5) { + bio_write(bio, 0xc | (n - 3), 4); + } else if (n <= 36) { + bio_write(bio, 0x1e0 | (n - 6), 9); + } else if (n <= 164) { + bio_write(bio, 0xff80 | (n - 37), 16); + } +} + +static int t2_getnumpasses(opj_bio_t *bio) { + int n; + if (!bio_read(bio, 1)) + return 1; + if (!bio_read(bio, 1)) + return 2; + if ((n = bio_read(bio, 2)) != 3) + return (3 + n); + if ((n = bio_read(bio, 5)) != 31) + return (6 + n); + return (37 + bio_read(bio, 7)); +} + +static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp, opj_pi_iterator_t *pi, unsigned char *dest, int len, opj_volume_info_t * volume_info, int tileno, opj_cp_t *cp) { + int bandno, cblkno; + unsigned char *sop = 0, *eph = 0; + unsigned char *c = dest; + + int compno = pi->compno; /* component value */ + int resno = pi->resno; /* resolution level value */ + int precno = pi->precno; /* precinct value */ + int layno = pi->layno; /* quality layer value */ + + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + opj_bio_t *bio = NULL; /* BIO component */ + + /* */ + if ((tcp->csty & J3D_CP_CSTY_SOP)) { + sop = (unsigned char *) opj_malloc(6 * sizeof(unsigned char)); + sop[0] = 255; + sop[1] = 145; + sop[2] = 0; + sop[3] = 4; + sop[4] = (volume_info) ? (volume_info->num % 65536) / 256 : (0 % 65536) / 256 ; + sop[5] = (volume_info) ? (volume_info->num % 65536) % 256 : (0 % 65536) % 256 ; + memcpy(c, sop, 6); + opj_free(sop); + c += 6; + } + /* */ + + if (!layno) { + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + tgt_reset(prc->incltree); + tgt_reset(prc->imsbtree); + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + cblk->numpasses = 0; + tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps); + } + } + } + + bio = bio_create(); + bio_init_enc(bio, c, len); + bio_write(bio, 1, 1); /* Empty header bit */ + + /* Writing Packet header */ + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + opj_tcd_layer_t *layer = &cblk->layers[layno]; + if (!cblk->numpasses && layer->numpasses) { + tgt_setvalue(prc->incltree, cblkno, layno); + } + } + + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + opj_tcd_layer_t *layer = &cblk->layers[layno]; + int increment = 0; + int nump = 0; + int len = 0, passno; + /* cblk inclusion bits */ + if (!cblk->numpasses) { + tgt_encode(bio, prc->incltree, cblkno, layno + 1); + } else { + bio_write(bio, layer->numpasses != 0, 1); + } + /* if cblk not included, go to the next cblk */ + if (!layer->numpasses) { + continue; + } + /* if first instance of cblk --> zero bit-planes information */ + if (!cblk->numpasses) { + cblk->numlenbits = 3; + tgt_encode(bio, prc->imsbtree, cblkno, 999); + } + /* number of coding passes included */ + t2_putnumpasses(bio, layer->numpasses); + + /* computation of the increase of the length indicator and insertion in the header */ + for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) { + opj_tcd_pass_t *pass = &cblk->passes[passno]; + nump++; + len += pass->len; + if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { + increment = int_max(increment, int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump))); + len = 0; + nump = 0; + } + } + t2_putcommacode(bio, increment); + + /* computation of the new Length indicator */ + cblk->numlenbits += increment; + + /* insertion of the codeword segment length */ + for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) { + opj_tcd_pass_t *pass = &cblk->passes[passno]; + nump++; + len += pass->len; + if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { + bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump)); + len = 0; + nump = 0; + } + } + + } + } + + + if (bio_flush(bio)) { + return -999; /* modified to eliminate longjmp !! */ + } + + c += bio_numbytes(bio); + + bio_destroy(bio); + + /* */ + if (tcp->csty & J3D_CP_CSTY_EPH) { + eph = (unsigned char *) opj_malloc(2 * sizeof(unsigned char)); + eph[0] = 255; + eph[1] = 146; + memcpy(c, eph, 2); + opj_free(eph); + c += 2; + } + /* */ + + /* Writing the packet body */ + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + opj_tcd_layer_t *layer = &cblk->layers[layno]; + if (!layer->numpasses) { + continue; + } + if (c + layer->len > dest + len) { + return -999; + } + + memcpy(c, layer->data, layer->len); + cblk->numpasses += layer->numpasses; + c += layer->len; + /* ADD for index Cfr. Marcela --> delta disto by packet */ + if(volume_info && volume_info->index_write && volume_info->index_on) { + opj_tile_info_t *info_TL = &volume_info->tile[tileno]; + opj_packet_info_t *info_PK = &info_TL->packet[volume_info->num]; + info_PK->disto += layer->disto; + if (volume_info->D_max < info_PK->disto) { + volume_info->D_max = info_PK->disto; + } + } + /* */ + } + } + + return (c - dest); +} + +static void t2_init_seg(opj_tcd_seg_t * seg, int cblksty, int first) { + seg->numpasses = 0; + seg->len = 0; + if (cblksty & J3D_CCP_CBLKSTY_TERMALL) { + seg->maxpasses = 1; + } + else if (cblksty & J3D_CCP_CBLKSTY_LAZY) { + if (first) { + seg->maxpasses = 10; + } else { + seg->maxpasses = (((seg - 1)->maxpasses == 1) || ((seg - 1)->maxpasses == 10)) ? 2 : 1; + } + } else { + seg->maxpasses = 109; + } +} + +int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi) { + int bandno, cblkno; + unsigned char *c = src; + + opj_cp_t *cp = t2->cp; + + int compno = pi->compno; /* component value */ + int resno = pi->resno; /* resolution level value */ + int precno = pi->precno; /* precinct value */ + int layno = pi->layno; /* quality layer value */ + + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + unsigned char *hd = NULL; + int present; + + opj_bio_t *bio = NULL; /* BIO component */ + + if (layno == 0) { + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)||(band->z1-band->z0 == 0)) continue; + + tgt_reset(prc->incltree); + tgt_reset(prc->imsbtree); + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + cblk->numsegs = 0; + } + } + } + + /* SOP markers */ + + if (tcp->csty & J3D_CP_CSTY_SOP) { + if ((*c) != 0xff || (*(c + 1) != 0x91)) { + opj_event_msg(t2->cinfo, EVT_WARNING, "Expected SOP marker\n"); + } else { + c += 6; + } + + /** TODO : check the Nsop value */ + } + + /* + When the marker PPT/PPM is used the packet header are store in PPT/PPM marker + This part deal with this caracteristic + step 1: Read packet header in the saved structure + step 2: Return to codestream for decoding + */ + + bio = bio_create(); + + if (cp->ppm == 1) { /* PPM */ + hd = cp->ppm_data; + bio_init_dec(bio, hd, cp->ppm_len); + } else if (tcp->ppt == 1) { /* PPT */ + hd = tcp->ppt_data; + bio_init_dec(bio, hd, tcp->ppt_len); + } else { /* Normal Case */ + hd = c; + bio_init_dec(bio, hd, src+len-hd); + } + + present = bio_read(bio, 1); + + if (!present) { + bio_inalign(bio); + hd += bio_numbytes(bio); + bio_destroy(bio); + + /* EPH markers */ + + if (tcp->csty & J3D_CP_CSTY_EPH) { + if ((*hd) != 0xff || (*(hd + 1) != 0x92)) { + printf("Error : expected EPH marker\n"); + } else { + hd += 2; + } + } + + if (cp->ppm == 1) { /* PPM case */ + cp->ppm_len += cp->ppm_data-hd; + cp->ppm_data = hd; + return (c - src); + } + if (tcp->ppt == 1) { /* PPT case */ + tcp->ppt_len+=tcp->ppt_data-hd; + tcp->ppt_data = hd; + return (c - src); + } + + return (hd - src); + } + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)||(band->z1-band->z0 == 0)) continue; + + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + int included, increment, n; + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + opj_tcd_seg_t *seg = NULL; + /* if cblk not yet included before --> inclusion tagtree */ + if (!cblk->numsegs) { + included = tgt_decode(bio, prc->incltree, cblkno, layno + 1); + /* else one bit */ + } else { + included = bio_read(bio, 1); + } + /* if cblk not included */ + if (!included) { + cblk->numnewpasses = 0; + continue; + } + /* if cblk not yet included --> zero-bitplane tagtree */ + if (!cblk->numsegs) { + int i, numimsbs; + for (i = 0; !tgt_decode(bio, prc->imsbtree, cblkno, i); i++); + numimsbs = i - 1; + cblk->numbps = band->numbps - numimsbs; + cblk->numlenbits = 3; + } + /* number of coding passes */ + cblk->numnewpasses = t2_getnumpasses(bio); + increment = t2_getcommacode(bio); + /* length indicator increment */ + cblk->numlenbits += increment; + if (!cblk->numsegs) { + seg = &cblk->segs[0]; + t2_init_seg(seg, tcp->tccps[compno].cblksty, 1); + } else { + seg = &cblk->segs[cblk->numsegs - 1]; + if (seg->numpasses == seg->maxpasses) { + t2_init_seg(++seg, tcp->tccps[compno].cblksty, 0); + } + } + n = cblk->numnewpasses; + + do { + seg->numnewpasses = int_min(seg->maxpasses - seg->numpasses, n); + seg->newlen = bio_read(bio, cblk->numlenbits + int_floorlog2(seg->numnewpasses)); + n -= seg->numnewpasses; + if (n > 0) { + t2_init_seg(++seg, tcp->tccps[compno].cblksty, 0); + } + } while (n > 0); + } + } + + if (bio_inalign(bio)) { + bio_destroy(bio); + return -999; + } + + hd += bio_numbytes(bio); + bio_destroy(bio); + + /* EPH markers */ + if (tcp->csty & J3D_CP_CSTY_EPH) { + if ((*hd) != 0xff || (*(hd + 1) != 0x92)) { + opj_event_msg(t2->cinfo, EVT_ERROR, "Expected EPH marker\n"); + } else { + hd += 2; + } + } + + if (cp->ppm==1) { + cp->ppm_len+=cp->ppm_data-hd; + cp->ppm_data = hd; + } else if (tcp->ppt == 1) { + tcp->ppt_len+=tcp->ppt_data-hd; + tcp->ppt_data = hd; + } else { + c=hd; + } + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)||(band->z1-band->z0 == 0)) continue; + + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + opj_tcd_seg_t *seg = NULL; + if (!cblk->numnewpasses) + continue; + if (!cblk->numsegs) { + seg = &cblk->segs[0]; + cblk->numsegs++; + cblk->len = 0; + } else { + seg = &cblk->segs[cblk->numsegs - 1]; + if (seg->numpasses == seg->maxpasses) { + seg++; + cblk->numsegs++; + } + } + + do { + if (c + seg->newlen > src + len) { + return -999; + } + + memcpy(cblk->data + cblk->len, c, seg->newlen); + if (seg->numpasses == 0) { + seg->data = cblk->data + cblk->len; + } + c += seg->newlen; + cblk->len += seg->newlen; + seg->len += seg->newlen; + seg->numpasses += seg->numnewpasses; + cblk->numnewpasses -= seg->numnewpasses; + if (cblk->numnewpasses > 0) { + seg++; + cblk->numsegs++; + } + } while (cblk->numnewpasses > 0); + } + } + + return (c - src); +} + +/* ----------------------------------------------------------------------- */ + +int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_volume_info_t *volume_info) { + unsigned char *c = dest; + int e = 0; + opj_pi_iterator_t *pi = NULL; + int pino; + + opj_volume_t *volume = t2->volume; + opj_cp_t *cp = t2->cp; + + /* create a packet iterator */ + pi = pi_create(volume, cp, tileno); + if(!pi) { + fprintf(stdout,"[ERROR] Failed to create a pi structure\n"); + return -999; + } + + if(volume_info) { + volume_info->num = 0; + } + + for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) { + while (pi_next(&pi[pino])) { + if (pi[pino].layno < maxlayers) { + e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c, volume_info, tileno, cp); + //opj_event_msg(t2->cinfo, EVT_INFO, " t2_encode_packet: %d bytes coded\n",e); + if (e == -999) { + break; + } else { + c += e; + } + + /* INDEX >> */ + if(volume_info && volume_info->index_on) { + if(volume_info->index_write) { + opj_tile_info_t *info_TL = &volume_info->tile[tileno]; + opj_packet_info_t *info_PK = &info_TL->packet[volume_info->num]; + if (!volume_info->num) { + info_PK->start_pos = info_TL->end_header + 1; + } else { + info_PK->start_pos = info_TL->packet[volume_info->num - 1].end_pos + 1; + } + info_PK->end_pos = info_PK->start_pos + e - 1; + } + + volume_info->num++; + } + /* << INDEX */ + } + } + } + + /* don't forget to release pi */ + pi_destroy(pi, cp, tileno); + + if (e == -999) { + return e; + } + + return (c - dest); +} + +int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno, opj_tcd_tile_t *tile) { + unsigned char *c = src; + opj_pi_iterator_t *pi; + int pino, e = 0; + int n = 0,i; + + opj_volume_t *volume = t2->volume; + opj_cp_t *cp = t2->cp; + + /* create a packet iterator */ + pi = pi_create(volume, cp, tileno); + if(!pi) { + /* TODO: throw an error */ + return -999; + } + + for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) { + while (pi_next(&pi[pino])) { + if ((cp->layer==0) || (cp->layer>=((pi[pino].layno)+1))) { + e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino]); + } else { + e = 0; + } + + /* progression in resolution */ + for (i = 0; i < 3; i++){ + volume->comps[pi[pino].compno].resno_decoded[i] = (e > 0) ? int_max(pi[pino].resno, volume->comps[pi[pino].compno].resno_decoded[i]) : volume->comps[pi[pino].compno].resno_decoded[i]; + } + n++; + + if (e == -999) { /* ADD */ + break; + } else { + opj_event_msg(t2->cinfo, EVT_INFO, " t2_decode_packet: %d bytes decoded\n",e); + c += e; + } + } + } + + /* don't forget to release pi */ + pi_destroy(pi, cp, tileno); + + if (e == -999) { + return e; + } + + return (c - src); +} + +/* ----------------------------------------------------------------------- */ + +opj_t2_t* t2_create(opj_common_ptr cinfo, opj_volume_t *volume, opj_cp_t *cp) { + /* create the tcd structure */ + opj_t2_t *t2 = (opj_t2_t*)opj_malloc(sizeof(opj_t2_t)); + if(!t2) return NULL; + t2->cinfo = cinfo; + t2->volume = volume; + t2->cp = cp; + + return t2; +} + +void t2_destroy(opj_t2_t *t2) { + if(t2) { + opj_free(t2); + } +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t2.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t2.h new file mode 100755 index 0000000000..191d0bc499 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/t2.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __T2_H +#define __T2_H +/** +@file t2.h +@brief Implementation of a tier-2 coding (packetization of code-block data) (T2) + +*/ + +/** @defgroup T2 T2 - Implementation of a tier-2 coding */ +/*@{*/ + +/** +Tier-2 coding +*/ +typedef struct opj_t2 { +/** Codec context */ + opj_common_ptr cinfo; +/** Encoding: pointer to the src volume. Decoding: pointer to the dst volume. */ + opj_volume_t *volume; +/** Pointer to the volume coding parameters */ + opj_cp_t *cp; +} opj_t2_t; + +/** @name Funciones generales */ +/*@{*/ +/* ----------------------------------------------------------------------- */ + +/** +Encode the packets of a tile to a destination buffer +@param t2 T2 handle +@param tileno number of the tile encoded +@param tile the tile for which to write the packets +@param maxlayers maximum number of layers +@param dest the destination buffer +@param len the length of the destination buffer +@param volume_info structure to create an index file +@return Number of bytes written from packets +*/ +int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_volume_info_t *volume_info); + +/** +Decode the packets of a tile from a source buffer +@param t2 T2 handle +@param src the source buffer +@param len length of the source buffer +@param tileno number that identifies the tile for which to decode the packets +@param tile tile for which to decode the packets +@return Number of bytes read from packets + */ +int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno, opj_tcd_tile_t *tile); + +/** +Create a T2 handle +@param cinfo Codec context info +@param volume Source or destination volume +@param cp Volume coding parameters +@return Returns a new T2 handle if successful, returns NULL otherwise +*/ +opj_t2_t* t2_create(opj_common_ptr cinfo, opj_volume_t *volume, opj_cp_t *cp); +/** +Destroy a T2 handle +@param t2 T2 handle to destroy +*/ +void t2_destroy(opj_t2_t *t2); + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __T2_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tcd.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tcd.c new file mode 100755 index 0000000000..b0184d5842 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tcd.c @@ -0,0 +1,1738 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez, LPI-UVA, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_volume_t * vol) { + int tileno, compno, resno, bandno, precno, cblkno; + + fprintf(fd, "volume {\n"); + fprintf(fd, " tw=%d, th=%d, tl=%d, x0=%d x1=%d y0=%d y1=%d z0=%d z1=%d\n", + vol->tw, vol->th, vol->tl, tcd->volume->x0, tcd->volume->x1, tcd->volume->y0, tcd->volume->y1, tcd->volume->z0, tcd->volume->z1); + + for (tileno = 0; tileno < vol->th * vol->tw * vol->tl; tileno++) { + opj_tcd_tile_t *tile = &tcd->tcd_volume->tiles[tileno]; + fprintf(fd, " tile {\n"); + fprintf(fd, " x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numcomps=%d\n", + tile->x0, tile->y0, tile->z0, tile->x1, tile->y1, tile->z1, tile->numcomps); + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + fprintf(fd, " tilecomp %d {\n",compno); + fprintf(fd, " x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numresx=%d, numresy=%d, numresz=%d\n", + tilec->x0, tilec->y0, tilec->z0, tilec->x1, tilec->y1, tilec->z1, tilec->numresolution[0], tilec->numresolution[1], tilec->numresolution[2]); + for (resno = 0; resno < tilec->numresolution[0]; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + fprintf(fd, " res %d{\n",resno); + fprintf(fd," x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, pw=%d, ph=%d, pl=%d, numbands=%d\n", + res->x0, res->y0, res->z0, res->x1, res->y1, res->z1, res->prctno[0], res->prctno[1], res->prctno[2], res->numbands); + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + fprintf(fd, " band %d{\n", bandno); + fprintf(fd, " x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, stepsize=%f, numbps=%d\n", + band->x0, band->y0, band->z0, band->x1, band->y1, band->z1, band->stepsize, band->numbps); + for (precno = 0; precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); precno++) { + opj_tcd_precinct_t *prec = &band->precincts[precno]; + fprintf(fd, " prec %d{\n",precno); + fprintf(fd, " x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, cw=%d, ch=%d, cl=%d,\n", + prec->x0, prec->y0, prec->z0, prec->x1, prec->y1, prec->z1, prec->cblkno[0], prec->cblkno[1], prec->cblkno[2]); + for (cblkno = 0; cblkno < (prec->cblkno[0] * prec->cblkno[1] * prec->cblkno[2]); cblkno++) { + opj_tcd_cblk_t *cblk = &prec->cblks[cblkno]; + fprintf(fd, " cblk %d{\n",cblkno); + fprintf(fd, " x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", cblk->x0, cblk->y0, cblk->z0, cblk->x1, cblk->y1, cblk->z1); + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, "}\n"); +} + +void tilec_dump(FILE *fd, opj_tcd_tilecomp_t *tilec) { + + int i=0,k; + int datalen; + int *a; + + fprintf(fd, " tilecomp{\n"); + fprintf(fd, " x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numresx=%d, numresy=%d, numresz=%d\n", + tilec->x0, tilec->y0, tilec->z0, tilec->x1, tilec->y1, tilec->z1, tilec->numresolution[0], tilec->numresolution[1], tilec->numresolution[2]); + fprintf(fd, " data {\n"); + datalen = (tilec->z1 - tilec->z0) * (tilec->y1 - tilec->y0) * (tilec->x1 - tilec->x0); + a = tilec->data; + for (k = 0; k < datalen; k++) { + if (!(k % tilec->x1)){ + fprintf(fd, "\n"); + } + if (!(k % (tilec->y1 * tilec->x1))){ + fprintf(fd, "Slice %d\n",i++); + } + fprintf(fd," %d",a[k]); + + + } + fprintf(fd, " }\n"); + /*i=0; + fprintf(fd, "Slice %d\n"); + if (tilec->prediction->prederr) { + fprintf(fd, " prederror {\n"); + a = tilec->prediction->prederr; + for (k = 0; k < datalen; k++) { + fprintf(fd," %d",*(a++)); + if (!(k % (tilec->y1 - tilec->y0) * (tilec->x1 - tilec->x0))){ + fprintf(fd, "\n");fprintf(fd, "Slice %d\n",i++); + } + if (!(k % (tilec->x1 - tilec->x0))){ + fprintf(fd, "\n"); + } + } + } + fprintf(fd, " }\n");*/ + fprintf(fd, "}\n"); +} + +/* ----------------------------------------------------------------------- */ + +/** +Create a new TCD handle +*/ +opj_tcd_t* tcd_create(opj_common_ptr cinfo) { + /* create the tcd structure */ + opj_tcd_t *tcd = (opj_tcd_t*)opj_malloc(sizeof(opj_tcd_t)); + if(!tcd) return NULL; + tcd->cinfo = cinfo; + tcd->tcd_volume = (opj_tcd_volume_t*)opj_malloc(sizeof(opj_tcd_volume_t)); + if(!tcd->tcd_volume) { + opj_free(tcd); + return NULL; + } + + return tcd; +} + +/** +Destroy a previously created TCD handle +*/ +void tcd_destroy(opj_tcd_t *tcd) { + if(tcd) { + opj_free(tcd->tcd_volume); + opj_free(tcd); + } +} + +/* ----------------------------------------------------------------------- */ +void tcd_malloc_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp, int curtileno) { + int compno, resno, bandno, precno, cblkno, i, j;//, k; + + opj_tcd_tile_t *tile = NULL; /* pointer to tcd->tile */ + opj_tcd_tilecomp_t *tilec = NULL; /* pointer to tcd->tilec */ + opj_tcd_resolution_t *res = NULL; /* pointer to tcd->res */ + opj_tcd_band_t *band = NULL; /* pointer to tcd->band */ + opj_tcd_precinct_t *prc = NULL; /* pointer to tcd->prc */ + opj_tcd_cblk_t *cblk = NULL; /* pointer to tcd->cblk */ + opj_tcp_t *tcp = &cp->tcps[curtileno]; + int p,q,r; + + tcd->volume = volume; + tcd->cp = cp; + tcd->tcd_volume->tw = cp->tw; + tcd->tcd_volume->th = cp->th; + tcd->tcd_volume->tl = cp->tl; + tcd->tcd_volume->tiles = (opj_tcd_tile_t *) opj_malloc(sizeof(opj_tcd_tile_t)); + tcd->tile = tcd->tcd_volume->tiles; + tile = tcd->tile; + + + /* p61 ISO/IEC IS15444-1 : 2002 */ + /* curtileno --> raster scanned index of tiles */ + /* p,q,r --> matricial index of tiles */ + p = curtileno % cp->tw; + q = curtileno / cp->tw; + r = curtileno / (cp->tw * cp->th); /* extension to 3-D */ + + /* 4 borders of the tile rescale on the volume if necessary (B.3)*/ + tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0); + tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0); + tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0); + tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1); + tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1); + tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1); + tile->numcomps = volume->numcomps; + + /* Modification of the RATE >> */ + for (j = 0; j < tcp->numlayers; j++) { + if (tcp->rates[j] <= 1) { + tcp->rates[j] = 0; + } else { + float num = (float) (tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec); + float den = (float) (8 * volume->comps[0].dx * volume->comps[0].dy * volume->comps[0].dz); + den = tcp->rates[j] * den; + tcp->rates[j] = (num + den - 1) / den; + } + /*tcp->rates[j] = tcp->rates[j] ? int_ceildiv( + tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec, + (tcp->rates[j] * 8 * volume->comps[0].dx * volume->comps[0].dy * volume->comps[0].dz)) : 0;*/ + if (tcp->rates[j]) { + if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) { + tcp->rates[j] = tcp->rates[j - 1] + 20; + } else if (!j && tcp->rates[j] < 30){ + tcp->rates[j] = 30; + } + } + } + /* << Modification of the RATE */ + + tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(volume->numcomps * sizeof(opj_tcd_tilecomp_t)); + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tccp_t *tccp = &tcp->tccps[compno]; + int res_max; + int prevnumbands = 0; + + /* opj_tcd_tilecomp_t *tilec=&tile->comps[compno]; */ + tcd->tilec = &tile->comps[compno]; + tilec = tcd->tilec; + + /* border of each tile component (global) (B.3) */ + tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx); + tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy); + tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz); + tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx); + tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy); + tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz); + + tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int)); + + res_max = 0; + for (i = 0;i < 3; i++){ + tilec->numresolution[i] = tccp->numresolution[i]; + //Greater of 3 resolutions contains all information + res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] : res_max; + } + + + tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(opj_tcd_resolution_t)); + for (resno = 0; resno < res_max; resno++) { + + int pdx, pdy, pdz; + int tlprcxstart, tlprcystart, tlprczstart; + int brprcxend, brprcyend, brprczend; + int tlcbgxstart, tlcbgystart, tlcbgzstart; + int brcbgxend, brcbgyend, brcbgzend; + int cbgwidthexpn, cbgheightexpn, cbglengthexpn; + int cblkwidthexpn, cblkheightexpn, cblklengthexpn; + + int diff = tccp->numresolution[0] - tccp->numresolution[2]; + int levelnox = tilec->numresolution[0] - 1 - resno; + int levelnoy = tilec->numresolution[1] - 1 - resno; + int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 : (resno - diff)); + if (levelnoz < 0) levelnoz = 0; + + /* opj_tcd_resolution_t *res=&tilec->resolutions[resno]; */ + tcd->res = &tilec->resolutions[resno]; + res = tcd->res; + + /* border for each resolution level (global) (B.14)*/ + res->x0 = int_ceildivpow2(tilec->x0, levelnox); + res->y0 = int_ceildivpow2(tilec->y0, levelnoy); + res->z0 = int_ceildivpow2(tilec->z0, levelnoz); + res->x1 = int_ceildivpow2(tilec->x1, levelnox); + res->y1 = int_ceildivpow2(tilec->y1, levelnoy); + res->z1 = int_ceildivpow2(tilec->z1, levelnoz); + //if (res->z1 < 0)fprintf(stdout,"Res: %d %d/%d --> %d\n",resno,tilec->z1, levelnoz, int_ceildivpow2(tilec->z1, levelnoz)); + + res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */ + + /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */ + if (tccp->csty & J3D_CCP_CSTY_PRT) { + pdx = tccp->prctsiz[0][resno]; + pdy = tccp->prctsiz[1][resno]; + pdz = tccp->prctsiz[2][resno]; + } else { + pdx = 15; + pdy = 15; + pdz = 15; + } + + /* p. 66, B.16, ISO/IEC IS15444-1 : 2002 */ + tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx; + tlprcystart = int_floordivpow2(res->y0, pdy) << pdy; + tlprczstart = int_floordivpow2(res->z0, pdz) << pdz; + brprcxend = int_ceildivpow2(res->x1, pdx) << pdx; + brprcyend = int_ceildivpow2(res->y1, pdy) << pdy; + brprczend = int_ceildivpow2(res->z1, pdz) << pdz; + + res->prctno[0] = (brprcxend - tlprcxstart) >> pdx; + res->prctno[1] = (brprcyend - tlprcystart) >> pdy; + res->prctno[2] = (brprczend - tlprczstart) >> pdz; + if (res->prctno[2] == 0) res->prctno[2] = 1; + + /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002 */ + if (resno == 0) { + tlcbgxstart = tlprcxstart; + tlcbgystart = tlprcystart; + tlcbgzstart = tlprczstart; + brcbgxend = brprcxend; + brcbgyend = brprcyend; + brcbgzend = brprczend; + cbgwidthexpn = pdx; + cbgheightexpn = pdy; + cbglengthexpn = pdz; + } else { + tlcbgxstart = int_ceildivpow2(tlprcxstart, 1); + tlcbgystart = int_ceildivpow2(tlprcystart, 1); + tlcbgzstart = int_ceildivpow2(tlprczstart, 1); + brcbgxend = int_ceildivpow2(brprcxend, 1); + brcbgyend = int_ceildivpow2(brprcyend, 1); + brcbgzend = int_ceildivpow2(brprczend, 1); + cbgwidthexpn = pdx - 1; + cbgheightexpn = pdy - 1; + cbglengthexpn = pdz - 1; + } + + cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn); //6 + cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn); //6 + cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn); //6 + + res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(opj_tcd_band_t)); + for (bandno = 0; bandno < res->numbands; bandno++) { + int x0b, y0b, z0b, i; + int gain, numbps; + opj_stepsize_t *ss = NULL; + + tcd->band = &res->bands[bandno]; + band = tcd->band; + + band->bandno = (resno == 0) ? 0 : bandno + 1; + /* Bandno: 0 - LLL 2 - LHL + 1 - HLL 3 - HHL + 4 - LLH 6 - LHH + 5 - HLH 7 - HHH */ + x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5 ) || (band->bandno == 7 ) ? 1 : 0; + y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0; + z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0; + + /* p. 65, B.15, ISO/IEC IS15444-1 : 2002 */ + if (band->bandno == 0) { + /* band border (global) */ + band->x0 = int_ceildivpow2(tilec->x0, levelnox); + band->y0 = int_ceildivpow2(tilec->y0, levelnoy); + band->z0 = int_ceildivpow2(tilec->z0, levelnoz); + band->x1 = int_ceildivpow2(tilec->x1, levelnox); + band->y1 = int_ceildivpow2(tilec->y1, levelnoy); + band->z1 = int_ceildivpow2(tilec->z1, levelnoz); + } else { + band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1); + band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1); + band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1); + band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1); + band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1); + band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1); + } + + ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)]; + if (bandno == (res->numbands - 1)) + prevnumbands += (resno == 0) ? 0 : res->numbands; + gain = dwt_getgain(band->bandno,tccp->reversible); + numbps = volume->comps[compno].prec + gain; + band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn)); + band->numbps = ss->expn + tccp->numgbits - 1; /* WHY -1 ? */ + + band->precincts = (opj_tcd_precinct_t *) opj_malloc((res->prctno[0] * res->prctno[1] * res->prctno[2]) * sizeof(opj_tcd_precinct_t)); + + for (i = 0; i < (res->prctno[0] * res->prctno[1] * res->prctno[2]); i++) { + band->precincts[i].imsbtree = NULL; + band->precincts[i].incltree = NULL; + } + + for (precno = 0; precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); precno++) { + int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend, brcblkzend; + int cbgxstart, cbgystart, cbgzstart, cbgxend, cbgyend, cbgzend; + + cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn); + cbgystart = tlcbgystart + ((precno % (res->prctno[0] * res->prctno[1])) / res->prctno[0]) * (1 << cbgheightexpn); + cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) * (1 << cbglengthexpn); + cbgxend = cbgxstart + (1 << cbgwidthexpn); + cbgyend = cbgystart + (1 << cbgheightexpn); + cbgzend = cbgzstart + (1 << cbglengthexpn); + + tcd->prc = &band->precincts[precno]; + prc = tcd->prc; + + /* precinct size (global) */ + prc->x0 = int_max(cbgxstart, band->x0); + prc->y0 = int_max(cbgystart, band->y0); + prc->z0 = int_max(cbgzstart, band->z0); + prc->x1 = int_min(cbgxend, band->x1); + prc->y1 = int_min(cbgyend, band->y1); + prc->z1 = int_min(cbgzend, band->z1); + + tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn; + tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn; + tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn; + brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn; + brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn; + brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn; + prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn; + prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn; + prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn; + prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2]; + + prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]) * sizeof(opj_tcd_cblk_t)); + prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]); + prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]); + //tgt_tree_dump(stdout,prc->incltree); + for (cblkno = 0; cblkno < (prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]); cblkno++) { + int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) * (1 << cblkwidthexpn); + int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) / prc->cblkno[0]) * (1 << cblkheightexpn); + int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) * (1 << cblklengthexpn); + int cblkxend = cblkxstart + (1 << cblkwidthexpn); + int cblkyend = cblkystart + (1 << cblkheightexpn); + int cblkzend = cblkzstart + (1 << cblklengthexpn); + int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1)); + + tcd->cblk = &prc->cblks[cblkno]; + cblk = tcd->cblk; + + /* code-block size (global) */ + cblk->x0 = int_max(cblkxstart, prc->x0); + cblk->y0 = int_max(cblkystart, prc->y0); + cblk->z0 = int_max(cblkzstart, prc->z0); + cblk->x1 = int_min(cblkxend, prc->x1); + cblk->y1 = int_min(cblkyend, prc->y1); + cblk->z1 = int_min(cblkzend, prc->z1); + } + } + } + } + } + //tcd_dump(stdout, tcd, tcd->tcd_volume); + +} +void tcd_init_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp, int curtileno) { + int compno, resno, bandno, precno, cblkno; + int j, p, q, r; + + opj_tcd_tile_t *tile = NULL; /* pointer to tcd->tile */ + opj_tcd_tilecomp_t *tilec = NULL; /* pointer to tcd->tilec */ + opj_tcd_resolution_t *res = NULL; /* pointer to tcd->res */ + opj_tcd_band_t *band = NULL; /* pointer to tcd->band */ + opj_tcd_precinct_t *prc = NULL; /* pointer to tcd->prc */ + opj_tcd_cblk_t *cblk = NULL; /* pointer to tcd->cblk */ + opj_tcp_t *tcp = &cp->tcps[curtileno]; + + tcd->tile = tcd->tcd_volume->tiles; + tile = tcd->tile; + + /* p61 ISO/IEC IS15444-1 : 2002 */ + /* curtileno --> raster scanned index of tiles */ + /* p,q,r --> matricial index of tiles */ + p = curtileno % cp->tw; + q = curtileno / cp->tw; + r = curtileno / (cp->tw * cp->th); /* extension to 3-D */ + + /* 4 borders of the tile rescale on the volume if necessary (B.3)*/ + tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0); + tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0); + tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0); + tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1); + tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1); + tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1); + tile->numcomps = volume->numcomps; + + /* Modification of the RATE >> */ + for (j = 0; j < tcp->numlayers; j++) { + if (tcp->rates[j] <= 1) { + tcp->rates[j] = 0; + } else { + float num = (float) (tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec); + float den = (float) (8 * volume->comps[0].dx * volume->comps[0].dy * volume->comps[0].dz); + den = tcp->rates[j] * den; + tcp->rates[j] = (num + den - 1) / den; + } + /*tcp->rates[j] = tcp->rates[j] ? int_ceildiv( + tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec, + (tcp->rates[j] * 8 * volume->comps[0].dx * volume->comps[0].dy * volume->comps[0].dz)) : 0;*/ + if (tcp->rates[j]) { + if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) { + tcp->rates[j] = tcp->rates[j - 1] + 20; + } else if (!j && tcp->rates[j] < 30){ + tcp->rates[j] = 30; + } + } + } + /* << Modification of the RATE */ + + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tccp_t *tccp = &tcp->tccps[compno]; + int res_max, i; + int prevnumbands = 0; + + /* opj_tcd_tilecomp_t *tilec=&tile->comps[compno]; */ + tcd->tilec = &tile->comps[compno]; + tilec = tcd->tilec; + + /* border of each tile component (global) (B.3) */ + tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx); + tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy); + tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz); + tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx); + tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy); + tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz); + + tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int)); + + res_max = 0; + for (i = 0;i < 3; i++){ + tilec->numresolution[i] = tccp->numresolution[i]; + //Greater of 3 resolutions contains all information + res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] : res_max; + } + + tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(opj_tcd_resolution_t)); + for (resno = 0; resno < res_max; resno++) { + int pdx, pdy, pdz; + int tlprcxstart, tlprcystart, tlprczstart, brprcxend, brprcyend, brprczend; + int tlcbgxstart, tlcbgystart, tlcbgzstart, brcbgxend, brcbgyend, brcbgzend; + int cbgwidthexpn, cbgheightexpn, cbglengthexpn; + int cblkwidthexpn, cblkheightexpn, cblklengthexpn; + + int levelnox = tilec->numresolution[0] - 1 - resno; + int levelnoy = tilec->numresolution[1] - 1 - resno; + int diff = tccp->numresolution[0] - tccp->numresolution[2]; + int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 : (resno - diff)); + if (levelnoz < 0) levelnoz = 0; + + tcd->res = &tilec->resolutions[resno]; + res = tcd->res; + + /* border for each resolution level (global) (B.14)*/ + res->x0 = int_ceildivpow2(tilec->x0, levelnox); + res->y0 = int_ceildivpow2(tilec->y0, levelnoy); + res->z0 = int_ceildivpow2(tilec->z0, levelnoz); + res->x1 = int_ceildivpow2(tilec->x1, levelnox); + res->y1 = int_ceildivpow2(tilec->y1, levelnoy); + res->z1 = int_ceildivpow2(tilec->z1, levelnoz); + + // res->numbands = resno == 0 ? 1 : 3; /* --> 2D */ + res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */ + + /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */ + if (tccp->csty & J3D_CCP_CSTY_PRT) { + pdx = tccp->prctsiz[0][resno]; + pdy = tccp->prctsiz[1][resno]; + pdz = tccp->prctsiz[2][resno]; + } else { + pdx = 15; + pdy = 15; + pdz = 15; + } + /* p. 66, B.16, ISO/IEC IS15444-1 : 2002 */ + tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx; + tlprcystart = int_floordivpow2(res->y0, pdy) << pdy; + tlprczstart = int_floordivpow2(res->z0, pdz) << pdz; + brprcxend = int_ceildivpow2(res->x1, pdx) << pdx; + brprcyend = int_ceildivpow2(res->y1, pdy) << pdy; + brprczend = int_ceildivpow2(res->z1, pdz) << pdz; + + res->prctno[0] = (brprcxend - tlprcxstart) >> pdx; + res->prctno[1] = (brprcyend - tlprcystart) >> pdy; + res->prctno[2] = (brprczend - tlprczstart) >> pdz; + if (res->prctno[2] == 0) res->prctno[2] = 1; + + /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002 */ + if (resno == 0) { + tlcbgxstart = tlprcxstart; + tlcbgystart = tlprcystart; + tlcbgzstart = tlprczstart; + brcbgxend = brprcxend; + brcbgyend = brprcyend; + brcbgzend = brprczend; + cbgwidthexpn = pdx; + cbgheightexpn = pdy; + cbglengthexpn = pdz; + } else { + tlcbgxstart = int_ceildivpow2(tlprcxstart, 1); + tlcbgystart = int_ceildivpow2(tlprcystart, 1); + tlcbgzstart = int_ceildivpow2(tlprczstart, 1); + brcbgxend = int_ceildivpow2(brprcxend, 1); + brcbgyend = int_ceildivpow2(brprcyend, 1); + brcbgzend = int_ceildivpow2(brprczend, 1); + cbgwidthexpn = pdx - 1; + cbgheightexpn = pdy - 1; + cbglengthexpn = pdz - 1; + } + + cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn); + cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn); + cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn); + + res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(opj_tcd_band_t)); + for (bandno = 0; bandno < res->numbands; bandno++) { + int x0b, y0b, z0b; + int gain, numbps; + opj_stepsize_t *ss = NULL; + + tcd->band = &res->bands[bandno]; + band = tcd->band; + + band->bandno = resno == 0 ? 0 : bandno + 1; + /* Bandno: 0 - LLL 2 - LHL + 1 - HLL 3 - HHL + 4 - LLH 6 - LHH + 5 - HLH 7 - HHH */ + x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5 ) || (band->bandno == 7 ) ? 1 : 0; + y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0; + z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0; + + /* p. 65, B.15, ISO/IEC IS15444-1 : 2002 */ + if (band->bandno == 0) { + /* band border (global) */ + band->x0 = int_ceildivpow2(tilec->x0, levelnox); + band->y0 = int_ceildivpow2(tilec->y0, levelnoy); + band->z0 = int_ceildivpow2(tilec->z0, levelnoz); + band->x1 = int_ceildivpow2(tilec->x1, levelnox); + band->y1 = int_ceildivpow2(tilec->y1, levelnoy); + band->z1 = int_ceildivpow2(tilec->z1, levelnoz); + } else { + band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1); + band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1); + band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1); + band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1); + band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1); + band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1); + } + + ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)]; + if (bandno == (res->numbands - 1)) + prevnumbands += (resno == 0) ? 0 : res->numbands; + gain = dwt_getgain(band->bandno,tccp->reversible); + numbps = volume->comps[compno].prec + gain; + + band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn)); + band->numbps = ss->expn + tccp->numgbits - 1; /* WHY -1 ? */ + + for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) { + int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend, brcblkzend; + + int cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn); + int cbgystart = tlcbgystart + ((precno / (res->prctno[0] * res->prctno[1])) / res->prctno[0]) * (1 << cbgheightexpn); + int cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) * (1 << cbglengthexpn); + int cbgxend = cbgxstart + (1 << cbgwidthexpn); + int cbgyend = cbgystart + (1 << cbgheightexpn); + int cbgzend = cbgzstart + (1 << cbglengthexpn); + + /* opj_tcd_precinct_t *prc=&band->precincts[precno]; */ + tcd->prc = &band->precincts[precno]; + prc = tcd->prc; + + /* precinct size (global) */ + prc->x0 = int_max(cbgxstart, band->x0); + prc->y0 = int_max(cbgystart, band->y0); + prc->z0 = int_max(cbgzstart, band->z0); + prc->x1 = int_min(cbgxend, band->x1); + prc->y1 = int_min(cbgyend, band->y1); + prc->z1 = int_min(cbgzend, band->z1); + + tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn; + tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn; + tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn; + brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn; + brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn; + brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn; + prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn; + prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn; + prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn; + prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2]; + + opj_free(prc->cblks); + prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]) * sizeof(opj_tcd_cblk_t)); + prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]); + prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]); + + for (cblkno = 0; cblkno < (prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]); cblkno++) { + int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) * (1 << cblkwidthexpn); + int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) / prc->cblkno[0]) * (1 << cblkheightexpn); + int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) * (1 << cblklengthexpn); + int cblkxend = cblkxstart + (1 << cblkwidthexpn); + int cblkyend = cblkystart + (1 << cblkheightexpn); + int cblkzend = cblkzstart + (1 << cblklengthexpn); + int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1)); + + tcd->cblk = &prc->cblks[cblkno]; + cblk = tcd->cblk; + + /* code-block size (global) */ + cblk->x0 = int_max(cblkxstart, prc->x0); + cblk->y0 = int_max(cblkystart, prc->y0); + cblk->z0 = int_max(cblkzstart, prc->z0); + cblk->x1 = int_min(cblkxend, prc->x1); + cblk->y1 = int_min(cblkyend, prc->y1); + cblk->z1 = int_min(cblkzend, prc->z1); + } + } /* precno */ + } /* bandno */ + } /* resno */ + } /* compno */ + //tcd_dump(stdout, tcd, tcd->tcd_volume); +} + + +void tcd_free_encode(opj_tcd_t *tcd) { + int tileno, compno, resno, bandno, precno; + + opj_tcd_tile_t *tile = NULL; /* pointer to tcd->tile */ +// opj_tcd_slice_t *slice = NULL; /* pointer to tcd->slice */ + opj_tcd_tilecomp_t *tilec = NULL; /* pointer to tcd->tilec */ + opj_tcd_resolution_t *res = NULL; /* pointer to tcd->res */ + opj_tcd_band_t *band = NULL; /* pointer to tcd->band */ + opj_tcd_precinct_t *prc = NULL; /* pointer to tcd->prc */ + + for (tileno = 0; tileno < 1; tileno++) { + tcd->tile = tcd->tcd_volume->tiles; + tile = tcd->tile; + + for (compno = 0; compno < tile->numcomps; compno++) { + tcd->tilec = &tile->comps[compno]; + tilec = tcd->tilec; + + for (resno = 0; resno < tilec->numresolution[0]; resno++) { + tcd->res = &tilec->resolutions[resno]; + res = tcd->res; + + for (bandno = 0; bandno < res->numbands; bandno++) { + tcd->band = &res->bands[bandno]; + band = tcd->band; + + for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) { + tcd->prc = &band->precincts[precno]; + prc = tcd->prc; + + if (prc->incltree != NULL) { + tgt_destroy(prc->incltree); + prc->incltree = NULL; + } + if (prc->imsbtree != NULL) { + tgt_destroy(prc->imsbtree); + prc->imsbtree = NULL; + } + opj_free(prc->cblks); + prc->cblks = NULL; + } /* for (precno */ + opj_free(band->precincts); + band->precincts = NULL; + } /* for (bandno */ + } /* for (resno */ + opj_free(tilec->resolutions); + tilec->resolutions = NULL; + } /* for (compno */ + opj_free(tile->comps); + tile->comps = NULL; + } /* for (tileno */ + opj_free(tcd->tcd_volume->tiles); + tcd->tcd_volume->tiles = NULL; +} + +/* ----------------------------------------------------------------------- */ +void tcd_malloc_decode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp) { + int tileno, compno, resno, bandno, precno, cblkno, res_max, + i, j, p, q, r; + unsigned int x0 = 0, y0 = 0, z0 = 0, + x1 = 0, y1 = 0, z1 = 0, + w, h, l; + + tcd->volume = volume; + tcd->cp = cp; + tcd->tcd_volume->tw = cp->tw; + tcd->tcd_volume->th = cp->th; + tcd->tcd_volume->tl = cp->tl; + tcd->tcd_volume->tiles = (opj_tcd_tile_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(opj_tcd_tile_t)); + + for (i = 0; i < cp->tileno_size; i++) { + opj_tcp_t *tcp = &(cp->tcps[cp->tileno[i]]); + opj_tcd_tile_t *tile = &(tcd->tcd_volume->tiles[cp->tileno[i]]); + + /* p61 ISO/IEC IS15444-1 : 2002 */ + /* curtileno --> raster scanned index of tiles */ + /* p,q,r --> matricial index of tiles */ + tileno = cp->tileno[i]; + p = tileno % cp->tw; + q = tileno / cp->tw; + r = tileno / (cp->tw * cp->th); /* extension to 3-D */ + + /* 4 borders of the tile rescale on the volume if necessary (B.3)*/ + tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0); + tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0); + tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0); + tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1); + tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1); + tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1); + tile->numcomps = volume->numcomps; + + tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(volume->numcomps * sizeof(opj_tcd_tilecomp_t)); + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + int prevnumbands = 0; + + /* border of each tile component (global) */ + tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx); + tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy); + tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz); + tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx); + tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy); + tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz); + + tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int)); + + res_max = 0; + for (i = 0;i < 3; i++){ + tilec->numresolution[i] = tccp->numresolution[i]; + //Greater of 3 resolutions contains all information + res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] : res_max; + } + + tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(opj_tcd_resolution_t)); + + for (resno = 0; resno < res_max; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + int pdx, pdy, pdz; + int tlprcxstart, tlprcystart, tlprczstart, brprcxend, brprcyend, brprczend; + int tlcbgxstart, tlcbgystart, tlcbgzstart, brcbgxend, brcbgyend, brcbgzend; + int cbgwidthexpn, cbgheightexpn, cbglengthexpn; + int cblkwidthexpn, cblkheightexpn, cblklengthexpn; + int levelnox = tilec->numresolution[0] - 1 - resno; + int levelnoy = tilec->numresolution[1] - 1 - resno; + int diff = tccp->numresolution[0] - tccp->numresolution[2]; + int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 : (resno - diff)); + if (levelnoz < 0) levelnoz = 0; + + /* border for each resolution level (global) */ + res->x0 = int_ceildivpow2(tilec->x0, levelnox); + res->y0 = int_ceildivpow2(tilec->y0, levelnoy); + res->z0 = int_ceildivpow2(tilec->z0, levelnoz); + res->x1 = int_ceildivpow2(tilec->x1, levelnox); + res->y1 = int_ceildivpow2(tilec->y1, levelnoy); + res->z1 = int_ceildivpow2(tilec->z1, levelnoz); + res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */ + + /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */ + if (tccp->csty & J3D_CCP_CSTY_PRT) { + pdx = tccp->prctsiz[0][resno]; + pdy = tccp->prctsiz[1][resno]; + pdz = tccp->prctsiz[2][resno]; + } else { + pdx = 15; + pdy = 15; + pdz = 15; + } + + /* p. 66, B.16, ISO/IEC IS15444-1 : 2002 */ + tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx; + tlprcystart = int_floordivpow2(res->y0, pdy) << pdy; + tlprczstart = int_floordivpow2(res->z0, pdz) << pdz; + brprcxend = int_ceildivpow2(res->x1, pdx) << pdx; + brprcyend = int_ceildivpow2(res->y1, pdy) << pdy; + brprczend = int_ceildivpow2(res->z1, pdz) << pdz; + + res->prctno[0] = (brprcxend - tlprcxstart) >> pdx; + res->prctno[1] = (brprcyend - tlprcystart) >> pdy; + res->prctno[2] = (brprczend - tlprczstart) >> pdz; + + /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002 */ + if (resno == 0) { + tlcbgxstart = tlprcxstart;//0 + tlcbgystart = tlprcystart; + tlcbgzstart = tlprczstart; + brcbgxend = brprcxend;//1 + brcbgyend = brprcyend; + brcbgzend = brprczend; + cbgwidthexpn = pdx; //15 + cbgheightexpn = pdy; + cbglengthexpn = pdz; + } else { + tlcbgxstart = int_ceildivpow2(tlprcxstart, 1); + tlcbgystart = int_ceildivpow2(tlprcystart, 1); + tlcbgzstart = int_ceildivpow2(tlprczstart, 1); + brcbgxend = int_ceildivpow2(brprcxend, 1); + brcbgyend = int_ceildivpow2(brprcyend, 1); + brcbgzend = int_ceildivpow2(brprczend, 1); + cbgwidthexpn = pdx - 1; + cbgheightexpn = pdy - 1; + cbglengthexpn = pdz - 1; + } + + cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn); //6 + cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn); //6 + cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn); //6 + + res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(opj_tcd_band_t)); + for (bandno = 0; bandno < res->numbands; bandno++) { + int x0b, y0b, z0b; + int gain, numbps; + opj_stepsize_t *ss = NULL; + + opj_tcd_band_t *band = &res->bands[bandno]; + band->bandno = resno == 0 ? 0 : bandno + 1; + /* Bandno: 0 - LLL 2 - LHL + 1 - HLL 3 - HHL + 4 - LLH 6 - LHH + 5 - HLH 7 - HHH */ + x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5 ) || (band->bandno == 7 ) ? 1 : 0; + y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0; + z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0; + + /* p. 65, B.15, ISO/IEC IS15444-1 : 2002 */ + if (band->bandno == 0) { + /* band border (global) */ + band->x0 = int_ceildivpow2(tilec->x0, levelnox); + band->y0 = int_ceildivpow2(tilec->y0, levelnoy); + band->z0 = int_ceildivpow2(tilec->z0, levelnoz); + band->x1 = int_ceildivpow2(tilec->x1, levelnox); + band->y1 = int_ceildivpow2(tilec->y1, levelnoy); + band->z1 = int_ceildivpow2(tilec->z1, levelnoz); + } else { + band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1); + band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1); + band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1); + band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1); + band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1); + band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1); + } + + ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)]; + if (bandno == (res->numbands - 1)) + prevnumbands += (resno == 0) ? 0 : res->numbands; + gain = dwt_getgain(band->bandno,tccp->reversible); + numbps = volume->comps[compno].prec + gain; + + band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn)); + band->numbps = ss->expn + tccp->numgbits - 1; /* WHY -1 ? */ + + band->precincts = (opj_tcd_precinct_t *) opj_malloc(res->prctno[0] * res->prctno[1] * res->prctno[2] * sizeof(opj_tcd_precinct_t)); + + for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) { + int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend, brcblkzend; + + int cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn); + int cbgystart = tlcbgystart + (precno / res->prctno[0]) * (1 << cbgheightexpn); + int cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) * (1 << cbglengthexpn); + int cbgxend = cbgxstart + (1 << cbgwidthexpn); + int cbgyend = cbgystart + (1 << cbgheightexpn); + int cbgzend = cbgzstart + (1 << cbglengthexpn); + + opj_tcd_precinct_t *prc = &band->precincts[precno]; + /* precinct size (global) */ + prc->x0 = int_max(cbgxstart, band->x0); + prc->y0 = int_max(cbgystart, band->y0); + prc->z0 = int_max(cbgzstart, band->z0); + prc->x1 = int_min(cbgxend, band->x1); + prc->y1 = int_min(cbgyend, band->y1); + prc->z1 = int_min(cbgzend, band->z1); + + tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn; + tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn; + tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn; + brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn; + brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn; + brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn; + prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn; + prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn; + prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn; + prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2]; + + prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]) * sizeof(opj_tcd_cblk_t)); + prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]); + prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]); + + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) * (1 << cblkwidthexpn); + int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) / prc->cblkno[0]) * (1 << cblkheightexpn); + int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) * (1 << cblklengthexpn); + int cblkxend = cblkxstart + (1 << cblkwidthexpn); + int cblkyend = cblkystart + (1 << cblkheightexpn); + int cblkzend = cblkzstart + (1 << cblklengthexpn); + int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1)); + /* code-block size (global) */ + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + + /* code-block size (global) */ + cblk->x0 = int_max(cblkxstart, prc->x0); + cblk->y0 = int_max(cblkystart, prc->y0); + cblk->z0 = int_max(cblkzstart, prc->z0); + cblk->x1 = int_min(cblkxend, prc->x1); + cblk->y1 = int_min(cblkyend, prc->y1); + cblk->z1 = int_min(cblkzend, prc->z1); + } + } /* precno */ + } /* bandno */ + } /* resno */ + } /* compno */ + } /* i = 0..cp->tileno_size */ + + //tcd_dump(stdout, tcd, tcd->tcd_volume); + + /* + Allocate place to store the decoded data = final volume + Place limited by the tile really present in the codestream + */ + + for (i = 0; i < volume->numcomps; i++) { + for (j = 0; j < cp->tileno_size; j++) { + tileno = cp->tileno[j]; + x0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].x0 : int_min(x0,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].x0); + y0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].y0 : int_min(y0,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].y0); + z0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].z0 : int_min(z0,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].z0); + x1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].x1 : int_max(x1,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].x1); + y1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].y1 : int_max(y1,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].y1); + z1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].z1 : int_max(z1,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].z1); + } + + w = x1 - x0; + h = y1 - y0; + l = z1 - z0; + + volume->comps[i].data = (int *) opj_malloc(w * h * l * sizeof(int)); + volume->comps[i].w = w; + volume->comps[i].h = h; + volume->comps[i].l = l; + volume->comps[i].x0 = x0; + volume->comps[i].y0 = y0; + volume->comps[i].z0 = z0; + volume->comps[i].bigendian = cp->bigendian; + } +} + +void tcd_free_decode(opj_tcd_t *tcd) { + int tileno,compno,resno,bandno,precno; + + opj_tcd_volume_t *tcd_volume = tcd->tcd_volume; + + for (tileno = 0; tileno < tcd_volume->tw * tcd_volume->th * tcd_volume->tl; tileno++) { + opj_tcd_tile_t *tile = &tcd_volume->tiles[tileno]; + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + for (resno = 0; resno < tilec->numresolution[0]; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + for (precno = 0; precno < res->prctno[1] * res->prctno[0] * res->prctno[2]; precno++) { + opj_tcd_precinct_t *prec = &band->precincts[precno]; + if (prec->cblks != NULL) opj_free(prec->cblks); + if (prec->imsbtree != NULL) tgt_destroy(prec->imsbtree); + if (prec->incltree != NULL) tgt_destroy(prec->incltree); + /*for (treeno = 0; treeno < prec->numtrees; treeno++){ + if (prec->imsbtree[treeno] != NULL) tgt_destroy(prec->imsbtree[treeno]); + if (prec->incltree[treeno] != NULL) tgt_destroy(prec->incltree[treeno]); + }*/ + } + if (band->precincts != NULL) opj_free(band->precincts); + } + } + if (tilec->resolutions != NULL) opj_free(tilec->resolutions); + } + if (tile->comps != NULL) opj_free(tile->comps); + } + + if (tcd_volume->tiles != NULL) opj_free(tcd_volume->tiles); +} + + + +/* ----------------------------------------------------------------------- */ +void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final) { + int compno, resno, bandno, precno, cblkno; + int value; /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolution[0]][3]; */ + int matrice[10][10][3]; + int i, j, k; + + opj_cp_t *cp = tcd->cp; + opj_tcd_tile_t *tcd_tile = tcd->tcd_tile; + opj_tcp_t *tcd_tcp = tcd->tcp; + + /*matrice=(int*)opj_malloc(tcd_tcp->numlayers*tcd_tile->comps[0].numresolution[0]*3*sizeof(int)); */ + + for (compno = 0; compno < tcd_tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno]; + for (i = 0; i < tcd_tcp->numlayers; i++) { + for (j = 0; j < tilec->numresolution[0]; j++) { + for (k = 0; k < 3; k++) { + matrice[i][j][k] = + (int) (cp->matrice[i * tilec->numresolution[0] * 3 + j * 3 + k] + * (float) (tcd->volume->comps[compno].prec / 16.0)); + } + } + } + + for (resno = 0; resno < tilec->numresolution[0]; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + opj_tcd_layer_t *layer = &cblk->layers[layno]; + int n; + int imsb = tcd->volume->comps[compno].prec - cblk->numbps; /* number of bit-plan equal to zero */ + /* Correction of the matrix of coefficient to include the IMSB information */ + if (layno == 0) { + value = matrice[layno][resno][bandno]; + if (imsb >= value) { + value = 0; + } else { + value -= imsb; + } + } else { + value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno]; + if (imsb >= matrice[layno - 1][resno][bandno]) { + value -= (imsb - matrice[layno - 1][resno][bandno]); + if (value < 0) { + value = 0; + } + } + } + + if (layno == 0) { + cblk->numpassesinlayers = 0; + } + + n = cblk->numpassesinlayers; + if (cblk->numpassesinlayers == 0) { + if (value != 0) { + n = 3 * value - 2 + cblk->numpassesinlayers; + } else { + n = cblk->numpassesinlayers; + } + } else { + n = 3 * value + cblk->numpassesinlayers; + } + + layer->numpasses = n - cblk->numpassesinlayers; + + if (!layer->numpasses) + continue; + + if (cblk->numpassesinlayers == 0) { + layer->len = cblk->passes[n - 1].rate; + layer->data = cblk->data; + } else { + layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate; + layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate; + } + if (final) + cblk->numpassesinlayers = n; + } + } + } + } + } +} + +void tcd_rateallocate_fixed(opj_tcd_t *tcd) { + int layno; + for (layno = 0; layno < tcd->tcp->numlayers; layno++) { + tcd_makelayer_fixed(tcd, layno, 1); + } +} + +void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final) { + int compno, resno, bandno, precno, cblkno, passno; + + opj_tcd_tile_t *tcd_tile = tcd->tcd_tile; + + tcd_tile->distolayer[layno] = 0; /* fixed_quality */ + + for (compno = 0; compno < tcd_tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno]; + for (resno = 0; resno < tilec->numresolution[0]; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + opj_tcd_layer_t *layer = &cblk->layers[layno]; + + int n; + if (layno == 0) { + cblk->numpassesinlayers = 0; + } + n = cblk->numpassesinlayers; + for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) { + int dr; + double dd; + opj_tcd_pass_t *pass = &cblk->passes[passno]; + if (n == 0) { + dr = pass->rate; + dd = pass->distortiondec; + } else { + dr = pass->rate - cblk->passes[n - 1].rate; + dd = pass->distortiondec - cblk->passes[n - 1].distortiondec; + } + if (!dr) { + if (dd) + n = passno + 1; + continue; + } + if (dd / dr >= thresh){ + n = passno + 1; + } + } + layer->numpasses = n - cblk->numpassesinlayers; + + if (!layer->numpasses) { + layer->disto = 0; + continue; + } + if (cblk->numpassesinlayers == 0) { + layer->len = cblk->passes[n - 1].rate; + layer->data = cblk->data; + layer->disto = cblk->passes[n - 1].distortiondec; + } else { + layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate; + layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate; + layer->disto = cblk->passes[n - 1].distortiondec - cblk->passes[cblk->numpassesinlayers - 1].distortiondec; + } + + tcd_tile->distolayer[layno] += layer->disto; /* fixed_quality */ + + if (final) + cblk->numpassesinlayers = n; + + // fprintf(stdout,"MakeLayer : %d %f %d %d \n",layer->len, layer->disto, layer->numpasses, n); + } + } + } + } + } +} + +bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_volume_info_t * volume_info) { + int compno, resno, bandno, precno, cblkno, passno, layno; + double min, max; + double cumdisto[100]; /* fixed_quality */ + const double K = 1; /* 1.1; // fixed_quality */ + double maxSE = 0; + + opj_cp_t *cp = tcd->cp; + opj_tcd_tile_t *tcd_tile = tcd->tcd_tile; + opj_tcp_t *tcd_tcp = tcd->tcp; + + min = DBL_MAX; + max = 0; + + tcd_tile->nbpix = 0; /* fixed_quality */ + + for (compno = 0; compno < tcd_tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno]; + tilec->nbpix = 0; + for (resno = 0; resno < tilec->numresolution[0]; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) { + opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; + for (passno = 0; passno < cblk->totalpasses; passno++) { + opj_tcd_pass_t *pass = &cblk->passes[passno]; + int dr; + double dd, rdslope; + if (passno == 0) { + dr = pass->rate; + dd = pass->distortiondec; + } else { + dr = pass->rate - cblk->passes[passno - 1].rate; + dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec; + } + if (dr == 0) { + continue; + } + rdslope = dd / dr; + if (rdslope < min) { + min = rdslope; + } + if (rdslope > max) { + max = rdslope; + } + + } /* passno */ + + /* fixed_quality */ + tcd_tile->nbpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0) * (cblk->z1 - cblk->z0)); + tilec->nbpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0) * (cblk->z1 - cblk->z0)); + } /* cbklno */ + } /* precno */ + } /* bandno */ + } /* resno */ + + maxSE += (((double)(1 << tcd->volume->comps[compno].prec) - 1.0) + * ((double)(1 << tcd->volume->comps[compno].prec) -1.0)) + * ((double)(tilec->nbpix)); + } /* compno */ + + /* add antonin index */ + if(volume_info && volume_info->index_on) { + opj_tile_info_t *info_TL = &volume_info->tile[tcd->tcd_tileno]; + info_TL->nbpix = tcd_tile->nbpix; + info_TL->distotile = tcd_tile->distotile; + info_TL->thresh = (double *) opj_malloc(tcd_tcp->numlayers * sizeof(double)); + } + /* dda */ + + for (layno = 0; layno < tcd_tcp->numlayers; layno++) { + double lo = min; + double hi = max; + int success = 0; + int maxlen = tcd_tcp->rates[layno] ? int_min(((int) tcd_tcp->rates[layno]), len) : len; + double goodthresh; + double distotarget; /* fixed_quality */ + int i = 0; + + /* fixed_quality */ + distotarget = tcd_tile->distotile - ((K * maxSE) / pow((float)10, tcd_tcp->distoratio[layno] / 10)); + + if ((tcd_tcp->rates[layno]) || (cp->disto_alloc==0)) { + opj_t2_t *t2 = t2_create(tcd->cinfo, tcd->volume, cp); + int oldl = 0, oldoldl = 0; + for (i = 0; i < 128; i++) { + double thresh = (lo + hi) / 2; + int l = 0; + double distoachieved = 0; /* fixed_quality -q */ + + tcd_makelayer(tcd, layno, thresh, 0); + + if (cp->fixed_quality) { /* fixed_quality -q */ + distoachieved = (layno == 0) ? tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno]; + if (distoachieved < distotarget) { + hi = thresh; + continue; + } + lo = thresh; + } else { /* disto_alloc -r, fixed_alloc -f */ + l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen, volume_info); + //fprintf(stdout, "layno %d i %d len=%d max=%d \n",layno,i,l,maxlen); + if (l == -999) { + lo = thresh; + continue; + } else if (l == oldl && oldl == oldoldl && tcd_tile->distolayer[layno] > 0.0 && i>32) + break; + hi = thresh; + oldoldl = oldl; + oldl = l; + } + success = 1; + goodthresh = thresh; + } + t2_destroy(t2); + } else { + success = 1; + goodthresh = min; + } + if (!success) { + return false; + } + + if(volume_info && volume_info->index_on) { /* Threshold for Marcela Index */ + volume_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh; + } + tcd_makelayer(tcd, layno, goodthresh, 1); + + /* fixed_quality */ + cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno]; + } + + return true; +} + +/* ----------------------------------------------------------------------- */ +int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_volume_info_t * volume_info) { + int compno; + int l, i, npck = 0; + double encoding_time; + + opj_tcd_tile_t *tile = NULL; + opj_tcp_t *tcd_tcp = NULL; + opj_cp_t *cp = NULL; + + opj_tcp_t *tcp = &tcd->cp->tcps[0]; + opj_tccp_t *tccp = &tcp->tccps[0]; + opj_volume_t *volume = tcd->volume; + opj_t2_t *t2 = NULL; /* T2 component */ + + tcd->tcd_tileno = tileno; /* current encoded/decoded tile */ + + tcd->tcd_tile = tcd->tcd_volume->tiles; /* tile information */ + tile = tcd->tcd_tile; + + tcd->tcp = &tcd->cp->tcps[tileno]; /* coding/decoding params of tileno */ + tcd_tcp = tcd->tcp; + + cp = tcd->cp; /* coding parameters */ + + /* INDEX >> */ + if(volume_info && volume_info->index_on) { + opj_tcd_tilecomp_t *tilec_idx = &tile->comps[0]; /* based on component 0 */ + for (i = 0; i < tilec_idx->numresolution[0]; i++) { + opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[i]; + + volume_info->tile[tileno].prctno[0][i] = res_idx->prctno[0]; + volume_info->tile[tileno].prctno[1][i] = res_idx->prctno[1]; + volume_info->tile[tileno].prctno[2][i] = res_idx->prctno[2]; + + npck += res_idx->prctno[0] * res_idx->prctno[1] * res_idx->prctno[2]; + + volume_info->tile[tileno].prctsiz[0][i] = tccp->prctsiz[0][i]; + volume_info->tile[tileno].prctsiz[1][i] = tccp->prctsiz[1][i]; + volume_info->tile[tileno].prctsiz[2][i] = tccp->prctsiz[2][i]; + } + volume_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(volume_info->comp * volume_info->layer * npck * sizeof(opj_packet_info_t)); + } + /* << INDEX */ + + /*---------------TILE-------------------*/ + encoding_time = opj_clock(); /* time needed to encode a tile */ + + for (compno = 0; compno < tile->numcomps; compno++) { + int x, y, z; + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + + int adjust; + int offset_x = int_ceildiv(volume->x0, volume->comps[compno].dx); //ceil(x0 / subsampling_dx) + int offset_y = int_ceildiv(volume->y0, volume->comps[compno].dy); + int offset_z = int_ceildiv(volume->z0, volume->comps[compno].dz); + + int tw = tilec->x1 - tilec->x0; + int w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx); + int th = tilec->y1 - tilec->y0; + int h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy); + int tl = tilec->z1 - tilec->z0; + int l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz); + + + + /* extract tile data from volume.comps[0].data to tile.comps[0].data */ + //fprintf(stdout,"[INFO] Extract tile data\n"); + if (tcd->cp->transform_format == TRF_3D_RLS || tcd->cp->transform_format == TRF_3D_LSE) { + adjust = 0; + } else { + adjust = volume->comps[compno].sgnd ? 0 : 1 << (volume->comps[compno].prec - 1); //sign=='+' --> 2^(prec-1) + if (volume->comps[compno].dcoffset != 0){ + adjust += volume->comps[compno].dcoffset; + fprintf(stdout,"[INFO] DC Offset applied: DCO = %d -> adjust = %d\n",volume->comps[compno].dcoffset,adjust); + } + } + + if (tcd_tcp->tccps[compno].reversible == 1) { //IF perfect reconstruction (DWT.5-3) + for (z = tilec->z0; z < tilec->z1; z++) { + for (y = tilec->y0; y < tilec->y1; y++) { + /* start of the src tile scanline */ + int *data = &volume->comps[compno].data[(tilec->x0 - offset_x) + (y - offset_y) * w + (z - offset_z) * w * h]; + /* start of the dst tile scanline */ + int *tile_data = &tilec->data[(y - tilec->y0) * tw + (z - tilec->z0) * tw * th]; + for (x = tilec->x0; x < tilec->x1; x++) { + *tile_data++ = *data++ - adjust; + } + } + } + } else if (tcd_tcp->tccps[compno].reversible == 0) { //IF not (DWT.9-7) + for (z = tilec->z0; z < tilec->z1; z++) { + for (y = tilec->y0; y < tilec->y1; y++) { + /* start of the src tile scanline */ + int *data = &volume->comps[compno].data[(tilec->x0 - offset_x) + (y - offset_y) * w + (z - offset_z) * w * h]; + /* start of the dst tile scanline */ + int *tile_data = &tilec->data[(y - tilec->y0) * tw + (z - tilec->z0) * tw * th]; + for (x = tilec->x0; x < tilec->x1; x++) { + *tile_data++ = (*data++ - adjust) << 13; + } + } + } + } + + } + + /*----------------MCT-------------------*/ + if (tcd_tcp->mct) { + int samples = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0) * (tile->comps[0].z1 - tile->comps[0].z0); + fprintf(stdout,"[INFO] Tcd_encode_tile: mct\n"); + if (tcd_tcp->tccps[0].reversible == 0) { + mct_encode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, samples); + } else { + mct_encode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, samples); + } + } + /*----------------TRANSFORM---------------------------------*/ + fprintf(stdout,"[INFO] Tcd_encode_tile: Transform\n"); + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + dwt_encode(tilec, tcd_tcp->tccps[compno].dwtid); + } + + /*-------------------ENTROPY CODING-----------------------------*/ + fprintf(stdout,"[INFO] Tcd_encode_tile: Entropy coding\n"); + if ((cp->encoding_format == ENCOD_2EB)||(cp->encoding_format == ENCOD_3EB)) + { + if (cp->encoding_format == ENCOD_2EB) { + opj_t1_t *t1 = NULL; + t1 = t1_create(tcd->cinfo); + t1_encode_cblks(t1, tile, tcd_tcp); + t1_destroy(t1); + } else if (cp->encoding_format == ENCOD_3EB) { + opj_t1_3d_t *t1 = NULL; + t1 = t1_3d_create(tcd->cinfo); + t1_3d_encode_cblks(t1, tile, tcd_tcp); + t1_3d_destroy(t1); + } + /*-----------RATE-ALLOCATE------------------*/ + /* INDEX */ + if(volume_info) { + volume_info->index_write = 0; + } + if (cp->disto_alloc || cp->fixed_quality) { + fprintf(stdout,"[INFO] Tcd_encode_tile: Rate-allocate\n"); + tcd_rateallocate(tcd, dest, len, volume_info); /* Normal Rate/distortion allocation */ + } else {/* fixed_alloc */ + fprintf(stdout,"[INFO] Tcd_encode_tile: Rate-allocate fixed\n"); + tcd_rateallocate_fixed(tcd); /* Fixed layer allocation */ + } + + /*--------------TIER2------------------*/ + /* INDEX */ + if(volume_info) { + volume_info->index_write = 1; + } + fprintf(stdout,"[INFO] Tcd_encode_tile: Tier - 2\n"); + t2 = t2_create(tcd->cinfo, volume, cp); + l = t2_encode_packets(t2, tileno, tile, tcd_tcp->numlayers, dest, len, volume_info); + t2_destroy(t2); + } else if ((cp->encoding_format == ENCOD_2GR)||(cp->encoding_format == ENCOD_3GR)) { + /*if(volume_info) { + volume_info->index_write = 1; + } + gr = golomb_create(tcd->cinfo, volume, cp); + l = golomb_encode(gr, tileno, tile, dest, len, volume_info); + golomb_destroy(gr);*/ + } + + + /*---------------CLEAN-------------------*/ + fprintf(stdout,"[INFO] Tcd_encode_tile: %d bytes coded\n",l); + encoding_time = opj_clock() - encoding_time; + opj_event_msg(tcd->cinfo, EVT_INFO, "- tile encoded in %f s\n", encoding_time); + + /* cleaning memory */ + for (compno = 0; compno < tile->numcomps; compno++) { + tcd->tilec = &tile->comps[compno]; + opj_free(tcd->tilec->data); + } + + if (l == -999){ + fprintf(stdout,"[ERROR] Unable to perform T2 tier. Return -999.\n"); + return 0; + } + + return l; +} + + +bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno) { + int l, i; + int compno, eof = 0; + double tile_time, t1_time, dwt_time; + + opj_tcd_tile_t *tile = NULL; + opj_t2_t *t2 = NULL; /* T2 component */ + + tcd->tcd_tileno = tileno; + tcd->tcd_tile = &(tcd->tcd_volume->tiles[tileno]); + tcd->tcp = &(tcd->cp->tcps[tileno]); + tile = tcd->tcd_tile; + + tile_time = opj_clock(); /* time needed to decode a tile */ + opj_event_msg(tcd->cinfo, EVT_INFO, "tile %d / %d\n", tileno + 1, tcd->cp->tw * tcd->cp->th * tcd->cp->tl); + + if ((tcd->cp->encoding_format == ENCOD_2EB) || (tcd->cp->encoding_format == ENCOD_3EB)) { + /*--------------TIER2------------------*/ + t2 = t2_create(tcd->cinfo, tcd->volume, tcd->cp); + l = t2_decode_packets(t2, src, len, tileno, tile); + t2_destroy(t2); + opj_event_msg(tcd->cinfo, EVT_INFO, "Tcd_decode_tile: %d bytes decoded\n",l); + + if (l == -999) { + eof = 1; + opj_event_msg(tcd->cinfo, EVT_ERROR, "Tcd_decode_tile: incomplete bistream\n"); + } + + /*------------------TIER1-----------------*/ + opj_event_msg(tcd->cinfo, EVT_INFO, "Tcd_decode_tile: Entropy decoding %d \n",tcd->cp->encoding_format); + t1_time = opj_clock(); /* time needed to decode a tile */ + if (tcd->cp->encoding_format == ENCOD_2EB) { + opj_t1_t *t1 = NULL; /* T1 component */ + t1 = t1_create(tcd->cinfo); + t1_decode_cblks(t1, tile, tcd->tcp); + t1_destroy(t1); + }else if (tcd->cp->encoding_format == ENCOD_3EB) { + opj_t1_3d_t *t1 = NULL; /* T1 component */ + t1 = t1_3d_create(tcd->cinfo); + t1_3d_decode_cblks(t1, tile, tcd->tcp); + t1_3d_destroy(t1); + } + + t1_time = opj_clock() - t1_time; + #ifdef VERBOSE + opj_event_msg(tcd->cinfo, EVT_INFO, "- tier-1 took %f s\n", t1_time); + #endif + } else if ((tcd->cp->encoding_format == ENCOD_2GR)||(tcd->cp->encoding_format == ENCOD_3GR)) { + opj_event_msg(tcd->cinfo, EVT_INFO, "Tcd_decode_tile: Entropy decoding -- Does nothing :-D\n"); + /* + gr = golomb_create(tcd->cinfo, tcd->volume, tcd->cp); + l = golomb_decode(gr, tileno, tile, src, len); + golomb_destroy(gr); + if (l == -999) { + eof = 1; + opj_event_msg(tcd->cinfo, EVT_ERROR, "Tcd_decode_tile: incomplete bistream\n"); + } + */ + } + + /*----------------DWT---------------------*/ + fprintf(stdout,"[INFO] Tcd_decode_tile: Inverse DWT\n"); + dwt_time = opj_clock(); /* time needed to decode a tile */ + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + int stops[3], dwtid[3]; + + for (i = 0; i < 3; i++) { + if (tcd->cp->reduce[i] != 0) + tcd->volume->comps[compno].resno_decoded[i] = tile->comps[compno].numresolution[i] - tcd->cp->reduce[i] - 1; + stops[i] = tilec->numresolution[i] - 1 - tcd->volume->comps[compno].resno_decoded[i]; + if (stops[i] < 0) stops[i]=0; + dwtid[i] = tcd->cp->tcps->tccps[compno].dwtid[i]; + } + + dwt_decode(tilec, stops, dwtid); + + for (i = 0; i < 3; i++) { + if (tile->comps[compno].numresolution[i] > 0) { + tcd->volume->comps[compno].factor[i] = tile->comps[compno].numresolution[i] - (tcd->volume->comps[compno].resno_decoded[i] + 1); + if ( (tcd->volume->comps[compno].factor[i]) < 0 ) + tcd->volume->comps[compno].factor[i] = 0; + } + } + } + dwt_time = opj_clock() - dwt_time; + #ifdef VERBOSE + opj_event_msg(tcd->cinfo, EVT_INFO, "- dwt took %f s\n", dwt_time); + #endif + + /*----------------MCT-------------------*/ + + if (tcd->tcp->mct) { + if (tcd->tcp->tccps[0].reversible == 1) { + mct_decode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, + (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0) * (tile->comps[0].z1 - tile->comps[0].z0)); + } else { + mct_decode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, + (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0)* (tile->comps[0].z1 - tile->comps[0].z0)); + } + } + + /*---------------TILE-------------------*/ + + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + opj_tcd_resolution_t *res = &tilec->resolutions[tcd->volume->comps[compno].resno_decoded[0]]; + int adjust; + int minval = tcd->volume->comps[compno].sgnd ? -(1 << (tcd->volume->comps[compno].prec - 1)) : 0; + int maxval = tcd->volume->comps[compno].sgnd ? (1 << (tcd->volume->comps[compno].prec - 1)) - 1 : (1 << tcd->volume->comps[compno].prec) - 1; + + int tw = tilec->x1 - tilec->x0; + int w = tcd->volume->comps[compno].w; + int th = tilec->y1 - tilec->y0; + int h = tcd->volume->comps[compno].h; + + int i, j, k; + int offset_x = int_ceildivpow2(tcd->volume->comps[compno].x0, tcd->volume->comps[compno].factor[0]); + int offset_y = int_ceildivpow2(tcd->volume->comps[compno].y0, tcd->volume->comps[compno].factor[1]); + int offset_z = int_ceildivpow2(tcd->volume->comps[compno].z0, tcd->volume->comps[compno].factor[2]); + + if (tcd->cp->transform_format == TRF_3D_RLS || tcd->cp->transform_format == TRF_3D_LSE) { + adjust = 0; + } else { + adjust = tcd->volume->comps[compno].sgnd ? 0 : 1 << (tcd->volume->comps[compno].prec - 1); //sign=='+' --> 2^(prec-1) + if (tcd->volume->comps[compno].dcoffset != 0){ + adjust += tcd->volume->comps[compno].dcoffset; + fprintf(stdout,"[INFO] DC Offset applied: DCO = %d -> adjust = %d\n",tcd->volume->comps[compno].dcoffset,adjust); + } + } + + for (k = res->z0; k < res->z1; k++) { + for (j = res->y0; j < res->y1; j++) { + for (i = res->x0; i < res->x1; i++) { + int v; + float tmp = (float)((tilec->data[i - res->x0 + (j - res->y0) * tw + (k - res->z0) * tw * th]) / 8192.0); + + if (tcd->tcp->tccps[compno].reversible == 1) { + v = tilec->data[i - res->x0 + (j - res->y0) * tw + (k - res->z0) * tw * th]; + } else { + int tmp2 = ((int) (floor(fabs(tmp)))) + ((int) floor(fabs(tmp*2))%2); + v = ((tmp < 0) ? -tmp2:tmp2); + } + v += adjust; + + tcd->volume->comps[compno].data[(i - offset_x) + (j - offset_y) * w + (k - offset_z) * w * h] = int_clamp(v, minval, maxval); + } + } + } + } + + tile_time = opj_clock() - tile_time; /* time needed to decode a tile */ + opj_event_msg(tcd->cinfo, EVT_INFO, "- tile decoded in %f s\n", tile_time); + + for (compno = 0; compno < tile->numcomps; compno++) { + opj_free(tcd->tcd_volume->tiles[tileno].comps[compno].data); + tcd->tcd_volume->tiles[tileno].comps[compno].data = NULL; + } + + if (eof) { + return false; + } + + return true; +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tcd.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tcd.h new file mode 100755 index 0000000000..0de60b8c61 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tcd.h @@ -0,0 +1,334 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __TCD_H +#define __TCD_H +/** +@file tcd.h +@brief Implementation of a tile coder/decoder (TCD) + +The functions in TCD.C have for goal to encode or decode each tile independently from +each other. The functions in TCD.C are used by some function in JP3D.C. +*/ + +/** @defgroup TCD TCD - Implementation of a tile coder/decoder */ +/*@{*/ + +/** +Tile coder/decoder: segment instance +*/ +typedef struct opj_tcd_seg { +/** Number of passes in the segment */ + int numpasses; +/** Length of information */ + int len; +/** Data */ + unsigned char *data; +/** Number of passes posible for the segment */ + int maxpasses; +/** Number of passes added to the segment */ + int numnewpasses; +/** New length after inclusion of segments */ + int newlen; +} opj_tcd_seg_t; + +/** +Tile coder/decoder: pass instance +*/ +typedef struct opj_tcd_pass { +/** Rate obtained in the pass*/ + int rate; +/** Distorsion obtained in the pass*/ + double distortiondec; + int term; +/** Length of information */ + int len; +} opj_tcd_pass_t; + +/** +Tile coder/decoder: layer instance +*/ +typedef struct opj_tcd_layer { +/** Number of passes in the layer */ + int numpasses; +/** Length of information */ + int len; +/** Distortion within layer */ + double disto; /* add for index (Cfr. Marcela) */ + unsigned char *data; /* data */ +} opj_tcd_layer_t; + +/** +Tile coder/decoder: codeblock instance +*/ +typedef struct opj_tcd_cblk { +/** Dimension of the code-blocks : left upper corner (x0, y0, z0) */ + int x0, y0, z0; +/** Dimension of the code-blocks : right low corner (x1,y1,z1) */ + int x1, y1, z1; +/** Number of bits per simbol in codeblock */ + int numbps; + int numlenbits; + int len; /* length */ +/** Number of pass already done for the code-blocks */ + int numpasses; +/** number of pass added to the code-blocks */ + int numnewpasses; +/** Number of segments */ + int numsegs; +/** Segments informations */ + opj_tcd_seg_t segs[100]; +/** Number of passes in the layer */ + int numpassesinlayers; +/** Layer information */ + opj_tcd_layer_t layers[100]; +/** Total number of passes */ + int totalpasses; +/** Information about the passes */ + opj_tcd_pass_t passes[100]; +/* Data */ + unsigned char data[524288]; + //unsigned char *data; +} opj_tcd_cblk_t; + +/** +Tile coder/decoder: precint instance +*/ +typedef struct opj_tcd_precinct { +/** Dimension of the precint : left upper corner (x0, y0, z0) */ + int x0, y0, z0; +/** Dimension of the precint : right low corner (x1,y1,z1) */ + int x1, y1, z1; +/** Number of codeblocks in precinct in width and heigth and length*/ + int cblkno[3]; +/** Information about the codeblocks */ + opj_tcd_cblk_t *cblks; +/** Inclusion tree */ + opj_tgt_tree_t *incltree; +/** Missing MSBs tree */ + opj_tgt_tree_t *imsbtree; +} opj_tcd_precinct_t; + +/** +Tile coder/decoder: subband instance +*/ +typedef struct opj_tcd_band { +/** Dimension of the subband : left upper corner (x0, y0, z0) */ + int x0, y0, z0; +/** Dimension of the subband : right low corner (x1,y1,z1) */ + int x1, y1, z1; +/** Information about the precints */ + opj_tcd_precinct_t *precincts; /* precinct information */ +/** Number of bits per symbol in band */ + int numbps; +/** Quantization stepsize associated */ + float stepsize; +/** Band orientation (O->LLL,...,7->HHH) */ + int bandno; +} opj_tcd_band_t; + +/** +Tile coder/decoder: resolution instance +*/ +typedef struct opj_tcd_resolution { +/** Dimension of the resolution level : left upper corner (x0, y0, z0) */ + int x0, y0, z0; +/** Dimension of the resolution level : right low corner (x1,y1,z1) */ + int x1, y1, z1; +/** Number of precints in each dimension for the resolution level */ + int prctno[3]; +/** Number of subbands for the resolution level */ + int numbands; +/** Subband information */ + opj_tcd_band_t *bands; +} opj_tcd_resolution_t; + +/** +Tile coder/decoder: component instance +*/ +typedef struct opj_tcd_tilecomp { +/** Dimension of the component : left upper corner (x0, y0, z0) */ + int x0, y0, z0; +/** Dimension of the component : right low corner (x1,y1,z1) */ + int x1, y1, z1; +/** Number of resolutions level if DWT transform*/ + int numresolution[3]; +/** Resolution information */ + opj_tcd_resolution_t *resolutions; +/** Data of the component */ + int *data; +/** Fixed_quality related */ + int nbpix; +/** Number of bits per voxel in component */ + int bpp; +} opj_tcd_tilecomp_t; + +/** +Tile coder/decoder: tile instance +*/ +typedef struct opj_tcd_tile { +/** Dimension of the tile : left upper corner (x0, y0, z0) */ + int x0, y0, z0; +/** Dimension of the tile : right low corner (x1,y1,z1) */ + int x1, y1, z1; +/** Number of components in tile */ + int numcomps; +/** Components information */ + opj_tcd_tilecomp_t *comps; +/** Fixed_quality related : no of bytes of data*/ + int nbpix; +/** Fixed_quality related : distortion achieved in tile */ + double distotile; +/** Fixed_quality related : distortion achieved in each layer */ + double distolayer[100]; +} opj_tcd_tile_t; + +/** +Tile coder/decoder: volume instance +*/ +typedef struct opj_tcd_volume { +/** Number of tiles in width and heigth and length */ + int tw, th, tl; +/** Tiles information */ + opj_tcd_tile_t *tiles; +} opj_tcd_volume_t; + +/** +Tile coder/decoder +*/ +typedef struct opj_tcd { +/** Codec context */ + opj_common_ptr cinfo; +/** Volume information */ + opj_volume_t *volume; +/** Coding parameters */ + opj_cp_t *cp; +/** Coding/decoding parameters common to all tiles */ + opj_tcp_t *tcp; +/** Info on each volume tile */ + opj_tcd_volume_t *tcd_volume; +/** Pointer to the current encoded/decoded tile */ + opj_tcd_tile_t *tcd_tile; +/** Current encoded/decoded tile */ + int tcd_tileno; + + /**@name working variables */ + /*@{*/ + opj_tcd_tile_t *tile; + opj_tcd_tilecomp_t *tilec; + opj_tcd_resolution_t *res; + opj_tcd_band_t *band; + opj_tcd_precinct_t *prc; + opj_tcd_cblk_t *cblk; + /*@}*/ +} opj_tcd_t; + +/** @name Funciones generales */ +/*@{*/ +/* ----------------------------------------------------------------------- */ + +/** +Dump the content of a tcd structure +*/ +void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_volume_t *img); +/** +Create a new TCD handle +@param cinfo Codec context info +@return Returns a new TCD handle if successful returns NULL otherwise +*/ +opj_tcd_t* tcd_create(opj_common_ptr cinfo); +/** +Destroy a previously created TCD handle +@param tcd TCD handle to destroy +*/ +void tcd_destroy(opj_tcd_t *tcd); +/** +Initialize the tile coder (allocate the memory) +@param tcd TCD handle +@param volume Raw volume +@param cp Coding parameters +@param curtileno Number that identifies the tile that will be encoded +*/ +void tcd_malloc_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp, int curtileno); +/** +Initialize the tile coder (reuses the memory allocated by tcd_malloc_encode)(for 3D-DWT) +@param tcd TCD handle +@param volume Raw volume +@param cp Coding parameters +@param curtileno Number that identifies the tile that will be encoded +*/ +void tcd_init_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp, int curtileno); +/** +Free the memory allocated for encoding +@param tcd TCD handle +*/ +void tcd_free_encode(opj_tcd_t *tcd); +/** +Initialize the tile decoder +@param tcd TCD handle +@param volume Raw volume +@param cp Coding parameters +*/ +void tcd_malloc_decode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp); + +void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final); +void tcd_rateallocate_fixed(opj_tcd_t *tcd); +void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final); +bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_volume_info_t * volume_info); +/** +Encode a tile from the raw volume into a buffer +@param tcd TCD handle +@param tileno Number that identifies one of the tiles to be encoded +@param dest Destination buffer +@param len Length of destination buffer +@param volume_info Creation of index file +@return +*/ +int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_volume_info_t * volume_info); +/** +Decode a tile from a buffer into a raw volume +@param tcd TCD handle +@param src Source buffer +@param len Length of source buffer +@param tileno Number that identifies one of the tiles to be decoded +*/ +bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno); +/** +Free the memory allocated for decoding +@param tcd TCD handle +*/ +void tcd_free_decode(opj_tcd_t *tcd); + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __TCD_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tgt.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tgt.c new file mode 100755 index 0000000000..9398ea9477 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tgt.c @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/* +========================================================== + Tag-tree coder interface +========================================================== +*/ +void tgt_tree_dump (FILE *fd, opj_tgt_tree_t * tree){ + int nodesno; + + fprintf(fd, "TGT_TREE {\n"); + fprintf(fd, " numnodes: %d \n", tree->numnodes); + fprintf(fd, " numleafsh: %d, numleafsv: %d, numleafsz: %d,\n", tree->numleafsh, tree->numleafsv, tree->numleafsz); + + for (nodesno = 0; nodesno < tree->numnodes; nodesno++) { + fprintf(fd, "tgt_node %d {\n", nodesno); + fprintf(fd, " value: %d \n", tree->nodes[nodesno].value); + fprintf(fd, " low: %d \n", tree->nodes[nodesno].low); + fprintf(fd, " known: %d \n", tree->nodes[nodesno].known); + if (tree->nodes[nodesno].parent) { + fprintf(fd, " parent.value: %d \n", tree->nodes[nodesno].parent->value); + fprintf(fd, " parent.low: %d \n", tree->nodes[nodesno].parent->low); + fprintf(fd, " parent.known: %d \n", tree->nodes[nodesno].parent->known); + } + fprintf(fd, "}\n"); + + } + fprintf(fd, "}\n"); + +} + + +opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv, int numleafsz) { + + int nplh[32]; + int nplv[32]; + int nplz[32]; + opj_tgt_node_t *node = NULL; + opj_tgt_node_t *parentnode = NULL; + opj_tgt_node_t *parentnode0 = NULL; + opj_tgt_tree_t *tree = NULL; + int i, j, k, p, p0; + int numlvls; + int n, z = 0; + + tree = (opj_tgt_tree_t *) opj_malloc(sizeof(opj_tgt_tree_t)); + if(!tree) + return NULL; + tree->numleafsh = numleafsh; + tree->numleafsv = numleafsv; + tree->numleafsz = numleafsz; + + numlvls = 0; + nplh[0] = numleafsh; + nplv[0] = numleafsv; + nplz[0] = numleafsz; + tree->numnodes = 0; + do { + n = nplh[numlvls] * nplv[numlvls] * nplz[numlvls]; + nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2; + nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2; + nplz[numlvls + 1] = (nplz[numlvls] + 1) / 2; + tree->numnodes += n; + ++numlvls; + } while (n > 1); + + if (tree->numnodes == 0) { + opj_free(tree); + return NULL; + } + + tree->nodes = (opj_tgt_node_t *) opj_malloc(tree->numnodes * sizeof(opj_tgt_node_t)); + if(!tree->nodes) { + opj_free(tree); + return NULL; + } + + node = tree->nodes; + parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv * tree->numleafsz]; + parentnode0 = parentnode; + + p = tree->numleafsh * tree->numleafsv * tree->numleafsz; + p0 = p; + n = 0; + //fprintf(stdout,"\nH %d V %d Z %d numlvls %d nodes %d\n",tree->numleafsh,tree->numleafsv,tree->numleafsz,numlvls,tree->numnodes); + for (i = 0; i < numlvls - 1; ++i) { + for (j = 0; j < nplv[i]; ++j) { + k = nplh[i]*nplz[i]; + while (--k >= 0) { + node->parent = parentnode; //fprintf(stdout,"node[%d].parent = node[%d]\n",n,p); + ++node; ++n; + if (--k >= 0 && n < p) { + node->parent = parentnode; //fprintf(stdout,"node[%d].parent = node[%d]\n",n,p); + ++node; ++n; + } + if (nplz[i] != 1){ //2D operation vs 3D operation + if (--k >= 0 && n < p) { + node->parent = parentnode; //fprintf(stdout,"node[%d].parent = node[%d]\n",n,p); + ++node; ++n; + } + if (--k >= 0 && n < p) { + node->parent = parentnode; //fprintf(stdout,"node[%d].parent = node[%d]\n",n,p); + ++node; ++n; + } + } + ++parentnode; ++p; + } + if ((j & 1) || j == nplv[i] - 1) { + parentnode0 = parentnode; p0 = p; //fprintf(stdout,"parent = node[%d] \n",p); + } else { + parentnode = parentnode0; p = p0; //fprintf(stdout,"parent = node[%d] \n",p); + parentnode0 += nplh[i]*nplz[i]; p0 += nplh[i]*nplz[i]; + } + } + } + node->parent = 0; + + + tgt_reset(tree); + + return tree; +} + +void tgt_destroy(opj_tgt_tree_t *tree) { + opj_free(tree->nodes); + opj_free(tree); +} + +void tgt_reset(opj_tgt_tree_t *tree) { + int i; + + if (NULL == tree) + return; + + for (i = 0; i < tree->numnodes; i++) { + tree->nodes[i].value = 999; + tree->nodes[i].low = 0; + tree->nodes[i].known = 0; + } +} + +void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value) { + opj_tgt_node_t *node; + node = &tree->nodes[leafno]; + while (node && node->value > value) { + node->value = value; + node = node->parent; + } +} + +void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) { + opj_tgt_node_t *stk[31]; + opj_tgt_node_t **stkptr; + opj_tgt_node_t *node; + int low; + + stkptr = stk; + node = &tree->nodes[leafno]; + while (node->parent) { + *stkptr++ = node; + node = node->parent; + } + + low = 0; + for (;;) { + if (low > node->low) { + node->low = low; + } else { + low = node->low; + } + + while (low < threshold) { + if (low >= node->value) { + if (!node->known) { + bio_write(bio, 1, 1); + node->known = 1; + } + break; + } + bio_write(bio, 0, 1); + ++low; + } + + node->low = low; + if (stkptr == stk) + break; + node = *--stkptr; + } +} + +int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) { + opj_tgt_node_t *stk[31]; + opj_tgt_node_t **stkptr; + opj_tgt_node_t *node; + int low; + + stkptr = stk; + node = &tree->nodes[leafno]; + while (node->parent) { + *stkptr++ = node; + node = node->parent; + } + + low = 0; + for (;;) { + if (low > node->low) { + node->low = low; + } else { + low = node->low; + } + while (low < threshold && low < node->value) { + if (bio_read(bio, 1)) { + node->value = low; + } else { + ++low; + } + } + node->low = low; + if (stkptr == stk) { + break; + } + node = *--stkptr; + } + + return (node->value < threshold) ? 1 : 0; +} diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tgt.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tgt.h new file mode 100755 index 0000000000..ad27f113ad --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/tgt.h @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __TGT_H +#define __TGT_H +/** +@file tgt.h +@brief Implementation of a tag-tree coder (TGT) + +The functions in TGT.C have for goal to realize a tag-tree coder. The functions in TGT.C +are used by some function in T2.C. +*/ + +/** @defgroup TGT TGT - Implementation of a tag-tree coder */ +/*@{*/ + +/** +Tag node +*/ +typedef struct opj_tgt_node { +/** Node parent reference */ + struct opj_tgt_node *parent; +/** */ + int value; +/** */ + int low; +/** */ + int known; +} opj_tgt_node_t; + +/** +Tag tree +*/ +typedef struct opj_tgt_tree { +/** Number of leaves from horizontal axis */ + int numleafsh; +/** Number of leaves from vertical axis */ + int numleafsv; +/** Number of leaves from axial axis */ + int numleafsz; +/** Number of nodes */ + int numnodes; +/** Reference to each node instance */ + opj_tgt_node_t *nodes; +} opj_tgt_tree_t; + +/** @name Funciones generales */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a tag-tree +@param numleafsh Width of the array of leafs of the tree +@param numleafsv Height of the array of leafs of the tree +@param numleafsz Depth of the array of leafs of the tree +@return Returns a new tag-tree if successful, returns NULL otherwise +*/ +opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv, int numleafsz); +/** +Destroy a tag-tree, liberating memory +@param tree Tag-tree to destroy +*/ +void tgt_destroy(opj_tgt_tree_t *tree); +/** +Reset a tag-tree (set all leaves to 0) +@param tree Tag-tree to reset +*/ +void tgt_reset(opj_tgt_tree_t *tree); +/** +Set the value of a leaf of a tag-tree +@param tree Tag-tree to modify +@param leafno Number that identifies the leaf to modify +@param value New value of the leaf +*/ +void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value); +/** +Encode the value of a leaf of the tag-tree up to a given threshold +@param bio Pointer to a BIO handle +@param tree Tag-tree to modify +@param leafno Number that identifies the leaf to encode +@param threshold Threshold to use when encoding value of the leaf +*/ +void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold); +/** +Decode the value of a leaf of the tag-tree up to a given threshold +@param bio Pointer to a BIO handle +@param tree Tag-tree to decode +@param leafno Number that identifies the leaf to decode +@param threshold Threshold to use when decoding value of the leaf +@return Returns 1 if the node's value < threshold, returns 0 otherwise +*/ +int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold); + +/*@}*/ +/* ----------------------------------------------------------------------- */ +void tgt_tree_dump (FILE *fd, opj_tgt_tree_t * tree); + +#endif /* __TGT_H */ diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/volume.c b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/volume.c new file mode 100755 index 0000000000..9066e39051 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/volume.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +opj_volume_t* OPJ_CALLCONV opj_volume_create(int numcmpts, opj_volume_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc) { + int compno; + opj_volume_t *volume = NULL; + + volume = (opj_volume_t*)opj_malloc(sizeof(opj_volume_t)); + if(volume) { + volume->color_space = clrspc; + volume->numcomps = numcmpts; + /* allocate memory for the per-component information */ + volume->comps = (opj_volume_comp_t*)opj_malloc(volume->numcomps * sizeof(opj_volume_comp_t)); + if(!volume->comps) { + opj_volume_destroy(volume); + return NULL; + } + /* create the individual volume components */ + for(compno = 0; compno < numcmpts; compno++) { + opj_volume_comp_t *comp = &volume->comps[compno]; + comp->dx = cmptparms[compno].dx; + comp->dy = cmptparms[compno].dy; + comp->dz = cmptparms[compno].dz; + comp->w = cmptparms[compno].w; + comp->h = cmptparms[compno].h; + comp->l = cmptparms[compno].l; + comp->x0 = cmptparms[compno].x0; + comp->y0 = cmptparms[compno].y0; + comp->z0 = cmptparms[compno].z0; + comp->prec = cmptparms[compno].prec; + comp->bpp = cmptparms[compno].bpp; + comp->sgnd = cmptparms[compno].sgnd; + comp->bigendian = cmptparms[compno].bigendian; + comp->dcoffset = cmptparms[compno].dcoffset; + comp->data = (int*)opj_malloc(comp->w * comp->h * comp->l * sizeof(int)); + if(!comp->data) { + fprintf(stdout,"Unable to malloc comp->data (%d x %d x %d x bytes)",comp->w,comp->h,comp->l); + opj_volume_destroy(volume); + return NULL; + } + //fprintf(stdout,"%d %d %d %d %d %d %d %d %d", comp->w,comp->h, comp->l, comp->dx, comp->dy, comp->dz, comp->prec, comp->bpp, comp->sgnd); + } + } + + return volume; +} + +void OPJ_CALLCONV opj_volume_destroy(opj_volume_t *volume) { + int i; + if(volume) { + if(volume->comps) { + /* volume components */ + for(i = 0; i < volume->numcomps; i++) { + opj_volume_comp_t *volume_comp = &volume->comps[i]; + if(volume_comp->data) { + opj_free(volume_comp->data); + } + } + opj_free(volume->comps); + } + opj_free(volume); + } +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/volume.h b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/volume.h new file mode 100755 index 0000000000..737bde79cf --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/libjp3dvm/volume.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __VOLUME_H +#define __VOLUME_H +/** +@file volume.h +@brief Implementation of operations on volumes (VOLUME) + +The functions in VOLUME.C have for goal to realize operations on volumes. +*/ + +/** @defgroup VOLUME VOLUME - Implementation of operations on volumes */ +/*@{*/ + + +/*@}*/ + +#endif /* __VOLUME_H */ + diff --git a/contrib/menuetlibc/openjpeg/jp3d/tcltk/LPI_JP3D_VM.tcl b/contrib/menuetlibc/openjpeg/jp3d/tcltk/LPI_JP3D_VM.tcl new file mode 100755 index 0000000000..eb184de784 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/tcltk/LPI_JP3D_VM.tcl @@ -0,0 +1,114 @@ +#!/bin/sh +# The next line is executed by /bin/sh, but not tcl \ +exec wish "$0" ${1+"$@"} + +namespace eval jp3dVM { + + variable _progress 0 + variable _afterid "" + variable _status "Compute in progress..." + variable notebook + variable mainframe + variable dataout "Process execution information" + variable status + variable prgtext + variable prgindic + + set pwd [pwd] + cd [file dirname [info script]] + variable VMDIR [pwd] + cd $pwd + + foreach script {encoder.tcl decoder.tcl} { + namespace inscope :: source $VMDIR/$script + } +} + + +proc jp3dVM::create { } { + variable notebook + variable mainframe + variable dataout + + bind all { catch {console show} } + + # Menu description + set descmenu { + "&File" {} {} 0 { + {command "E&xit" {} "Exit BWidget jp3dVM" {} -command exit} + } + "&Options" {} {} 0 { + {command "&Encode" {} "Show encoder" {} + -command {$jp3dVM::notebook raise [$jp3dVM::notebook page 0]} + } + {command "&Decode" {} "Show decoder" {} + -command {$jp3dVM::notebook raise [$jp3dVM::notebook page 1]} + } + } + "&Help" {} {} 0 { + {command "&About authors..." {} "Show info about authors" {} + -command {MessageDlg .msgdlg -parent . -title "About authors" -message " Copyright @ LPI-UVA 2006 " -type ok -icon info}} + } + } + + set mainframe [MainFrame .mainframe \ + -menu $descmenu \ + -textvariable jp3dVM::status \ + -progressvar jp3dVM::prgindic] + + $mainframe addindicator -text "JP3D Verification Model 1.0.0" + + # NoteBook creation + set frame [$mainframe getframe] + set notebook [NoteBook $frame.nb] + + set logo [frame $frame.logo] + #creo imagen logo + image create photo LPIimg -file logoLPI.gif + set logoimg [Label $logo.logoimg -image LPIimg] + + set f0 [VMEncoder::create $notebook] + set f1 [VMDecoder::create $notebook] + + set tfinfo [TitleFrame $frame.codinfo -text "Program Execution"] + set codinfo [$tfinfo getframe] + set sw [ScrolledWindow $codinfo.sw -relief sunken -borderwidth 2 -scrollbar both] + set sf [ScrollableFrame $codinfo.sf ] + $sw setwidget $sf + set subf [$sf getframe] + set labinfo [label $subf.labinfo -textvariable jp3dVM::dataout -justify left] + + pack $labinfo -side left + pack $sw + + $notebook compute_size + $notebook raise [$notebook page 0] + + pack $logoimg -side left -fill x -expand yes + pack $notebook -expand yes + pack $logo $tfinfo -side left -expand yes + pack $mainframe -fill both -expand yes + update idletasks +} + + +proc jp3dVM::main {} { + variable VMDIR + + lappend ::auto_path [file dirname $VMDIR] + namespace inscope :: package require BWidget + + option add *TitleFrame.l.font {helvetica 11 bold italic} + + wm withdraw . + wm title . "JP3D Verification Model @ LPI" + + jp3dVM::create + BWidget::place . 0 0 center + wm deiconify . + raise . + focus -force . +} + +jp3dVM::main +wm geom . [wm geom .] diff --git a/contrib/menuetlibc/openjpeg/jp3d/tcltk/README b/contrib/menuetlibc/openjpeg/jp3d/tcltk/README new file mode 100644 index 0000000000..f4e2e35972 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/tcltk/README @@ -0,0 +1,13 @@ +HOWTO USE THE TCL/TK APP IN 'jp3d/tcltk' +---------------------------------------- +1. Download the 'BWidget-1.9.2' + http://www.sourceforge.net/projects/tcllib/ + +2. Install it e.g. in '/usr/local/BWidget-1.9.2/' +3. Add the lappend command in line 4 + to jp3d/tcltk/LPI_JP3D_VM.tcl: + +#!/bin/sh +# The next line is executed by /bin/sh, but not tcl \ +exec wish "$0" ${1+"$@"} +lappend auto_path /usr/local/BWidget-1.9.2 diff --git a/contrib/menuetlibc/openjpeg/jp3d/tcltk/Thumbs.db b/contrib/menuetlibc/openjpeg/jp3d/tcltk/Thumbs.db new file mode 100755 index 0000000000000000000000000000000000000000..5d6ffdf99eb8ebe582a94fa45d711c3e0bb856ca GIT binary patch literal 18944 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 Be`5du literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/jp3d/tcltk/decoder.tcl b/contrib/menuetlibc/openjpeg/jp3d/tcltk/decoder.tcl new file mode 100755 index 0000000000..6fadbb181c --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/tcltk/decoder.tcl @@ -0,0 +1,272 @@ + +namespace eval VMDecoder { + variable var + variable JP3Ddecoder "../bin/jp3d_vm_dec.exe" + #variable JP3Ddecoder "jp3d_vm_dec.exe" +} + + +proc VMDecoder::create { nb } { + variable var + + set frameD [$nb insert end VMDecoder -text "Decoder"] + set topfD [frame $frameD.topfD] + set medfD [frame $frameD.medfD] + set bottomfD [frame $frameD.bottomfD] + set srcfD [TitleFrame $topfD.srcfD -text "Source"] + set dstfD [TitleFrame $topfD.dstfD -text "Destination"] + set paramfD [TitleFrame $medfD.paramfD -text "Decoding parameters"] + set infofD [TitleFrame $medfD.infofD -text "Distortion measures"] + + set frame1 [$srcfD getframe] + _sourceD $frame1 + set frame2 [$dstfD getframe] + _destinationD $frame2 + set frame3 [$infofD getframe] + _originalD $frame3 + set frame4 [$paramfD getframe] + _paramsD $frame4 + + set butD [Button $bottomfD.butD -text "Decode!" \ + -command "VMDecoder::_decode $frame1 $frame2 $frame3" \ + -helptext "Decoding trigger button"] + set butR [Button $bottomfD.butR -text "Save info" \ + -command "VMDecoder::_save $frame3" \ + -helptext "Save information"] + + pack $srcfD $dstfD -side left -fill both -padx 10 -ipadx 5 -expand yes + pack $topfD -pady 4 -fill x + + pack $paramfD $infofD -side left -fill both -padx 10 -pady 2 -ipadx 5 -expand yes + pack $medfD -pady 4 -fill x + + pack $butD $butR -side left -padx 4 -pady 5 -expand yes + pack $bottomfD -pady 4 -fill x + +return $frameD +} + + +proc fileDialogD {w ent operation} { + + variable file + + if {$operation == "open"} { + #-----Type names---------Extension(s)--- + set types { + {"JP3D Files" {.jp3d} } + {"All files" *} + } + set file [tk_getOpenFile -filetypes $types -parent $w ] + } elseif {$operation == "original"} { + #-----Type names---------Extension(s)--- + set types { + {"BIN Raw Image Files" {.bin} } + {"PGX Raw Image Files" {.pgx} } + {"All files" *} + } + set file [tk_getOpenFile -filetypes $types -parent $w ] + } else { + #-----Type names---------Extension(s)--- + set types { + {"BIN Raw Image Files" {.bin} } + {"PGX Raw Image Files" {.pgx} } + {"All files" *} + } + set file [tk_getSaveFile -filetypes $types -parent $w -initialfile Untitled -defaultextension "*.bin"] + } + if {[string compare $file ""]} { + $ent delete 0 end + $ent insert end $file + $ent xview moveto 1 + } +} + +proc VMDecoder::_sourceD { parent } { + + variable var + + set labsrcD [LabelFrame $parent.labsrcD -text "Select compressed file: " -side top \ + -anchor w -relief flat -borderwidth 0] + set subsrcD [$labsrcD getframe] + set listD [entry $subsrcD.entrysrcD -width 40 -textvariable VMDecoder::var(sourceD)] + + set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0] + set subbrw [$labbrw getframe] + set butbrw [button $subbrw.butbrw -image [Bitmap::get open] \ + -relief raised -borderwidth 1 -padx 1 -pady 1 \ + -command "fileDialogD . $subsrcD.entrysrcD open"] + + pack $listD -side top + pack $butbrw -side top + pack $labsrcD $labbrw -side left -fill both -expand yes + + +} + +proc VMDecoder::_destinationD { parent } { + + variable var + + set labdstD [LabelFrame $parent.labdstD -text "Save decompressed volume file(s) as: " -side top \ + -anchor w -relief flat -borderwidth 0] + set subdstD [$labdstD getframe] + set listD [entry $subdstD.entrydstD -width 40 -textvariable VMDecoder::var(destinationD)] + + set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0] + set subbrw [$labbrw getframe] + set butbrw [button $subbrw.butbrw -image [Bitmap::get save] \ + -relief raised -borderwidth 1 -padx 1 -pady 1 \ + -command "fileDialogD . $subdstD.entrydstD save"] + + pack $listD -side top + pack $butbrw -side top + pack $labdstD $labbrw -side left -fill both -expand yes +} + +proc VMDecoder::_originalD { parent } { + + variable var + + set laborgD [LabelFrame $parent.laborgD -text "Select original file: " -side top \ + -anchor w -relief flat -borderwidth 0] + set suborgD [$laborgD getframe] + set listorgD [entry $suborgD.entryorgD -width 30 -textvariable VMDecoder::var(originalD)] + + set labbrw2 [LabelFrame $parent.labbrw2 -side top -anchor w -relief flat -borderwidth 0] + set subbrw2 [$labbrw2 getframe] + set butbrw2 [button $subbrw2.butbrw2 -image [Bitmap::get open] \ + -relief raised -borderwidth 1 -padx 1 -pady 1 \ + -command "fileDialogD . $suborgD.entryorgD original"] + + set infoD [Label $parent.infoD -relief sunken -textvariable VMDecoder::var(decodinfo) -justify left] + + pack $listorgD -side left -anchor n + pack $butbrw2 -side left -anchor n + pack $infoD -side bottom -anchor nw -pady 4 -ipadx 150 -ipady 20 -expand yes + pack $laborgD $labbrw2 -side left -fill both + + +} + +proc VMDecoder::_paramsD { parent } { + + variable var + + ########### DECODING ############# + set labcod [LabelFrame $parent.labcod -side top -anchor w -relief sunken -borderwidth 1] + set subcod [$labcod getframe] + + set frameres [frame $subcod.frameres -borderwidth 1] + set labres [LabelEntry $frameres.labres -label "Resolutions to discard: " -labelwidth 20 -labelanchor w \ + -textvariable VMDecoder::var(resdiscard) -editable 1 \ + -helptext "Number of highest resolution levels to be discarded on each dimension" ] + set VMDecoder::var(resdiscard) "0,0,0" + + set framelayer [frame $subcod.framelayer -borderwidth 1] + set lablayer [LabelEntry $framelayer.lablayer -label "Layers to decode: " -labelwidth 20 -labelanchor w \ + -textvariable VMDecoder::var(layer) -editable 1 \ + -helptext "Maximum number of quality layers to decode" ] + set VMDecoder::var(layer) "All" + + set framebe [frame $subcod.framebe -borderwidth 1] + set chkbe [checkbutton $framebe.chkbe -text "Write decoded file with BigEndian byte order" \ + -variable VMDecoder::var(be) -onvalue 1 -offvalue 0 ] + + pack $labres -side left -padx 2 -anchor n + pack $lablayer -side left -padx 2 -anchor n + pack $chkbe -side left -padx 2 -anchor w + pack $frameres $framelayer $framebe -side top -anchor w + + pack $subcod -anchor n + pack $labcod -side left -fill both -padx 4 -expand yes +} + + +proc VMDecoder::_decode { framesrc framedst frameinfo} { + + variable var + + set sourceD [$framesrc.labsrcD.f.entrysrcD get ] + set destinationD [$framedst.labdstD.f.entrydstD get ] + set originD [$frameinfo.laborgD.f.entryorgD get ] + set cond1 [string match *.pgx [string tolower $destinationD]] + set cond2 [string match *\**.pgx [string tolower $destinationD]] + set cond3 [string match *.bin [string tolower $destinationD]] + + #comprobamos datos son correctos + if {($cond1 == 1) && ($cond2 == 0)} { + set pgx "*.pgx" + set pattern [string range $destinationD 0 [expr [string length $destinationD]-5]] + set destinationD $pattern$img + } elseif {$sourceD == ""} { + MessageDlg .msgdlg -parent . -message "Error : Source file is not defined !" -type ok -icon error + } elseif {$destinationD == ""} { + MessageDlg .msgdlg -parent . -message "Error : Destination file is not defined !" -type ok -icon error + } else { + + #creamos datain a partir de los parametros de entrada + #set dirJP3Ddecoder [mk_relativepath $VMDecoder::JP3Ddecoder] + set dirJP3Ddecoder $VMDecoder::JP3Ddecoder + set datain [concat " $dirJP3Ddecoder -i [mk_relativepath $sourceD] "] + set datain [concat " $datain -o [mk_relativepath $destinationD] "] + if {$originD != ""} { + set datain [concat " $datain -O [mk_relativepath $originD] "] + if {$cond3 == 1} { + set img ".img" + set pattern [string range $originD 0 [expr [string length $originD]-5]] + set pattern $pattern$img + if {[file exists $pattern]} { + set datain [concat " $datain -m [mk_relativepath $pattern] "] + } else { + MessageDlg .msgdlg -parent . -message "Error : IMG file associated to original BIN volume file not found in same directory !" -type ok -icon info + } + } + } + if {$VMDecoder::var(resdiscard) != "0,0,0"} { + set datain [concat " $datain -r $VMDecoder::var(resdiscard) "] + } + if {$VMDecoder::var(layer) != "All" && $VMDecoder::var(layer) > 0} { + set datain [concat " $datain -l $VMDecoder::var(layer) "] + } + if {$VMDecoder::var(be) == 1} { + set datain [concat " $datain -BE"] + } + + set VMDecoder::var(progval) 10 + ProgressDlg .progress -parent . -title "Wait..." \ + -type infinite \ + -width 20 \ + -textvariable "Compute in progress..."\ + -variable VMDecoder::progval \ + -stop "Stop" \ + -command {destroy .progress} + + after 200 set VMDecoder::var(progval) 2 + + set fp [open "| $datain " r+] + fconfigure $fp -buffering line + set jp3dVM::dataout [concat "EXECUTED PROGRAM:\n\t$datain"] + while {-1 != [gets $fp tmp]} { + set jp3dVM::dataout [concat "$jp3dVM::dataout\n$tmp"] + } + close $fp + destroy .progress + set cond [string first "ERROR" $jp3dVM::dataout] + set cond2 [string first "PSNR" $jp3dVM::dataout] + set cond3 [string first "RESULT" $jp3dVM::dataout] + if {$cond != -1} { + MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond-1] end] -type ok -icon error + } elseif {$cond3 != -1} { + if {$cond2 != -1} { + set VMDecoder::var(decodinfo) [string range $jp3dVM::dataout [expr $cond2-1] end] + } + MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond3-1] end] -type ok -icon info + } + } +} + +proc VMDecoder::_save { frameinfo } { + +} + diff --git a/contrib/menuetlibc/openjpeg/jp3d/tcltk/encoder.tcl b/contrib/menuetlibc/openjpeg/jp3d/tcltk/encoder.tcl new file mode 100755 index 0000000000..dc174b7162 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jp3d/tcltk/encoder.tcl @@ -0,0 +1,470 @@ + +namespace eval VMEncoder { + variable var + variable JP3Dencoder "../bin/jp3d_vm_enc.exe" +} + +proc VMEncoder::create { nb } { + + set frame [$nb insert end VMEncoder -text "Encoder"] + set topf [frame $frame.topf] + set midf [frame $frame.midf] + set bottomf [frame $frame.bottomf] + set srcf [TitleFrame $topf.srcf -text "Source"] + set dstf [TitleFrame $topf.dstf -text "Destination"] + set Tparf [TitleFrame $midf.parfT -text "Transform Parameters"] + set Cparf [TitleFrame $midf.parfC -text "Coding Parameters"] + + set frame1 [$srcf getframe] + VMEncoder::_sourceE $frame1 + + set frame2 [$dstf getframe] + VMEncoder::_destinationE $frame2 + + set frame3 [$Tparf getframe] + VMEncoder::_transformE $frame3 + + set frame4 [$Cparf getframe] + VMEncoder::_codingE $frame4 + + set butE [Button $bottomf.butE -text "Encode!" \ + -command "VMEncoder::_encode $frame1 $frame2" \ + -helptext "Encoding trigger button"] + set butR [Button $bottomf.butR -text "Restore defaults" \ + -command "VMEncoder::_reset $frame1 $frame2 $frame3 $frame4" \ + -helptext "Reset to default values"] + + pack $srcf $dstf -side left -fill y -padx 4 -expand yes + pack $topf -pady 2 -fill x + + pack $Tparf $Cparf -side left -fill both -padx 4 -expand yes + pack $midf -pady 2 -fill x + + pack $butE $butR -side left -padx 40 -pady 5 -fill y -expand yes + pack $bottomf -pady 2 -fill x + + return $frame +} + +proc VMEncoder::_sourceE { parent } { + + variable var + + set labsrc [LabelFrame $parent.labsrc -text "Select volume file to encode: " -side top \ + -anchor w -relief flat -borderwidth 0] + set subsrc [$labsrc getframe] + set list [entry $subsrc.entrysrc -width 30 -textvariable VMDecoder::var(source)] + + set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0] + set subbrw [$labbrw getframe] + set butbrw [button $subbrw.butbrw -image [Bitmap::get open] \ + -relief raised -borderwidth 1 -padx 1 -pady 1 \ + -command "fileDialogE . $subsrc.entrysrc open"] + + pack $list -side top + pack $butbrw -side top + pack $labsrc $labbrw -side left -fill both -expand yes +} + +proc VMEncoder::_destinationE { parent } { + + variable var + + set labdst [LabelFrame $parent.labdst -text "Save compressed volume as: " -side top \ + -anchor w -relief flat -borderwidth 0] + set subdst [$labdst getframe] + set list [entry $subdst.entrydst -width 30 -textvariable VMDecoder::var(destination)] + + set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0] + set subbrw [$labbrw getframe] + set butbrw [button $subbrw.butbrw -image [Bitmap::get save] \ + -relief raised -borderwidth 1 -padx 1 -pady 1 \ + -command "fileDialogE . $subdst.entrydst save"] + + pack $list -side top + pack $butbrw -side top + pack $labdst $labbrw -side left -fill both -expand yes +} + +proc VMEncoder::_codingE { parent } { + + + ########### CODING ############# + set labcod [LabelFrame $parent.labcod -side top -anchor w -relief sunken -borderwidth 1] + set subcod [$labcod getframe] + + set framerate [frame $subcod.framerate -borderwidth 1] + set labrate [LabelEntry $framerate.labrate -label "Rates: " -labelwidth 9 -labelanchor w \ + -textvariable VMEncoder::var(rate) -editable 1 \ + -helptext "Compression ratios for different layers (R1, R2, R3,...). If R=1, lossless coding" ] + set VMEncoder::var(rate) "1" + + set framecblk [frame $subcod.framecblk -borderwidth 1] + set labcblk [LabelEntry $framecblk.labcblk -label "Codeblock: " -labelwidth 9 -labelanchor w \ + -textvariable VMEncoder::var(cblksize) -editable 1 \ + -helptext "Codeblock size (X, Y, Z)" ] + set VMEncoder::var(cblksize) "64,64,64" + + set frametile [frame $subcod.frametile -borderwidth 1] + set labtile [LabelEntry $frametile.labtile -label "Tile size: " -labelwidth 9 -labelanchor w \ + -textvariable VMEncoder::var(tilesize) -editable 1 \ + -helptext "Tile size (X, Y, Z)" ] + set VMEncoder::var(tilesize) "512,512,512" + + set framesop [frame $subcod.framesop -borderwidth 1] + set chksop [checkbutton $framesop.chksop -text "Write SOP marker" \ + -variable VMEncoder::var(sop) -onvalue 1 -offvalue 0 ] + set frameeph [frame $subcod.frameeph -borderwidth 1] + set chkeph [checkbutton $frameeph.chkeph -text "Write EPH marker" \ + -variable VMEncoder::var(eph) -onvalue 1 -offvalue 0 ] + + set framepoc [frame $subcod.framepoc -borderwidth 1] + set labpoc [label $framepoc.labpoc -text "Progression order: " ] + set progorder [ComboBox $framepoc.progorder \ + -text {Choose a progression order} \ + -width 10 \ + -textvariable VMEncoder::var(progorder) \ + -values {"LRCP" "RLCP" "RPCL" "PCRL" "CPRL"} \ + -helptext "Progression order"] + set VMEncoder::var(progorder) "LRCP" + + pack $labrate -side left -padx 2 -anchor n + pack $labcblk -side left -padx 2 -anchor n + pack $labpoc $progorder -side left -padx 2 -anchor w + #pack $labtile -side left -padx 2 -anchor n + pack $chksop -side left -padx 2 -anchor w + pack $chkeph -side left -padx 2 -anchor w + ########### ENTROPY CODING ############# + set labent [LabelFrame $parent.labent -text "Entropy Coding" -side top -anchor w -relief sunken -borderwidth 1] + set subent [$labent getframe] + foreach entval {2EB 3EB} entropy {2D_EBCOT 3D_EBCOT} { + set rad [radiobutton $subent.$entval \ + -text $entropy \ + -variable VMEncoder::var(encoding) \ + -command "disableGR $entval $labcblk $progorder $labrate $chksop $chkeph" \ + -value $entval ] + pack $rad -anchor w + } + $subent.2EB select + + pack $subent -padx 2 -anchor n + + pack $framerate $framecblk $framepoc $framesop $frameeph -side top -anchor w + pack $subcod -anchor n + + pack $labent $labcod -side left -fill both -padx 4 -expand yes + + +} + +proc VMEncoder::_transformE { parent } { + + variable var + + ########### TRANSFORM ############# + set labtrf [LabelFrame $parent.labtrf -text "Transform" -side top -anchor w -relief sunken -borderwidth 1] + set subtrf [$labtrf getframe] + set labres [LabelFrame $parent.labres -side top -anchor w -relief sunken -borderwidth 1] + set subres [$labres getframe] + + ########### ATK ############# + set frameatk [frame $subres.frameatk -borderwidth 1] + set labatk [label $frameatk.labatk -text "Wavelet kernel: " -anchor w] + set atk [ComboBox $frameatk.atk \ + -textvariable VMEncoder::var(atk) \ + -width 20 \ + -text {Choose a wavelet kernel} \ + -editable false \ + -values {"R5.3" "I9.7"} ] + set VMEncoder::var(atk) "R5.3" + pack $labatk $atk -side left -anchor w + ########### RESOLUTIONS ############# + set frameres1 [frame $subres.frameres1 -borderwidth 1] + set labresolution [label $frameres1.labresol -text "Resolutions: " -anchor w ] + set frameres2 [frame $subres.frameres2 -borderwidth 1] + set labresX [label $frameres2.labresX -text " X" -anchor w ] + set labresY [label $frameres2.labresY -text " Y" -anchor w ] + set labresZ [label $frameres2.labresZ -text " Z" -anchor w ] + + + set resX [SpinBox $frameres2.spinresX \ + -range {1 6 1} -textvariable VMEncoder::var(resX) \ + -helptext "Number of resolutions in X" \ + -width 3 \ + -editable false ] + set resY [SpinBox $frameres2.spinresY \ + -range {1 6 1} -textvariable VMEncoder::var(resY) \ + -helptext "Number of resolutions in Y" \ + -width 3 \ + -editable false ] + set resZ [SpinBox $frameres2.spinresZ \ + -range {1 6 1} -textvariable VMEncoder::var(resZ) \ + -helptext "Number of resolutions in Z" \ + -width 3 \ + -editable false \ + -state disabled ] + set VMEncoder::var(resX) 3 + set VMEncoder::var(resY) 3 + set VMEncoder::var(resZ) 3 + + ########### TRF ############# + foreach trfval {2DWT 3DWT} trf {2D-DWT 3D-DWT} { + set rad [radiobutton $subtrf.$trfval -text $trf \ + -variable VMEncoder::var(transform) \ + -command "disable3RLS $trfval $atk $resX $resY $resZ"\ + -value $trfval ] + pack $rad -anchor w + } + $subtrf.2DWT select + + pack $subtrf -side left -padx 2 -pady 4 + + pack $labresolution -padx 2 -side left -anchor w + pack $labresX $resX -padx 2 -side left -anchor w + pack $labresY $resY -padx 2 -side left -anchor w + pack $labresZ $resZ -padx 2 -side left -anchor w + + pack $frameres1 -side top -fill x + pack $frameres2 $frameatk -side top -padx 2 -pady 4 -anchor n + + pack $subres -side left -padx 2 -pady 4 + pack $labtrf $labres -side left -fill both -padx 4 -expand yes +} + + +proc VMEncoder::_encode { framesrc framedst } { + + variable var + + set source [$framesrc.labsrc.f.entrysrc get ] + set destination [$framedst.labdst.f.entrydst get ] + set cond1 [string match *.pgx [string tolower $source]] + set cond2 [string match *-*.pgx [string tolower $source]] + set cond3 [string match *.bin [string tolower $source]] + + set img ".img" + set pattern [string range $source 0 [expr [string length $source]-5]] + set pattern $pattern$img + set exist [file exists $pattern] + + #comprobamos datos son correctos + if {($cond1 == 1) && ($cond2 == 0)} { + MessageDlg .msgdlg -parent . -message "Info : Really want to encode an slice instead of a volume?.\n For a group of .pgx slices, name must contain a - denoting a sequential index!" -type ok -icon info + } + + if {$source == ""} { + MessageDlg .msgdlg -parent . -message "Error : Source file is not defined !" -type ok -icon error + } elseif {$destination == ""} { + MessageDlg .msgdlg -parent . -message "Error : Destination file is not defined !" -type ok -icon error + } elseif { ($VMEncoder::var(transform) != "3RLS") && ($VMEncoder::var(atk) == "Choose a wavelet transformation kernel") } { + MessageDlg .msgdlg -parent . -title "Info" -message "Please choose a wavelet transformation kernel"\ + -type ok -icon warning + } elseif {($exist == 0) && ($cond1 == 0) && ($cond3 == 1)} { + MessageDlg .msgdlg -parent . -message "Error : IMG file associated to BIN volume file not found in same directory !" -type ok -icon info + } else { + + #creamos datain a partir de los parametros de entrada +# set dirJP3Dencoder [mk_relativepath $VMEncoder::JP3Dencoder] + set dirJP3Dencoder $VMEncoder::JP3Dencoder + set datain [concat " $dirJP3Dencoder -i [mk_relativepath $source] "] + if {$cond3 == 1} { + set datain [concat " $datain -m [mk_relativepath $pattern] "] + } + set datain [concat " $datain -o [mk_relativepath $destination] "] + if {$VMEncoder::var(encoding) != "2EB"} { + set datain [concat " $datain -C $VMEncoder::var(encoding) "] + } + if {$VMEncoder::var(transform) == "2DWT"} { + set datain [concat " $datain -n $VMEncoder::var(resX),$VMEncoder::var(resY) "] + } elseif {$VMEncoder::var(transform) == "3DWT"} { + set datain [concat " $datain -n $VMEncoder::var(resX),$VMEncoder::var(resY),$VMEncoder::var(resZ) "] + } + + set datain [concat " $datain -r $VMEncoder::var(rate) "] + + if {$VMEncoder::var(atk) == "I9.7"} { + set datain [concat " $datain -I "] + } + if {$VMEncoder::var(sop) == 1} { + set datain [concat " $datain -SOP "] + } + if {$VMEncoder::var(eph) == 1} { + set datain [concat " $datain -EPH "] + } + if {$VMEncoder::var(progorder) != "LRCP"} { + set datain [concat " $datain -p $VMEncoder::var(progorder) "] + } + if {$VMEncoder::var(cblksize) != "64,64,64"} { + set datain [concat " $datain -b $VMEncoder::var(cblksize) "] + } + + + #Making this work would be great !!! + set VMEncoder::var(progval) 10 + ProgressDlg .progress -parent . -title "Wait..." \ + -type infinite \ + -width 20 \ + -textvariable "Compute in progress..."\ + -variable VMEncoder::progval \ + -stop "Stop" \ + -command {destroy .progress} + after 200 set VMEncoder::var(progval) 2 + set fp [open "| $datain " r+] + fconfigure $fp -buffering line + set jp3dVM::dataout [concat "EXECUTED PROGRAM:\n\t$datain"] + while {-1 != [gets $fp tmp]} { + set jp3dVM::dataout [concat "$jp3dVM::dataout\n$tmp"] + } + destroy .progress + set cond [string first "ERROR" $jp3dVM::dataout] + set cond2 [string first "RESULT" $jp3dVM::dataout] + if {$cond != -1} { + MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond-1] end] -type ok -icon error + } elseif {$cond2 != -1} { + MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond2+7] end] -type ok -icon info + close $fp + } else { + #Must do something with this !!! [pid $fp] + close $fp + } + } +} + +proc VMEncoder::_reset { framesrc framedst frametrf framecod} { + + variable var + + #Restore defaults values + set VMEncoder::var(transform) 2DWT + set VMEncoder::var(encoding) 2EB + set VMEncoder::var(atk) "R5.3" + set VMEncoder::var(progorder) "LRCP" + set atk $frametrf.labres.f.frameatk.atk + set resX $frametrf.labres.f.frameres2.spinresX + set resY $frametrf.labres.f.frameres2.spinresY + set resZ $frametrf.labres.f.frameres2.spinresZ + disable3RLS 2DWT $atk $resX $resY $resZ + set labcblk $framecod.labcod.f.framecblk.labcblk + set progorder $framecod.labcod.f.framepoc.progorder + set labrate $framecod.labcod.f.framerate.labrate + set chksop $framecod.labcod.f.framesop.chksop + set chkeph $framecod.labcod.f.frameeph.chkeph + disableGR 3EB $labcblk $progorder $labrate $chksop $chkeph + + $framesrc.labsrc.f.entrysrc delete 0 end + $framedst.labdst.f.entrydst delete 0 end +} + +proc fileDialogE {w ent operation} { + + variable file + variable i j + + if {$operation == "open"} { + set types { + {"Source Image Files" {.pgx .bin} } + {"All files" *} + } + set file [tk_getOpenFile -filetypes $types -parent $w] + if {[string compare $file ""]} { + $ent delete 0 end + $ent insert end $file + $ent xview moveto 1 + } + } else { + set types { + {"JP3D Files" {.jp3d} } + {"JPEG2000 Files" {.j2k} } + {"All files" *} + } + set file [tk_getSaveFile -filetypes $types -parent $w \ + -initialfile Untitled -defaultextension .jp3d] + if {[string compare $file ""]} { + $ent delete 0 end + $ent insert end $file + $ent xview moveto 1 + } + } +} + +proc mk_relativepath {abspath} { + + set mydir [split [string trimleft [pwd] {/}] {/}] + set abspathcomps [split [string trimleft $abspath {/}] {/}] + + set i 0 + while {$i<[llength $mydir]} { + if {![string compare [lindex $abspathcomps $i] [lindex $mydir $i]]} { + incr i + } else { + break + } + } + set h [expr [llength $mydir]-$i] + set j [expr [llength $abspathcomps]-$i] + + if {!$h} { + set relpath "./" + } else { + set relpath "" + while { $h > 0 } { + set relpath "../$relpath" + incr h -1 + } + } + + set h [llength $abspathcomps] + while { $h > $i } { + set relpath [concat $relpath[lindex $abspathcomps [expr [llength $abspathcomps]-$j]]/] + incr h -1 + incr j -1 + } + return [string trim $relpath {/}] +} + +proc disable3RLS {flag atk resX resY resZ} { + + if {$flag == "3RLS"} { + $atk configure -state disabled + $resX configure -state disabled + $resY configure -state disabled + $resZ configure -state disabled + } elseif {$flag == "2DWT"} { + $atk configure -state normal + $resX configure -state normal + $resY configure -state normal + $resZ configure -state disabled + } elseif {$flag == "3DWT"} { + $atk configure -state normal + $resX configure -state normal + $resY configure -state normal + $resZ configure -state normal + } +} + +proc disableGR {flag labcblk progorder labrate chksop chkeph} { + + if {$flag == "2EB"} { + $labcblk configure -state normal + $progorder configure -state normal + $labrate configure -state normal + $chksop configure -state normal + $chkeph configure -state normal + set VMEncoder::var(cblksize) "64,64,64" + set VMEncoder::var(tilesize) "512,512,512" + } elseif {$flag == "3EB"} { + $labcblk configure -state normal + $progorder configure -state normal + $labrate configure -state normal + $chksop configure -state normal + $chkeph configure -state normal + set VMEncoder::var(cblksize) "64,64,64" + set VMEncoder::var(tilesize) "512,512,512" + } else { + $labcblk configure -state disabled + $progorder configure -state disabled + $labrate configure -state disabled + $chksop configure -state disabled + $chkeph configure -state disabled + } +} \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/jp3d/tcltk/logoLPI.gif b/contrib/menuetlibc/openjpeg/jp3d/tcltk/logoLPI.gif new file mode 100755 index 0000000000000000000000000000000000000000..df79515057f4163e12943482993fc337eafe2002 GIT binary patch literal 5212 zcmWmD`6CpK1IO{%d*|4hao>!il5>kFDMN~MO$VvuS<$UpdY;I zQc2?o>99IHU3wN3(NpUvQt^GhpFiO9)9W2Hd)DMBQOAIVz##DdaX1_x%F4>x+S3)8GBuV=F`v(LB%$PAFFfefD%$c)h%?b(%3JwmQJ$rUYNXVQy zbLP&SJ8#~+`Sa&5Sg?SisD%p`E?Tr`@#4ixmMjSk4GjwmTe@^fZTt4^3WZ|FjvYI9?%cI& z*Y4fB_w3oTckkYP`}WZ^osf`_n3$N9l%!ND_wV1IoSdAJl9HO5df>o;w6wJJ^z@93 zjDrUcW@ct)Wo4;Us_g9SLx&C>K79Ddkt0Ws9zAyK*zx1Xb8>P{oH%jvkiUA}zz z%9SfuuU`G@ufNo4b#ZZVNl8g*X=zzm*|lreu3x`?-O#26%`eC z?%b)Yth{^oF3Yl2RaMp1)ipIWwY9bP?%k`atE;cCZ)j+^fB$}CW8;Gd4<0^z_~_B2 z$B!R3H8p88n&#%_Cr_R{efsp-vuDqrKW}Mi`TOs`U%Ytn^5x4{uU@@={rb(DH?6I$ zZ{NQC=bwMHT5VffTYGzZM@PrIckkZ6fB)gbhtAHoH1z%Z_u=8;A3uKl{Q2|OuU{i0 zBcr3EF8?p!|1ALG5nvRw3|2E$Nn!)1hz9kUniSkVBsaJ?|6aPO$A*foEd}*igy=Ev z?<*GNah;D7UMD|#b#2p|@=c{$%XEJjK5BqQObd?{PQL9S57u)6{*!&H7*W~-k%@$ ziynLsc7DHcOmof1xPc(|oFmxI>H{X?c?V&iXMJtAkN;J0cklP^`$^-PtSi6wSCq~V z`N$m8OnaxOSv2WcpohfkWz6D(o=q-?k%^DVrw{kv%PlaRy8kkzbn2(xHBBGr^`QKQ zG`uFC?y~+&-@fw0=oIa`8p1O-bcR^uN5nS}nd|ZojL9^u4zk+vuu4QE0P#TiJ6TA)Y|TUNr>bB@!(5YKxj#^>RKU1^AJ;MaBv&HisT9$_puVsk*JmrF^5z*iRRY;P&;YuHE3t!hNZvHs5C zwY}MXPadl4d=5sipBrrK9U7{o>6RpSwxWN&WskAzmIvU=zLKZ4sFpNsi|MTk>ig6j zFyWUXdL~CI+N04d$%-Wf`CT0gJe}9&dKFXl4qx90%7KiLsVmjJdeX5Dhfe#IFVStS zS!1F6_NEV#0mjxNHBGh#IICzCwa)wFR;tz@%XEXH5VQ1*uwP^Z;#OPQ1+I_FZ}S!G zoNc2+GY(?H^OX}n2-ko9og-b>pXIyyNU@$@nTkCyoo{?8siX{Z zH4o48`Xcy__5-Gh{CwXvief#VP@FU0e}G8bGVq~0?;9|YmiU>7#kxBWmRJCW70uZS zWtGCLH)z}}7J4PAwP_vl|BNra+Z`(5WR=(ZCpUBXKixMhPC5a2v9QrEp7rv{NwZpt zlbp*th!GuM*ia|^C{gar;6-}j0a<~8?5>fSJRAR7?-E{w?XFQpy-~F;H|eR%Q-NP2#hu5gsIaz85O)ZH`T9vf^tf&z3orU zOlV#CEvWMGvH*6L0sI7;Pif^YJZ&RiMf<*qBfhX)6XE#mJ+f;4lkn7Oz!~8A`d*ue z-(LZCI&im((sD^x3~n@KBBxMmI**@%Hqd%;e1A;RoQyJ^6Z{^#0z%X3Ne%uFSD7ES z{HO_X3np%~7MDbE*U`4DBTi+=j7(kzIcx?FCTlzNl6&kMK8>qJ-f45Y=5|imrB%8; z1C~ms7LZR&-MP<*!~BuB6hpNNO&>}!^Ej^@Z?OnU`Hz{xWXxNs4p47&obxZc#5 zk{&uaaIQDtLWtEY&Z4<-Hpxtar@R~AnNtO(B&PZ$b9j-%hUdeLHi+Nv2b|6q5U&(f zHlE>ns!B3VKRde&rl$?eFtk)hM41fpf~oe>UD5!4q{-490xhpLXVvr}aw@@X!3>d{_G)(v6@K)=N+WrJ0IPw+K zTFqmOpqv%!TPFc`CN*0{Y65)nF5&weY6Pc(uLcfqQib%|+?hS$HJ4YY;&K1m=<0WN zs-dhssa%2SwT9`RZMrG(^Q+Cp4)}rbeI5D}!|P_Yw+S5s zL+#%Kv9ofC=p@>H}g&Yq7UdCLReXw5gE$yFA;ttj|Yz->$%Y#IHLp zb5VpW#vZTbqc>J^mH>veR^n+x6hAI!itXp~0mfa$*2&DxC?Cf_JAJ)W&o|5oNx=-S z9IDPKNxhP%4)6o35wmseP2%1l*D%%D0QYwqawQ-gii5JRUn=8h0H>3wS(ByymLqe6 zjM{a;Dl947F7Y5GbpAuxyW7fd!bD+ z!I5Ci8ApioFWgC}cIj~3Cm4eE?oi$d!ZN3Qphq$OfmajFfye`WOB zs~F)AhBw_ZU{xs#Oluwpz#t=>y>xyxAbPu3Hfb}Js+v=4>gjl|%)k2J7=kI}IRYjc zfBd4sCFH#Go^f*7Y-Y4w0cGerdY*X4-XzY4a{57h*7vm%|*j=CF0WZc{*t~}=#$Ia#4%7x4 zA?&Pyo6hMC)6mhHl?IHs`#pWJ4Lb+$Jy`J0*q~O1zgN1rrx{(s0^x>$nB=$8xLvB= z2#rirt1&Z2e2@@JX-Q=ZR<7n+^8o?D$yKeDDE684qVa%p z*md}_CSd#30G|LvfZ)_Ne9HNx#}pSN0YoGEgu`p|p)PGQ z9)*p>%XrTi`6wfCl>?xPQ^epqQuT(VVgnuErh?YXcu8uBMKgAf<)#4JdWx}3IR~c% zDe)$Q&Dbwp+C1sRjRf|cuo+aPkM`OO%CN5_){kclkl5YHSTBI-bZ8fi_OP%M0~oN} z2nPPjBnuMI6iw*yc{gB$+RAk->#(uP+|7tQP_M!hWXcvjL<7fwk zevqLZI0`+{Z;?q_8Du)aQBk&aTKKvax~PT9bkG%wXJ5*j!xgQQ3S-p5ctW&=7DlNA zp)7xO8-KA>5QYnabUYuL=Pl)V5IkoUN1_?wT~Q^P+rs8L!Ce}z(I6K32)G`)O2K6+ z_@)-hqrn_GcuWQ!m4in#;$)p@w_LPGC)!7d_tB!Q8sU0M7|jT`=!9~$aJ^i(nh^e` z6RejCc+1?K7_KwRb=7g*HC$IMcLK#7!*V?t9!c;6iqjZz1`eLYp>s5J7JyD_zycZggq$bvrjE%b+q3+o?Sj=>;bubg2Pul9 zPAPD41^}k1#kY2dGbr#h30)@Pat5xO0$-8Bcce%YDS1Ijn&bveGKrQ!byBRG1nou$ zUWy#PLn4iU59G+hSzNI9|XEp$BiYBZ?c2>RahqldQtpq1ZH@W(T~GeLLeo@uZJuK z)o_@GO9N@vPSzt@^n!**Qc$NX)$9!Rj1{@c1y#~BHBV9AbF817`a^#DD>-%JEUauX z)=OfyCt*&9uwEUilLc%HJIIa77?6d`OfwvkV#^)zA^GXslZyHQxoH%dN%EG+Ved{H zIEnvaut8nA4nXteJa0MlX)Io>68=NrUv%OT_ZujqMXs~kM;WB~gyiJ}fn16QbQnjXy^nBodckJIaDZx3UMfx1eI#h@1$t8mS<0k zo|3B?Y5wMZ?50x@DCkWDuuYs=wS*e(##tr z#Xr?(5rB=#krbWS{Tb#w3ru?@;&HG;8tfefnb*P@1URN$-A6-|7^$X;O&*{s0)MR* zSI8xA>-9S2@Z0Zj4Q;CdBuxy`s7Bg9nrW%5pXHLV{^-Ntvz<8lPJ{9t!7+d^S%X~A zp|SL}_k@_Gp%wzK0FYZ0;>3j+ouq)mz8yf1tKe~k!tfthV<2*kMPB+tmuSfaIo6Jg zk2=E-Na*K#BteZ7;i2~_ah+OZ@I1d|WY?X$adxFCci!y6yUDr1RcMb64fe!7kr7te zSdRvMS%rPnpgppXVJ+IJjT*!;#X{^$PvUo}{k$^l%ZjsxUn_gG7r&=sT{QMfjh4Pg zQ?^@lv2nc&`ia~#D#N;2>|ea7*%pdnMEN?bc8BCTY!aK7F-Xi?!%NzY7<5ZCk|r(trU5UgVQz85M-m)WNiJ%z>mm4&*!$_4vZFetDuomxrSSXW@z9t=H93bO#_f@ z`7K_RU?q;`G0i*ajXea^tpzIxypD$Ns=@7L@DUO@KpQ@lLS3Y|{MDW1cb-SIKId=% HVCw$>l!K-J literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-convert.Po b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-convert.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-convert.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-getopt.Po b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-getopt.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-getopt.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-image_to_j2k.Po b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-image_to_j2k.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-image_to_j2k.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-index.Po b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-index.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_image_to_j2k-index.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-color.Po b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-color.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-color.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-convert.Po b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-convert.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-convert.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-getopt.Po b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-getopt.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-getopt.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-index.Po b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-index.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-index.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-j2k_to_image.Po b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-j2k_to_image.Po new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/JPWL_j2k_to_image-j2k_to_image.Po @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/bio.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/bio.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/bio.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/cio.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/cio.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/cio.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/crc.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/crc.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/crc.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/dwt.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/dwt.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/dwt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/event.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/event.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/event.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/image.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/image.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/image.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/j2k.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/j2k.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/j2k.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/j2k_lib.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/j2k_lib.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/j2k_lib.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/jp2.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/jp2.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/jp2.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/jpt.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/jpt.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/jpt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/jpwl.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/jpwl.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/jpwl.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/jpwl_lib.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/jpwl_lib.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/jpwl_lib.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/mct.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/mct.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/mct.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/mqc.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/mqc.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/mqc.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/openjpeg.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/openjpeg.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/openjpeg.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/pi.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/pi.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/pi.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/raw.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/raw.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/raw.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/rs.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/rs.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/rs.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/t1.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/t1.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/t1.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/t2.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/t2.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/t2.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/tcd.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/tcd.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/tcd.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/.deps/tgt.Plo b/contrib/menuetlibc/openjpeg/jpwl/.deps/tgt.Plo new file mode 100644 index 0000000000..9ce06a81ea --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/.deps/tgt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/contrib/menuetlibc/openjpeg/jpwl/CMakeLists.txt b/contrib/menuetlibc/openjpeg/jpwl/CMakeLists.txt new file mode 100755 index 0000000000..783921d7f1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/CMakeLists.txt @@ -0,0 +1,107 @@ +# Makefile for the main JPWL OpenJPEG codecs: JPWL_ j2k_to_image and JPWL_image_to_j2k + +ADD_DEFINITIONS(-DUSE_JPWL) + +SET(OPJ_SRCS +../libopenjpeg/bio.c +../libopenjpeg/cio.c +../libopenjpeg/dwt.c +../libopenjpeg/event.c +../libopenjpeg/image.c +../libopenjpeg/j2k.c +../libopenjpeg/j2k_lib.c +../libopenjpeg/jp2.c +../libopenjpeg/jpt.c +../libopenjpeg/mct.c +../libopenjpeg/mqc.c +../libopenjpeg/openjpeg.c +../libopenjpeg/pi.c +../libopenjpeg/raw.c +../libopenjpeg/t1.c +../libopenjpeg/t2.c +../libopenjpeg/tcd.c +../libopenjpeg/tgt.c +) +SET(JPWL_SRCS crc.c jpwl.c jpwl_lib.c rs.c) + +SET(common_SRCS "") +# If not getopt was found then add it to the lib: +IF(DONT_HAVE_GETOPT) + SET(common_SRCS ${OPENJPEG_SOURCE_DIR}/common/getopt.c) +ENDIF(DONT_HAVE_GETOPT) + +# Build the library +IF(WIN32) + IF(BUILD_SHARED_LIBS) + ADD_DEFINITIONS(-DOPJ_EXPORTS) + ELSE(BUILD_SHARED_LIBS) + ADD_DEFINITIONS(-DOPJ_STATIC) + ENDIF(BUILD_SHARED_LIBS) +ENDIF(WIN32) +ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}_JPWL ${JPWL_SRCS} ${OPJ_SRCS}) +SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JPWL PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES}) + +# Install library +INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}_JPWL + DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries +) + +# Build executables + +INCLUDE_DIRECTORIES( + ${OPENJPEG_SOURCE_DIR}/libopenjpeg + ${OPENJPEG_SOURCE_DIR}/common + ) + +IF(LCMS_INCLUDE_DIR) + INCLUDE_DIRECTORIES( ${LCMS_INCLUDE_DIR} ) +ENDIF(LCMS_INCLUDE_DIR) +IF(PNG_FOUND) + INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR}) +ENDIF(PNG_FOUND) +IF(TIFF_FOUND) + INCLUDE_DIRECTORIES(${TIFF_INCLUDE_DIR}) +ENDIF(TIFF_FOUND) + + +ADD_EXECUTABLE(JPWL_j2k_to_image +../codec/j2k_to_image.c +../codec/convert.c +../codec/index.c +${OPENJPEG_SOURCE_DIR}/common/color.c +${common_SRCS} +) + +TARGET_LINK_LIBRARIES(JPWL_j2k_to_image ${OPENJPEG_LIBRARY_NAME}_JPWL ${LCMS_LIB}) +IF(PNG_FOUND) + TARGET_LINK_LIBRARIES(JPWL_j2k_to_image ${PNG_LIBRARIES}) +ENDIF(PNG_FOUND) +IF(TIFF_FOUND) + TARGET_LINK_LIBRARIES(JPWL_j2k_to_image ${TIFF_LIBRARIES}) +ENDIF(TIFF_FOUND) +IF(UNIX) + TARGET_LINK_LIBRARIES(JPWL_j2k_to_image m) +ENDIF(UNIX) + + +ADD_EXECUTABLE(JPWL_image_to_j2k +../codec/convert.c +../codec/index.c +../codec/image_to_j2k.c +${common_SRCS} +) + +TARGET_LINK_LIBRARIES(JPWL_image_to_j2k ${OPENJPEG_LIBRARY_NAME}_JPWL ${LCMS_LIB}) +IF(PNG_FOUND) + TARGET_LINK_LIBRARIES(JPWL_image_to_j2k ${PNG_LIBRARIES}) +ENDIF(PNG_FOUND) +IF(TIFF_FOUND) + TARGET_LINK_LIBRARIES(JPWL_image_to_j2k ${TIFF_LIBRARIES}) +ENDIF(TIFF_FOUND) +IF(UNIX) + TARGET_LINK_LIBRARIES(JPWL_image_to_j2k m) +ENDIF(UNIX) + +INSTALL(TARGETS JPWL_image_to_j2k JPWL_j2k_to_image + DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Binaries +) diff --git a/contrib/menuetlibc/openjpeg/jpwl/JPWL_image_to_j2k.dsp b/contrib/menuetlibc/openjpeg/jpwl/JPWL_image_to_j2k.dsp new file mode 100644 index 0000000000..dfc30d307b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/JPWL_image_to_j2k.dsp @@ -0,0 +1,127 @@ +# Microsoft Developer Studio Project File - Name="JPWL_image_to_j2k" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=JPWL_image_to_j2k - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "JPWL_image_to_j2k.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "JPWL_image_to_j2k.mak" CFG="JPWL_image_to_j2k - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "JPWL_image_to_j2k - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "JPWL_image_to_j2k - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "JPWL_image_to_j2k - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /FR /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x80c /d "NDEBUG" +# ADD RSC /l 0x80c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib LibOpenJPEG_JPWL.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /machine:I386 /libpath:"Release" + +!ELSEIF "$(CFG)" == "JPWL_image_to_j2k - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /FR /FD /GZ /c +# ADD BASE RSC /l 0x80c /d "_DEBUG" +# ADD RSC /l 0x80c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib LibOpenJPEG_JPWLd.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcmtd.lib" /pdbtype:sept /libpath:"Debug" + +!ENDIF + +# Begin Target + +# Name "JPWL_image_to_j2k - Win32 Release" +# Name "JPWL_image_to_j2k - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\codec\convert.c +# End Source File +# Begin Source File + +SOURCE=..\codec\compat\getopt.c +# End Source File +# Begin Source File + +SOURCE=..\codec\image_to_j2k.c +# End Source File +# Begin Source File + +SOURCE=..\codec\index.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\codec\convert.h +# End Source File +# Begin Source File + +SOURCE=..\codec\compat\getopt.h +# End Source File +# Begin Source File + +SOURCE=..\codec\index.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\openjpeg.h +# End Source File +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/jpwl/JPWL_image_to_j2k.dsw b/contrib/menuetlibc/openjpeg/jpwl/JPWL_image_to_j2k.dsw new file mode 100644 index 0000000000..8487d5cb1c --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/JPWL_image_to_j2k.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "JPWL_image_to_j2k"=".\JPWL_image_to_j2k.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG_JPWL + End Project Dependency +}}} + +############################################################################### + +Project: "LibOpenJPEG_JPWL"=".\LibOpenJPEG_JPWL.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/jpwl/JPWL_j2k_to_image.dsp b/contrib/menuetlibc/openjpeg/jpwl/JPWL_j2k_to_image.dsp new file mode 100644 index 0000000000..a64d80c883 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/JPWL_j2k_to_image.dsp @@ -0,0 +1,135 @@ +# Microsoft Developer Studio Project File - Name="JPWL_j2k_to_image" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=JPWL_j2k_to_image - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "JPWL_j2k_to_image.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "JPWL_j2k_to_image.mak" CFG="JPWL_j2k_to_image - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "JPWL_j2k_to_image - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "JPWL_j2k_to_image - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "JPWL_j2k_to_image - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x80c /d "NDEBUG" +# ADD RSC /l 0x80c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "JPWL_j2k_to_image - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "JPWL_j2k_to_image___Win32_Debug" +# PROP BASE Intermediate_Dir "JPWL_j2k_to_image___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /YX /FD /GZ /c +# ADD BASE RSC /l 0x80c /d "_DEBUG" +# ADD RSC /l 0x80c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcmtd.lib" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "JPWL_j2k_to_image - Win32 Release" +# Name "JPWL_j2k_to_image - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\codec\convert.c +# End Source File +# Begin Source File + +SOURCE=..\codec\compat\getopt.c +# End Source File +# Begin Source File + +SOURCE=..\codec\index.c +# End Source File +# Begin Source File + +SOURCE=..\codec\j2k_to_image.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\codec\convert.h +# End Source File +# Begin Source File + +SOURCE=.\crc.h +# End Source File +# Begin Source File + +SOURCE=..\codec\compat\getopt.h +# End Source File +# Begin Source File + +SOURCE=..\codec\index.h +# End Source File +# Begin Source File + +SOURCE=.\jpwl.h +# End Source File +# Begin Source File + +SOURCE=.\rs.h +# End Source File +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/jpwl/JPWL_j2k_to_image.dsw b/contrib/menuetlibc/openjpeg/jpwl/JPWL_j2k_to_image.dsw new file mode 100644 index 0000000000..b964a6da06 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/JPWL_j2k_to_image.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "JPWL_j2k_to_image"=".\JPWL_j2k_to_image.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG_JPWL + End Project Dependency +}}} + +############################################################################### + +Project: "LibOpenJPEG_JPWL"=".\LibOpenJPEG_JPWL.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/jpwl/LibOpenJPEG_JPWL.dsp b/contrib/menuetlibc/openjpeg/jpwl/LibOpenJPEG_JPWL.dsp new file mode 100644 index 0000000000..d7bf7937d5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/LibOpenJPEG_JPWL.dsp @@ -0,0 +1,282 @@ +# Microsoft Developer Studio Project File - Name="LibOpenJPEG_JPWL" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=LibOpenJPEG_JPWL - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "LibOpenJPEG_JPWL.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "LibOpenJPEG_JPWL.mak" CFG="LibOpenJPEG_JPWL - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "LibOpenJPEG_JPWL - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "LibOpenJPEG_JPWL - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "LibOpenJPEG_JPWL - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "LibOpenJPEG_JPWL___Win32_Release" +# PROP BASE Intermediate_Dir "LibOpenJPEG_JPWL___Win32_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x80c /d "NDEBUG" +# ADD RSC /l 0x80c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "LibOpenJPEG_JPWL - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "LibOpenJPEG_JPWL___Win32_Debug" +# PROP BASE Intermediate_Dir "LibOpenJPEG_JPWL___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x80c /d "_DEBUG" +# ADD RSC /l 0x80c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"Debug\LibOpenJPEG_JPWLd.lib" + +!ENDIF + +# Begin Target + +# Name "LibOpenJPEG_JPWL - Win32 Release" +# Name "LibOpenJPEG_JPWL - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\libopenjpeg\bio.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\cio.c +# End Source File +# Begin Source File + +SOURCE=.\crc.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\dwt.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\event.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\image.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\j2k.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\j2k_lib.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\jp2.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\jpt.c +# End Source File +# Begin Source File + +SOURCE=.\jpwl.c +# End Source File +# Begin Source File + +SOURCE=.\jpwl_lib.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\mct.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\mqc.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\openjpeg.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\pi.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\raw.c +# End Source File +# Begin Source File + +SOURCE=.\rs.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\t1.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\t2.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\tcd.c +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\tgt.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\libopenjpeg\bio.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\cio.h +# End Source File +# Begin Source File + +SOURCE=.\crc.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\dwt.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\event.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\fix.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\image.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\int.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\j2k.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\j2k_lib.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\jp2.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\jpt.h +# End Source File +# Begin Source File + +SOURCE=.\jpwl.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\mct.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\mqc.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\openjpeg.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\opj_includes.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\opj_malloc.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\pi.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\raw.h +# End Source File +# Begin Source File + +SOURCE=.\rs.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\t1.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\t2.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\tcd.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\tgt.h +# End Source File +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/jpwl/Makefile b/contrib/menuetlibc/openjpeg/jpwl/Makefile new file mode 100644 index 0000000000..56fe4b551f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/Makefile @@ -0,0 +1,997 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# jpwl/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + + +pkgdatadir = $(datadir)/openjpeg-1.4.0 +pkgincludedir = $(includedir)/openjpeg-1.4.0 +pkglibdir = $(libdir)/openjpeg-1.4.0 +pkglibexecdir = $(libexecdir)/openjpeg-1.4.0 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +am__append_1 = +am__append_2 = -ltiff +am__append_3 = -I/usr/include/libpng12 +am__append_4 = -L/usr/lib/x86_64-linux-gnu -lpng12 +#am__append_5 = +#am__append_6 = +am__append_7 = -I/usr/include +am__append_8 = -llcms +bin_PROGRAMS = JPWL_j2k_to_image$(EXEEXT) JPWL_image_to_j2k$(EXEEXT) +am__append_9 = -DOPJ_EXPORTS +#am__append_10 = -DOPJ_STATIC +#am__append_11 = -static +subdir = jpwl +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libopenjpeg_JPWL_la_LIBADD = +am__objects_1 = crc.lo jpwl.lo jpwl_lib.lo rs.lo +am__objects_2 = bio.lo cio.lo dwt.lo event.lo image.lo j2k.lo \ + j2k_lib.lo jp2.lo jpt.lo mct.lo mqc.lo openjpeg.lo pi.lo \ + raw.lo t1.lo t2.lo tcd.lo tgt.lo $(am__objects_1) +am__objects_3 = +am__objects_4 = $(am__objects_3) +am_libopenjpeg_JPWL_la_OBJECTS = $(am__objects_2) $(am__objects_4) +libopenjpeg_JPWL_la_OBJECTS = $(am_libopenjpeg_JPWL_la_OBJECTS) +libopenjpeg_JPWL_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libopenjpeg_JPWL_la_LDFLAGS) $(LDFLAGS) -o $@ +PROGRAMS = $(bin_PROGRAMS) +am_JPWL_image_to_j2k_OBJECTS = JPWL_image_to_j2k-getopt.$(OBJEXT) \ + JPWL_image_to_j2k-index.$(OBJEXT) \ + JPWL_image_to_j2k-convert.$(OBJEXT) \ + JPWL_image_to_j2k-image_to_j2k.$(OBJEXT) +JPWL_image_to_j2k_OBJECTS = $(am_JPWL_image_to_j2k_OBJECTS) +JPWL_image_to_j2k_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +JPWL_image_to_j2k_DEPENDENCIES = ./libopenjpeg_JPWL.la \ + $(am__DEPENDENCIES_2) +JPWL_image_to_j2k_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +am_JPWL_j2k_to_image_OBJECTS = JPWL_j2k_to_image-getopt.$(OBJEXT) \ + JPWL_j2k_to_image-index.$(OBJEXT) \ + JPWL_j2k_to_image-convert.$(OBJEXT) \ + JPWL_j2k_to_image-color.$(OBJEXT) \ + JPWL_j2k_to_image-j2k_to_image.$(OBJEXT) +JPWL_j2k_to_image_OBJECTS = $(am_JPWL_j2k_to_image_OBJECTS) +JPWL_j2k_to_image_LDADD = $(LDADD) +JPWL_j2k_to_image_DEPENDENCIES = ./libopenjpeg_JPWL.la \ + $(am__DEPENDENCIES_2) +JPWL_j2k_to_image_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libopenjpeg_JPWL_la_SOURCES) $(JPWL_image_to_j2k_SOURCES) \ + $(JPWL_j2k_to_image_SOURCES) +DIST_SOURCES = $(libopenjpeg_JPWL_la_SOURCES) \ + $(JPWL_image_to_j2k_SOURCES) $(JPWL_j2k_to_image_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf +AUTOHEADER = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader +AUTOMAKE = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11 +AWK = mawk +BUILD_NR = 0 +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JP3D_BUILD_NR = 0 +JP3D_MAJOR_NR = 1 +JP3D_MINOR_NR = 3 +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBPNG_CONFIG = /usr/bin/libpng-config +LIBS = -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAJOR_NR = 1 +MAKEINFO = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo +MINOR_NR = 4 +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = openjpeg-1.4.0 +PACKAGE_BUGREPORT = http://code.google.com/p/openjpeg/ +PACKAGE_NAME = OpenJPEG +PACKAGE_STRING = OpenJPEG 1.4.0 +PACKAGE_TARNAME = openjpeg-1.4.0 +PACKAGE_URL = http://www.openjpeg.org/ +PACKAGE_VERSION = 1.4.0 +PATH_SEPARATOR = : +PKGCONFIG = /usr/bin/pkg-config +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 1.4.0 +abs_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/jpwl +abs_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/jpwl +abs_top_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_top_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh +jp3d_dir = +jpwl_dir = +lcms1includes = -I/usr/include +lcms1libs = -llcms +lcms2includes = +lcms2libs = +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pngincludes = -I/usr/include/libpng12 +pnglibs = -L/usr/lib/x86_64-linux-gnu -lpng12 +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +tiffincludes = +tifflibs = -ltiff +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +with_doxygen = no +MAJOR = 1 +MINOR = 4 +BUILD = 0 +CURRENT = `expr $(MAJOR) + $(MINOR)` +lib_LTLIBRARIES = libopenjpeg_JPWL.la +libopenjpeg_JPWL_la_LDFLAGS = -no-undefined -version-info \ + $(CURRENT):$(BUILD):$(MINOR) $(am__append_11) +JPWL_SRCS = crc.c jpwl.c jpwl_lib.c rs.c +JPWL_INCLS = jpwl.h crc.h rs.h +SRCS = ../libopenjpeg/bio.c ../libopenjpeg/cio.c ../libopenjpeg/dwt.c \ + ../libopenjpeg/event.c ../libopenjpeg/image.c ../libopenjpeg/j2k.c \ + ../libopenjpeg/j2k_lib.c ../libopenjpeg/jp2.c ../libopenjpeg/jpt.c \ + ../libopenjpeg/mct.c ../libopenjpeg/mqc.c ../libopenjpeg/openjpeg.c \ + ../libopenjpeg/pi.c ../libopenjpeg/raw.c ../libopenjpeg/t1.c \ + ../libopenjpeg/t2.c ../libopenjpeg/tcd.c ../libopenjpeg/tgt.c \ + $(JPWL_SRCS) + +INCLS = ../libopenjpeg/bio.h ../libopenjpeg/cio.h ../libopenjpeg/dwt.h \ + ../libopenjpeg/event.h ../libopenjpeg/fix.h ../libopenjpeg/image.h \ + ../libopenjpeg/int.h ../libopenjpeg/j2k.h ../libopenjpeg/j2k_lib.h \ + ../libopenjpeg/jp2.h ../libopenjpeg/jpt.h ../libopenjpeg/mct.h \ + ../libopenjpeg/mqc.h ../libopenjpeg/openjpeg.h ../libopenjpeg/pi.h \ + ../libopenjpeg/raw.h ../libopenjpeg/t1.h ../libopenjpeg/t2.h \ + ../libopenjpeg/tcd.h ../libopenjpeg/tgt.h ../libopenjpeg/opj_malloc.h \ + ../libopenjpeg/opj_includes.h \ + $(JPWL_INCLS) + +libopenjpeg_JPWL_la_SOURCES = $(SRCS) $(INCLS) + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix +COMPILERFLAGS = -Wall -ffast-math -std=c99 $(am__append_9) \ + $(am__append_10) +USERLIBS = $(am__append_2) $(am__append_4) $(am__append_6) \ + $(am__append_8) -lm +INCLUDES = -I.. -I. -I../libopenjpeg -I../common $(am__append_1) \ + $(am__append_3) $(am__append_5) $(am__append_7) +JPWL_j2k_to_image_CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL +JPWL_image_to_j2k_CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL +LDADD = ./libopenjpeg_JPWL.la $(USERLIBS) +JPWL_j2k_to_image_SOURCES = ../common/getopt.c ../codec/index.c \ + ../codec/convert.c ../common/color.c ../codec/j2k_to_image.c + +JPWL_image_to_j2k_SOURCES = ../common/getopt.c ../codec/index.c \ + ../codec/convert.c ../codec/image_to_j2k.c + +REPBIN = $(bin_PROGRAMS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign jpwl/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign jpwl/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libopenjpeg_JPWL.la: $(libopenjpeg_JPWL_la_OBJECTS) $(libopenjpeg_JPWL_la_DEPENDENCIES) + $(libopenjpeg_JPWL_la_LINK) -rpath $(libdir) $(libopenjpeg_JPWL_la_OBJECTS) $(libopenjpeg_JPWL_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +JPWL_image_to_j2k$(EXEEXT): $(JPWL_image_to_j2k_OBJECTS) $(JPWL_image_to_j2k_DEPENDENCIES) + @rm -f JPWL_image_to_j2k$(EXEEXT) + $(JPWL_image_to_j2k_LINK) $(JPWL_image_to_j2k_OBJECTS) $(JPWL_image_to_j2k_LDADD) $(LIBS) +JPWL_j2k_to_image$(EXEEXT): $(JPWL_j2k_to_image_OBJECTS) $(JPWL_j2k_to_image_DEPENDENCIES) + @rm -f JPWL_j2k_to_image$(EXEEXT) + $(JPWL_j2k_to_image_LINK) $(JPWL_j2k_to_image_OBJECTS) $(JPWL_j2k_to_image_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/JPWL_image_to_j2k-convert.Po +include ./$(DEPDIR)/JPWL_image_to_j2k-getopt.Po +include ./$(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Po +include ./$(DEPDIR)/JPWL_image_to_j2k-index.Po +include ./$(DEPDIR)/JPWL_j2k_to_image-color.Po +include ./$(DEPDIR)/JPWL_j2k_to_image-convert.Po +include ./$(DEPDIR)/JPWL_j2k_to_image-getopt.Po +include ./$(DEPDIR)/JPWL_j2k_to_image-index.Po +include ./$(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Po +include ./$(DEPDIR)/bio.Plo +include ./$(DEPDIR)/cio.Plo +include ./$(DEPDIR)/crc.Plo +include ./$(DEPDIR)/dwt.Plo +include ./$(DEPDIR)/event.Plo +include ./$(DEPDIR)/image.Plo +include ./$(DEPDIR)/j2k.Plo +include ./$(DEPDIR)/j2k_lib.Plo +include ./$(DEPDIR)/jp2.Plo +include ./$(DEPDIR)/jpt.Plo +include ./$(DEPDIR)/jpwl.Plo +include ./$(DEPDIR)/jpwl_lib.Plo +include ./$(DEPDIR)/mct.Plo +include ./$(DEPDIR)/mqc.Plo +include ./$(DEPDIR)/openjpeg.Plo +include ./$(DEPDIR)/pi.Plo +include ./$(DEPDIR)/raw.Plo +include ./$(DEPDIR)/rs.Plo +include ./$(DEPDIR)/t1.Plo +include ./$(DEPDIR)/t2.Plo +include ./$(DEPDIR)/tcd.Plo +include ./$(DEPDIR)/tgt.Plo + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +bio.lo: ../libopenjpeg/bio.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bio.lo -MD -MP -MF $(DEPDIR)/bio.Tpo -c -o bio.lo `test -f '../libopenjpeg/bio.c' || echo '$(srcdir)/'`../libopenjpeg/bio.c + $(am__mv) $(DEPDIR)/bio.Tpo $(DEPDIR)/bio.Plo +# source='../libopenjpeg/bio.c' object='bio.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bio.lo `test -f '../libopenjpeg/bio.c' || echo '$(srcdir)/'`../libopenjpeg/bio.c + +cio.lo: ../libopenjpeg/cio.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cio.lo -MD -MP -MF $(DEPDIR)/cio.Tpo -c -o cio.lo `test -f '../libopenjpeg/cio.c' || echo '$(srcdir)/'`../libopenjpeg/cio.c + $(am__mv) $(DEPDIR)/cio.Tpo $(DEPDIR)/cio.Plo +# source='../libopenjpeg/cio.c' object='cio.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cio.lo `test -f '../libopenjpeg/cio.c' || echo '$(srcdir)/'`../libopenjpeg/cio.c + +dwt.lo: ../libopenjpeg/dwt.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dwt.lo -MD -MP -MF $(DEPDIR)/dwt.Tpo -c -o dwt.lo `test -f '../libopenjpeg/dwt.c' || echo '$(srcdir)/'`../libopenjpeg/dwt.c + $(am__mv) $(DEPDIR)/dwt.Tpo $(DEPDIR)/dwt.Plo +# source='../libopenjpeg/dwt.c' object='dwt.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dwt.lo `test -f '../libopenjpeg/dwt.c' || echo '$(srcdir)/'`../libopenjpeg/dwt.c + +event.lo: ../libopenjpeg/event.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT event.lo -MD -MP -MF $(DEPDIR)/event.Tpo -c -o event.lo `test -f '../libopenjpeg/event.c' || echo '$(srcdir)/'`../libopenjpeg/event.c + $(am__mv) $(DEPDIR)/event.Tpo $(DEPDIR)/event.Plo +# source='../libopenjpeg/event.c' object='event.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o event.lo `test -f '../libopenjpeg/event.c' || echo '$(srcdir)/'`../libopenjpeg/event.c + +image.lo: ../libopenjpeg/image.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT image.lo -MD -MP -MF $(DEPDIR)/image.Tpo -c -o image.lo `test -f '../libopenjpeg/image.c' || echo '$(srcdir)/'`../libopenjpeg/image.c + $(am__mv) $(DEPDIR)/image.Tpo $(DEPDIR)/image.Plo +# source='../libopenjpeg/image.c' object='image.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o image.lo `test -f '../libopenjpeg/image.c' || echo '$(srcdir)/'`../libopenjpeg/image.c + +j2k.lo: ../libopenjpeg/j2k.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT j2k.lo -MD -MP -MF $(DEPDIR)/j2k.Tpo -c -o j2k.lo `test -f '../libopenjpeg/j2k.c' || echo '$(srcdir)/'`../libopenjpeg/j2k.c + $(am__mv) $(DEPDIR)/j2k.Tpo $(DEPDIR)/j2k.Plo +# source='../libopenjpeg/j2k.c' object='j2k.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o j2k.lo `test -f '../libopenjpeg/j2k.c' || echo '$(srcdir)/'`../libopenjpeg/j2k.c + +j2k_lib.lo: ../libopenjpeg/j2k_lib.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT j2k_lib.lo -MD -MP -MF $(DEPDIR)/j2k_lib.Tpo -c -o j2k_lib.lo `test -f '../libopenjpeg/j2k_lib.c' || echo '$(srcdir)/'`../libopenjpeg/j2k_lib.c + $(am__mv) $(DEPDIR)/j2k_lib.Tpo $(DEPDIR)/j2k_lib.Plo +# source='../libopenjpeg/j2k_lib.c' object='j2k_lib.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o j2k_lib.lo `test -f '../libopenjpeg/j2k_lib.c' || echo '$(srcdir)/'`../libopenjpeg/j2k_lib.c + +jp2.lo: ../libopenjpeg/jp2.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT jp2.lo -MD -MP -MF $(DEPDIR)/jp2.Tpo -c -o jp2.lo `test -f '../libopenjpeg/jp2.c' || echo '$(srcdir)/'`../libopenjpeg/jp2.c + $(am__mv) $(DEPDIR)/jp2.Tpo $(DEPDIR)/jp2.Plo +# source='../libopenjpeg/jp2.c' object='jp2.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jp2.lo `test -f '../libopenjpeg/jp2.c' || echo '$(srcdir)/'`../libopenjpeg/jp2.c + +jpt.lo: ../libopenjpeg/jpt.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT jpt.lo -MD -MP -MF $(DEPDIR)/jpt.Tpo -c -o jpt.lo `test -f '../libopenjpeg/jpt.c' || echo '$(srcdir)/'`../libopenjpeg/jpt.c + $(am__mv) $(DEPDIR)/jpt.Tpo $(DEPDIR)/jpt.Plo +# source='../libopenjpeg/jpt.c' object='jpt.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jpt.lo `test -f '../libopenjpeg/jpt.c' || echo '$(srcdir)/'`../libopenjpeg/jpt.c + +mct.lo: ../libopenjpeg/mct.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mct.lo -MD -MP -MF $(DEPDIR)/mct.Tpo -c -o mct.lo `test -f '../libopenjpeg/mct.c' || echo '$(srcdir)/'`../libopenjpeg/mct.c + $(am__mv) $(DEPDIR)/mct.Tpo $(DEPDIR)/mct.Plo +# source='../libopenjpeg/mct.c' object='mct.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mct.lo `test -f '../libopenjpeg/mct.c' || echo '$(srcdir)/'`../libopenjpeg/mct.c + +mqc.lo: ../libopenjpeg/mqc.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mqc.lo -MD -MP -MF $(DEPDIR)/mqc.Tpo -c -o mqc.lo `test -f '../libopenjpeg/mqc.c' || echo '$(srcdir)/'`../libopenjpeg/mqc.c + $(am__mv) $(DEPDIR)/mqc.Tpo $(DEPDIR)/mqc.Plo +# source='../libopenjpeg/mqc.c' object='mqc.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mqc.lo `test -f '../libopenjpeg/mqc.c' || echo '$(srcdir)/'`../libopenjpeg/mqc.c + +openjpeg.lo: ../libopenjpeg/openjpeg.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT openjpeg.lo -MD -MP -MF $(DEPDIR)/openjpeg.Tpo -c -o openjpeg.lo `test -f '../libopenjpeg/openjpeg.c' || echo '$(srcdir)/'`../libopenjpeg/openjpeg.c + $(am__mv) $(DEPDIR)/openjpeg.Tpo $(DEPDIR)/openjpeg.Plo +# source='../libopenjpeg/openjpeg.c' object='openjpeg.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o openjpeg.lo `test -f '../libopenjpeg/openjpeg.c' || echo '$(srcdir)/'`../libopenjpeg/openjpeg.c + +pi.lo: ../libopenjpeg/pi.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pi.lo -MD -MP -MF $(DEPDIR)/pi.Tpo -c -o pi.lo `test -f '../libopenjpeg/pi.c' || echo '$(srcdir)/'`../libopenjpeg/pi.c + $(am__mv) $(DEPDIR)/pi.Tpo $(DEPDIR)/pi.Plo +# source='../libopenjpeg/pi.c' object='pi.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pi.lo `test -f '../libopenjpeg/pi.c' || echo '$(srcdir)/'`../libopenjpeg/pi.c + +raw.lo: ../libopenjpeg/raw.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT raw.lo -MD -MP -MF $(DEPDIR)/raw.Tpo -c -o raw.lo `test -f '../libopenjpeg/raw.c' || echo '$(srcdir)/'`../libopenjpeg/raw.c + $(am__mv) $(DEPDIR)/raw.Tpo $(DEPDIR)/raw.Plo +# source='../libopenjpeg/raw.c' object='raw.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o raw.lo `test -f '../libopenjpeg/raw.c' || echo '$(srcdir)/'`../libopenjpeg/raw.c + +t1.lo: ../libopenjpeg/t1.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1.lo -MD -MP -MF $(DEPDIR)/t1.Tpo -c -o t1.lo `test -f '../libopenjpeg/t1.c' || echo '$(srcdir)/'`../libopenjpeg/t1.c + $(am__mv) $(DEPDIR)/t1.Tpo $(DEPDIR)/t1.Plo +# source='../libopenjpeg/t1.c' object='t1.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1.lo `test -f '../libopenjpeg/t1.c' || echo '$(srcdir)/'`../libopenjpeg/t1.c + +t2.lo: ../libopenjpeg/t2.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t2.lo -MD -MP -MF $(DEPDIR)/t2.Tpo -c -o t2.lo `test -f '../libopenjpeg/t2.c' || echo '$(srcdir)/'`../libopenjpeg/t2.c + $(am__mv) $(DEPDIR)/t2.Tpo $(DEPDIR)/t2.Plo +# source='../libopenjpeg/t2.c' object='t2.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t2.lo `test -f '../libopenjpeg/t2.c' || echo '$(srcdir)/'`../libopenjpeg/t2.c + +tcd.lo: ../libopenjpeg/tcd.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tcd.lo -MD -MP -MF $(DEPDIR)/tcd.Tpo -c -o tcd.lo `test -f '../libopenjpeg/tcd.c' || echo '$(srcdir)/'`../libopenjpeg/tcd.c + $(am__mv) $(DEPDIR)/tcd.Tpo $(DEPDIR)/tcd.Plo +# source='../libopenjpeg/tcd.c' object='tcd.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tcd.lo `test -f '../libopenjpeg/tcd.c' || echo '$(srcdir)/'`../libopenjpeg/tcd.c + +tgt.lo: ../libopenjpeg/tgt.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tgt.lo -MD -MP -MF $(DEPDIR)/tgt.Tpo -c -o tgt.lo `test -f '../libopenjpeg/tgt.c' || echo '$(srcdir)/'`../libopenjpeg/tgt.c + $(am__mv) $(DEPDIR)/tgt.Tpo $(DEPDIR)/tgt.Plo +# source='../libopenjpeg/tgt.c' object='tgt.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tgt.lo `test -f '../libopenjpeg/tgt.c' || echo '$(srcdir)/'`../libopenjpeg/tgt.c + +JPWL_image_to_j2k-getopt.o: ../common/getopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-getopt.o -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-getopt.Tpo -c -o JPWL_image_to_j2k-getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-getopt.Tpo $(DEPDIR)/JPWL_image_to_j2k-getopt.Po +# source='../common/getopt.c' object='JPWL_image_to_j2k-getopt.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + +JPWL_image_to_j2k-getopt.obj: ../common/getopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-getopt.obj -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-getopt.Tpo -c -o JPWL_image_to_j2k-getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-getopt.Tpo $(DEPDIR)/JPWL_image_to_j2k-getopt.Po +# source='../common/getopt.c' object='JPWL_image_to_j2k-getopt.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + +JPWL_image_to_j2k-index.o: ../codec/index.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-index.o -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-index.Tpo -c -o JPWL_image_to_j2k-index.o `test -f '../codec/index.c' || echo '$(srcdir)/'`../codec/index.c + $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-index.Tpo $(DEPDIR)/JPWL_image_to_j2k-index.Po +# source='../codec/index.c' object='JPWL_image_to_j2k-index.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-index.o `test -f '../codec/index.c' || echo '$(srcdir)/'`../codec/index.c + +JPWL_image_to_j2k-index.obj: ../codec/index.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-index.obj -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-index.Tpo -c -o JPWL_image_to_j2k-index.obj `if test -f '../codec/index.c'; then $(CYGPATH_W) '../codec/index.c'; else $(CYGPATH_W) '$(srcdir)/../codec/index.c'; fi` + $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-index.Tpo $(DEPDIR)/JPWL_image_to_j2k-index.Po +# source='../codec/index.c' object='JPWL_image_to_j2k-index.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-index.obj `if test -f '../codec/index.c'; then $(CYGPATH_W) '../codec/index.c'; else $(CYGPATH_W) '$(srcdir)/../codec/index.c'; fi` + +JPWL_image_to_j2k-convert.o: ../codec/convert.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-convert.o -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-convert.Tpo -c -o JPWL_image_to_j2k-convert.o `test -f '../codec/convert.c' || echo '$(srcdir)/'`../codec/convert.c + $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-convert.Tpo $(DEPDIR)/JPWL_image_to_j2k-convert.Po +# source='../codec/convert.c' object='JPWL_image_to_j2k-convert.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-convert.o `test -f '../codec/convert.c' || echo '$(srcdir)/'`../codec/convert.c + +JPWL_image_to_j2k-convert.obj: ../codec/convert.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-convert.obj -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-convert.Tpo -c -o JPWL_image_to_j2k-convert.obj `if test -f '../codec/convert.c'; then $(CYGPATH_W) '../codec/convert.c'; else $(CYGPATH_W) '$(srcdir)/../codec/convert.c'; fi` + $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-convert.Tpo $(DEPDIR)/JPWL_image_to_j2k-convert.Po +# source='../codec/convert.c' object='JPWL_image_to_j2k-convert.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-convert.obj `if test -f '../codec/convert.c'; then $(CYGPATH_W) '../codec/convert.c'; else $(CYGPATH_W) '$(srcdir)/../codec/convert.c'; fi` + +JPWL_image_to_j2k-image_to_j2k.o: ../codec/image_to_j2k.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-image_to_j2k.o -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Tpo -c -o JPWL_image_to_j2k-image_to_j2k.o `test -f '../codec/image_to_j2k.c' || echo '$(srcdir)/'`../codec/image_to_j2k.c + $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Tpo $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Po +# source='../codec/image_to_j2k.c' object='JPWL_image_to_j2k-image_to_j2k.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-image_to_j2k.o `test -f '../codec/image_to_j2k.c' || echo '$(srcdir)/'`../codec/image_to_j2k.c + +JPWL_image_to_j2k-image_to_j2k.obj: ../codec/image_to_j2k.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-image_to_j2k.obj -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Tpo -c -o JPWL_image_to_j2k-image_to_j2k.obj `if test -f '../codec/image_to_j2k.c'; then $(CYGPATH_W) '../codec/image_to_j2k.c'; else $(CYGPATH_W) '$(srcdir)/../codec/image_to_j2k.c'; fi` + $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Tpo $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Po +# source='../codec/image_to_j2k.c' object='JPWL_image_to_j2k-image_to_j2k.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-image_to_j2k.obj `if test -f '../codec/image_to_j2k.c'; then $(CYGPATH_W) '../codec/image_to_j2k.c'; else $(CYGPATH_W) '$(srcdir)/../codec/image_to_j2k.c'; fi` + +JPWL_j2k_to_image-getopt.o: ../common/getopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-getopt.o -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-getopt.Tpo -c -o JPWL_j2k_to_image-getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-getopt.Tpo $(DEPDIR)/JPWL_j2k_to_image-getopt.Po +# source='../common/getopt.c' object='JPWL_j2k_to_image-getopt.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + +JPWL_j2k_to_image-getopt.obj: ../common/getopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-getopt.obj -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-getopt.Tpo -c -o JPWL_j2k_to_image-getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-getopt.Tpo $(DEPDIR)/JPWL_j2k_to_image-getopt.Po +# source='../common/getopt.c' object='JPWL_j2k_to_image-getopt.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + +JPWL_j2k_to_image-index.o: ../codec/index.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-index.o -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-index.Tpo -c -o JPWL_j2k_to_image-index.o `test -f '../codec/index.c' || echo '$(srcdir)/'`../codec/index.c + $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-index.Tpo $(DEPDIR)/JPWL_j2k_to_image-index.Po +# source='../codec/index.c' object='JPWL_j2k_to_image-index.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-index.o `test -f '../codec/index.c' || echo '$(srcdir)/'`../codec/index.c + +JPWL_j2k_to_image-index.obj: ../codec/index.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-index.obj -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-index.Tpo -c -o JPWL_j2k_to_image-index.obj `if test -f '../codec/index.c'; then $(CYGPATH_W) '../codec/index.c'; else $(CYGPATH_W) '$(srcdir)/../codec/index.c'; fi` + $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-index.Tpo $(DEPDIR)/JPWL_j2k_to_image-index.Po +# source='../codec/index.c' object='JPWL_j2k_to_image-index.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-index.obj `if test -f '../codec/index.c'; then $(CYGPATH_W) '../codec/index.c'; else $(CYGPATH_W) '$(srcdir)/../codec/index.c'; fi` + +JPWL_j2k_to_image-convert.o: ../codec/convert.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-convert.o -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-convert.Tpo -c -o JPWL_j2k_to_image-convert.o `test -f '../codec/convert.c' || echo '$(srcdir)/'`../codec/convert.c + $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-convert.Tpo $(DEPDIR)/JPWL_j2k_to_image-convert.Po +# source='../codec/convert.c' object='JPWL_j2k_to_image-convert.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-convert.o `test -f '../codec/convert.c' || echo '$(srcdir)/'`../codec/convert.c + +JPWL_j2k_to_image-convert.obj: ../codec/convert.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-convert.obj -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-convert.Tpo -c -o JPWL_j2k_to_image-convert.obj `if test -f '../codec/convert.c'; then $(CYGPATH_W) '../codec/convert.c'; else $(CYGPATH_W) '$(srcdir)/../codec/convert.c'; fi` + $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-convert.Tpo $(DEPDIR)/JPWL_j2k_to_image-convert.Po +# source='../codec/convert.c' object='JPWL_j2k_to_image-convert.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-convert.obj `if test -f '../codec/convert.c'; then $(CYGPATH_W) '../codec/convert.c'; else $(CYGPATH_W) '$(srcdir)/../codec/convert.c'; fi` + +JPWL_j2k_to_image-color.o: ../common/color.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-color.o -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-color.Tpo -c -o JPWL_j2k_to_image-color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c + $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-color.Tpo $(DEPDIR)/JPWL_j2k_to_image-color.Po +# source='../common/color.c' object='JPWL_j2k_to_image-color.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c + +JPWL_j2k_to_image-color.obj: ../common/color.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-color.obj -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-color.Tpo -c -o JPWL_j2k_to_image-color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` + $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-color.Tpo $(DEPDIR)/JPWL_j2k_to_image-color.Po +# source='../common/color.c' object='JPWL_j2k_to_image-color.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` + +JPWL_j2k_to_image-j2k_to_image.o: ../codec/j2k_to_image.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-j2k_to_image.o -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Tpo -c -o JPWL_j2k_to_image-j2k_to_image.o `test -f '../codec/j2k_to_image.c' || echo '$(srcdir)/'`../codec/j2k_to_image.c + $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Tpo $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Po +# source='../codec/j2k_to_image.c' object='JPWL_j2k_to_image-j2k_to_image.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-j2k_to_image.o `test -f '../codec/j2k_to_image.c' || echo '$(srcdir)/'`../codec/j2k_to_image.c + +JPWL_j2k_to_image-j2k_to_image.obj: ../codec/j2k_to_image.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-j2k_to_image.obj -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Tpo -c -o JPWL_j2k_to_image-j2k_to_image.obj `if test -f '../codec/j2k_to_image.c'; then $(CYGPATH_W) '../codec/j2k_to_image.c'; else $(CYGPATH_W) '$(srcdir)/../codec/j2k_to_image.c'; fi` + $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Tpo $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Po +# source='../codec/j2k_to_image.c' object='JPWL_j2k_to_image-j2k_to_image.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-j2k_to_image.obj `if test -f '../codec/j2k_to_image.c'; then $(CYGPATH_W) '../codec/j2k_to_image.c'; else $(CYGPATH_W) '$(srcdir)/../codec/j2k_to_image.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) all-local +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-libLTLIBRARIES + + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +all-local: + $(INSTALL) -d ../bin + $(INSTALL) $(bin_PROGRAMS) ../bin + cp -P .libs/libopenjpeg_JPWL.* ../bin + rm -f ../bin/libopenjpeg_JPWL.la* + @rm -rf .report_lib + @$(INSTALL) -d .report_lib + @cp -P .libs/libopenjpeg_JPWL.* .report_lib + @rm -f .report_lib/libopenjpeg_JPWL.lai + echo "" > .report.txt + @(for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> .report.txt ; \ + done) + @(cd .report_lib; \ + l=`ls --file-type`; \ + for f in $$l ; do \ + echo "Installing: ${prefix}/lib/$$f" >> ../.report.txt ; \ + done) + @rm -rf .report_lib + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/jpwl/Makefile.am b/contrib/menuetlibc/openjpeg/jpwl/Makefile.am new file mode 100644 index 0000000000..fd1c953d1d --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/Makefile.am @@ -0,0 +1,109 @@ +MAJOR = @MAJOR_NR@ +MINOR = @MINOR_NR@ +BUILD = @BUILD_NR@ +CURRENT=`expr $(MAJOR) + $(MINOR)` + +lib_LTLIBRARIES = libopenjpeg_JPWL.la + +libopenjpeg_JPWL_la_LDFLAGS = -no-undefined \ + -version-info $(CURRENT):$(BUILD):$(MINOR) + +JPWL_SRCS = crc.c jpwl.c jpwl_lib.c rs.c +JPWL_INCLS = jpwl.h crc.h rs.h + +SRCS = ../libopenjpeg/bio.c ../libopenjpeg/cio.c ../libopenjpeg/dwt.c \ + ../libopenjpeg/event.c ../libopenjpeg/image.c ../libopenjpeg/j2k.c \ + ../libopenjpeg/j2k_lib.c ../libopenjpeg/jp2.c ../libopenjpeg/jpt.c \ + ../libopenjpeg/mct.c ../libopenjpeg/mqc.c ../libopenjpeg/openjpeg.c \ + ../libopenjpeg/pi.c ../libopenjpeg/raw.c ../libopenjpeg/t1.c \ + ../libopenjpeg/t2.c ../libopenjpeg/tcd.c ../libopenjpeg/tgt.c \ + $(JPWL_SRCS) + +INCLS = ../libopenjpeg/bio.h ../libopenjpeg/cio.h ../libopenjpeg/dwt.h \ + ../libopenjpeg/event.h ../libopenjpeg/fix.h ../libopenjpeg/image.h \ + ../libopenjpeg/int.h ../libopenjpeg/j2k.h ../libopenjpeg/j2k_lib.h \ + ../libopenjpeg/jp2.h ../libopenjpeg/jpt.h ../libopenjpeg/mct.h \ + ../libopenjpeg/mqc.h ../libopenjpeg/openjpeg.h ../libopenjpeg/pi.h \ + ../libopenjpeg/raw.h ../libopenjpeg/t1.h ../libopenjpeg/t2.h \ + ../libopenjpeg/tcd.h ../libopenjpeg/tgt.h ../libopenjpeg/opj_malloc.h \ + ../libopenjpeg/opj_includes.h \ + $(JPWL_INCLS) + +libopenjpeg_JPWL_la_SOURCES = $(SRCS) $(INCLS) + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +COMPILERFLAGS = -Wall -ffast-math -std=c99 + +USERLIBS = +INCLUDES = -I.. -I. -I../libopenjpeg -I../common + +if with_libtiff +INCLUDES += @tiffincludes@ +USERLIBS += @tifflibs@ +endif + +if with_libpng +INCLUDES += @pngincludes@ +USERLIBS += @pnglibs@ +endif + +if with_liblcms2 +INCLUDES += @lcms2includes@ +USERLIBS += @lcms2libs@ +endif + +if with_liblcms1 +INCLUDES += @lcms1includes@ +USERLIBS += @lcms1libs@ +endif + +USERLIBS += -lm + +bin_PROGRAMS = JPWL_j2k_to_image JPWL_image_to_j2k + +JPWL_j2k_to_image_CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL +JPWL_image_to_j2k_CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL + +if with_sharedlibs +COMPILERFLAGS += -DOPJ_EXPORTS +else +COMPILERFLAGS += -DOPJ_STATIC +libopenjpeg_JPWL_la_LDFLAGS += -static +endif + +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL +LDADD = ./libopenjpeg_JPWL.la $(USERLIBS) + +JPWL_j2k_to_image_SOURCES = ../common/getopt.c ../codec/index.c \ + ../codec/convert.c ../common/color.c ../codec/j2k_to_image.c + +JPWL_image_to_j2k_SOURCES = ../common/getopt.c ../codec/index.c \ + ../codec/convert.c ../codec/image_to_j2k.c + +REPBIN=$(bin_PROGRAMS) + +all-local: + $(INSTALL) -d ../bin + $(INSTALL) $(bin_PROGRAMS) ../bin + cp -P .libs/libopenjpeg_JPWL.* ../bin + rm -f ../bin/libopenjpeg_JPWL.la* + @rm -rf .report_lib + @$(INSTALL) -d .report_lib + @cp -P .libs/libopenjpeg_JPWL.* .report_lib + @rm -f .report_lib/libopenjpeg_JPWL.lai + echo "" > .report.txt + @(for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> .report.txt ; \ + done) + @(cd .report_lib; \ + l=`ls --file-type`; \ + for f in $$l ; do \ + echo "Installing: ${prefix}/lib/$$f" >> ../.report.txt ; \ + done) + @rm -rf .report_lib + diff --git a/contrib/menuetlibc/openjpeg/jpwl/Makefile.in b/contrib/menuetlibc/openjpeg/jpwl/Makefile.in new file mode 100644 index 0000000000..2ca0b4dec1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/Makefile.in @@ -0,0 +1,997 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@with_libtiff_TRUE@am__append_1 = @tiffincludes@ +@with_libtiff_TRUE@am__append_2 = @tifflibs@ +@with_libpng_TRUE@am__append_3 = @pngincludes@ +@with_libpng_TRUE@am__append_4 = @pnglibs@ +@with_liblcms2_TRUE@am__append_5 = @lcms2includes@ +@with_liblcms2_TRUE@am__append_6 = @lcms2libs@ +@with_liblcms1_TRUE@am__append_7 = @lcms1includes@ +@with_liblcms1_TRUE@am__append_8 = @lcms1libs@ +bin_PROGRAMS = JPWL_j2k_to_image$(EXEEXT) JPWL_image_to_j2k$(EXEEXT) +@with_sharedlibs_TRUE@am__append_9 = -DOPJ_EXPORTS +@with_sharedlibs_FALSE@am__append_10 = -DOPJ_STATIC +@with_sharedlibs_FALSE@am__append_11 = -static +subdir = jpwl +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libopenjpeg_JPWL_la_LIBADD = +am__objects_1 = crc.lo jpwl.lo jpwl_lib.lo rs.lo +am__objects_2 = bio.lo cio.lo dwt.lo event.lo image.lo j2k.lo \ + j2k_lib.lo jp2.lo jpt.lo mct.lo mqc.lo openjpeg.lo pi.lo \ + raw.lo t1.lo t2.lo tcd.lo tgt.lo $(am__objects_1) +am__objects_3 = +am__objects_4 = $(am__objects_3) +am_libopenjpeg_JPWL_la_OBJECTS = $(am__objects_2) $(am__objects_4) +libopenjpeg_JPWL_la_OBJECTS = $(am_libopenjpeg_JPWL_la_OBJECTS) +libopenjpeg_JPWL_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libopenjpeg_JPWL_la_LDFLAGS) $(LDFLAGS) -o $@ +PROGRAMS = $(bin_PROGRAMS) +am_JPWL_image_to_j2k_OBJECTS = JPWL_image_to_j2k-getopt.$(OBJEXT) \ + JPWL_image_to_j2k-index.$(OBJEXT) \ + JPWL_image_to_j2k-convert.$(OBJEXT) \ + JPWL_image_to_j2k-image_to_j2k.$(OBJEXT) +JPWL_image_to_j2k_OBJECTS = $(am_JPWL_image_to_j2k_OBJECTS) +JPWL_image_to_j2k_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +JPWL_image_to_j2k_DEPENDENCIES = ./libopenjpeg_JPWL.la \ + $(am__DEPENDENCIES_2) +JPWL_image_to_j2k_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +am_JPWL_j2k_to_image_OBJECTS = JPWL_j2k_to_image-getopt.$(OBJEXT) \ + JPWL_j2k_to_image-index.$(OBJEXT) \ + JPWL_j2k_to_image-convert.$(OBJEXT) \ + JPWL_j2k_to_image-color.$(OBJEXT) \ + JPWL_j2k_to_image-j2k_to_image.$(OBJEXT) +JPWL_j2k_to_image_OBJECTS = $(am_JPWL_j2k_to_image_OBJECTS) +JPWL_j2k_to_image_LDADD = $(LDADD) +JPWL_j2k_to_image_DEPENDENCIES = ./libopenjpeg_JPWL.la \ + $(am__DEPENDENCIES_2) +JPWL_j2k_to_image_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libopenjpeg_JPWL_la_SOURCES) $(JPWL_image_to_j2k_SOURCES) \ + $(JPWL_j2k_to_image_SOURCES) +DIST_SOURCES = $(libopenjpeg_JPWL_la_SOURCES) \ + $(JPWL_image_to_j2k_SOURCES) $(JPWL_j2k_to_image_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_NR = @BUILD_NR@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JP3D_BUILD_NR = @JP3D_BUILD_NR@ +JP3D_MAJOR_NR = @JP3D_MAJOR_NR@ +JP3D_MINOR_NR = @JP3D_MINOR_NR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBPNG_CONFIG = @LIBPNG_CONFIG@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAJOR_NR = @MAJOR_NR@ +MAKEINFO = @MAKEINFO@ +MINOR_NR = @MINOR_NR@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG = @PKGCONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +jp3d_dir = @jp3d_dir@ +jpwl_dir = @jpwl_dir@ +lcms1includes = @lcms1includes@ +lcms1libs = @lcms1libs@ +lcms2includes = @lcms2includes@ +lcms2libs = @lcms2libs@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pngincludes = @pngincludes@ +pnglibs = @pnglibs@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +tiffincludes = @tiffincludes@ +tifflibs = @tifflibs@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_doxygen = @with_doxygen@ +MAJOR = @MAJOR_NR@ +MINOR = @MINOR_NR@ +BUILD = @BUILD_NR@ +CURRENT = `expr $(MAJOR) + $(MINOR)` +lib_LTLIBRARIES = libopenjpeg_JPWL.la +libopenjpeg_JPWL_la_LDFLAGS = -no-undefined -version-info \ + $(CURRENT):$(BUILD):$(MINOR) $(am__append_11) +JPWL_SRCS = crc.c jpwl.c jpwl_lib.c rs.c +JPWL_INCLS = jpwl.h crc.h rs.h +SRCS = ../libopenjpeg/bio.c ../libopenjpeg/cio.c ../libopenjpeg/dwt.c \ + ../libopenjpeg/event.c ../libopenjpeg/image.c ../libopenjpeg/j2k.c \ + ../libopenjpeg/j2k_lib.c ../libopenjpeg/jp2.c ../libopenjpeg/jpt.c \ + ../libopenjpeg/mct.c ../libopenjpeg/mqc.c ../libopenjpeg/openjpeg.c \ + ../libopenjpeg/pi.c ../libopenjpeg/raw.c ../libopenjpeg/t1.c \ + ../libopenjpeg/t2.c ../libopenjpeg/tcd.c ../libopenjpeg/tgt.c \ + $(JPWL_SRCS) + +INCLS = ../libopenjpeg/bio.h ../libopenjpeg/cio.h ../libopenjpeg/dwt.h \ + ../libopenjpeg/event.h ../libopenjpeg/fix.h ../libopenjpeg/image.h \ + ../libopenjpeg/int.h ../libopenjpeg/j2k.h ../libopenjpeg/j2k_lib.h \ + ../libopenjpeg/jp2.h ../libopenjpeg/jpt.h ../libopenjpeg/mct.h \ + ../libopenjpeg/mqc.h ../libopenjpeg/openjpeg.h ../libopenjpeg/pi.h \ + ../libopenjpeg/raw.h ../libopenjpeg/t1.h ../libopenjpeg/t2.h \ + ../libopenjpeg/tcd.h ../libopenjpeg/tgt.h ../libopenjpeg/opj_malloc.h \ + ../libopenjpeg/opj_includes.h \ + $(JPWL_INCLS) + +libopenjpeg_JPWL_la_SOURCES = $(SRCS) $(INCLS) + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix +COMPILERFLAGS = -Wall -ffast-math -std=c99 $(am__append_9) \ + $(am__append_10) +USERLIBS = $(am__append_2) $(am__append_4) $(am__append_6) \ + $(am__append_8) -lm +INCLUDES = -I.. -I. -I../libopenjpeg -I../common $(am__append_1) \ + $(am__append_3) $(am__append_5) $(am__append_7) +JPWL_j2k_to_image_CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL +JPWL_image_to_j2k_CFLAGS = $(COMPILERFLAGS) $(INCLUDES) -DUSE_JPWL +LDADD = ./libopenjpeg_JPWL.la $(USERLIBS) +JPWL_j2k_to_image_SOURCES = ../common/getopt.c ../codec/index.c \ + ../codec/convert.c ../common/color.c ../codec/j2k_to_image.c + +JPWL_image_to_j2k_SOURCES = ../common/getopt.c ../codec/index.c \ + ../codec/convert.c ../codec/image_to_j2k.c + +REPBIN = $(bin_PROGRAMS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign jpwl/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign jpwl/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libopenjpeg_JPWL.la: $(libopenjpeg_JPWL_la_OBJECTS) $(libopenjpeg_JPWL_la_DEPENDENCIES) + $(libopenjpeg_JPWL_la_LINK) -rpath $(libdir) $(libopenjpeg_JPWL_la_OBJECTS) $(libopenjpeg_JPWL_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +JPWL_image_to_j2k$(EXEEXT): $(JPWL_image_to_j2k_OBJECTS) $(JPWL_image_to_j2k_DEPENDENCIES) + @rm -f JPWL_image_to_j2k$(EXEEXT) + $(JPWL_image_to_j2k_LINK) $(JPWL_image_to_j2k_OBJECTS) $(JPWL_image_to_j2k_LDADD) $(LIBS) +JPWL_j2k_to_image$(EXEEXT): $(JPWL_j2k_to_image_OBJECTS) $(JPWL_j2k_to_image_DEPENDENCIES) + @rm -f JPWL_j2k_to_image$(EXEEXT) + $(JPWL_j2k_to_image_LINK) $(JPWL_j2k_to_image_OBJECTS) $(JPWL_j2k_to_image_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPWL_image_to_j2k-convert.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPWL_image_to_j2k-getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPWL_image_to_j2k-index.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPWL_j2k_to_image-color.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPWL_j2k_to_image-convert.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPWL_j2k_to_image-getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPWL_j2k_to_image-index.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/image.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/j2k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/j2k_lib.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jp2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpwl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpwl_lib.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mct.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mqc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openjpeg.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tgt.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +bio.lo: ../libopenjpeg/bio.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bio.lo -MD -MP -MF $(DEPDIR)/bio.Tpo -c -o bio.lo `test -f '../libopenjpeg/bio.c' || echo '$(srcdir)/'`../libopenjpeg/bio.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/bio.Tpo $(DEPDIR)/bio.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/bio.c' object='bio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bio.lo `test -f '../libopenjpeg/bio.c' || echo '$(srcdir)/'`../libopenjpeg/bio.c + +cio.lo: ../libopenjpeg/cio.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cio.lo -MD -MP -MF $(DEPDIR)/cio.Tpo -c -o cio.lo `test -f '../libopenjpeg/cio.c' || echo '$(srcdir)/'`../libopenjpeg/cio.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cio.Tpo $(DEPDIR)/cio.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/cio.c' object='cio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cio.lo `test -f '../libopenjpeg/cio.c' || echo '$(srcdir)/'`../libopenjpeg/cio.c + +dwt.lo: ../libopenjpeg/dwt.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dwt.lo -MD -MP -MF $(DEPDIR)/dwt.Tpo -c -o dwt.lo `test -f '../libopenjpeg/dwt.c' || echo '$(srcdir)/'`../libopenjpeg/dwt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dwt.Tpo $(DEPDIR)/dwt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/dwt.c' object='dwt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dwt.lo `test -f '../libopenjpeg/dwt.c' || echo '$(srcdir)/'`../libopenjpeg/dwt.c + +event.lo: ../libopenjpeg/event.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT event.lo -MD -MP -MF $(DEPDIR)/event.Tpo -c -o event.lo `test -f '../libopenjpeg/event.c' || echo '$(srcdir)/'`../libopenjpeg/event.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/event.Tpo $(DEPDIR)/event.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/event.c' object='event.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o event.lo `test -f '../libopenjpeg/event.c' || echo '$(srcdir)/'`../libopenjpeg/event.c + +image.lo: ../libopenjpeg/image.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT image.lo -MD -MP -MF $(DEPDIR)/image.Tpo -c -o image.lo `test -f '../libopenjpeg/image.c' || echo '$(srcdir)/'`../libopenjpeg/image.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/image.Tpo $(DEPDIR)/image.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/image.c' object='image.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o image.lo `test -f '../libopenjpeg/image.c' || echo '$(srcdir)/'`../libopenjpeg/image.c + +j2k.lo: ../libopenjpeg/j2k.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT j2k.lo -MD -MP -MF $(DEPDIR)/j2k.Tpo -c -o j2k.lo `test -f '../libopenjpeg/j2k.c' || echo '$(srcdir)/'`../libopenjpeg/j2k.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/j2k.Tpo $(DEPDIR)/j2k.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/j2k.c' object='j2k.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o j2k.lo `test -f '../libopenjpeg/j2k.c' || echo '$(srcdir)/'`../libopenjpeg/j2k.c + +j2k_lib.lo: ../libopenjpeg/j2k_lib.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT j2k_lib.lo -MD -MP -MF $(DEPDIR)/j2k_lib.Tpo -c -o j2k_lib.lo `test -f '../libopenjpeg/j2k_lib.c' || echo '$(srcdir)/'`../libopenjpeg/j2k_lib.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/j2k_lib.Tpo $(DEPDIR)/j2k_lib.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/j2k_lib.c' object='j2k_lib.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o j2k_lib.lo `test -f '../libopenjpeg/j2k_lib.c' || echo '$(srcdir)/'`../libopenjpeg/j2k_lib.c + +jp2.lo: ../libopenjpeg/jp2.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT jp2.lo -MD -MP -MF $(DEPDIR)/jp2.Tpo -c -o jp2.lo `test -f '../libopenjpeg/jp2.c' || echo '$(srcdir)/'`../libopenjpeg/jp2.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/jp2.Tpo $(DEPDIR)/jp2.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/jp2.c' object='jp2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jp2.lo `test -f '../libopenjpeg/jp2.c' || echo '$(srcdir)/'`../libopenjpeg/jp2.c + +jpt.lo: ../libopenjpeg/jpt.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT jpt.lo -MD -MP -MF $(DEPDIR)/jpt.Tpo -c -o jpt.lo `test -f '../libopenjpeg/jpt.c' || echo '$(srcdir)/'`../libopenjpeg/jpt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/jpt.Tpo $(DEPDIR)/jpt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/jpt.c' object='jpt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jpt.lo `test -f '../libopenjpeg/jpt.c' || echo '$(srcdir)/'`../libopenjpeg/jpt.c + +mct.lo: ../libopenjpeg/mct.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mct.lo -MD -MP -MF $(DEPDIR)/mct.Tpo -c -o mct.lo `test -f '../libopenjpeg/mct.c' || echo '$(srcdir)/'`../libopenjpeg/mct.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mct.Tpo $(DEPDIR)/mct.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/mct.c' object='mct.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mct.lo `test -f '../libopenjpeg/mct.c' || echo '$(srcdir)/'`../libopenjpeg/mct.c + +mqc.lo: ../libopenjpeg/mqc.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mqc.lo -MD -MP -MF $(DEPDIR)/mqc.Tpo -c -o mqc.lo `test -f '../libopenjpeg/mqc.c' || echo '$(srcdir)/'`../libopenjpeg/mqc.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mqc.Tpo $(DEPDIR)/mqc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/mqc.c' object='mqc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mqc.lo `test -f '../libopenjpeg/mqc.c' || echo '$(srcdir)/'`../libopenjpeg/mqc.c + +openjpeg.lo: ../libopenjpeg/openjpeg.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT openjpeg.lo -MD -MP -MF $(DEPDIR)/openjpeg.Tpo -c -o openjpeg.lo `test -f '../libopenjpeg/openjpeg.c' || echo '$(srcdir)/'`../libopenjpeg/openjpeg.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/openjpeg.Tpo $(DEPDIR)/openjpeg.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/openjpeg.c' object='openjpeg.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o openjpeg.lo `test -f '../libopenjpeg/openjpeg.c' || echo '$(srcdir)/'`../libopenjpeg/openjpeg.c + +pi.lo: ../libopenjpeg/pi.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pi.lo -MD -MP -MF $(DEPDIR)/pi.Tpo -c -o pi.lo `test -f '../libopenjpeg/pi.c' || echo '$(srcdir)/'`../libopenjpeg/pi.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pi.Tpo $(DEPDIR)/pi.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/pi.c' object='pi.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pi.lo `test -f '../libopenjpeg/pi.c' || echo '$(srcdir)/'`../libopenjpeg/pi.c + +raw.lo: ../libopenjpeg/raw.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT raw.lo -MD -MP -MF $(DEPDIR)/raw.Tpo -c -o raw.lo `test -f '../libopenjpeg/raw.c' || echo '$(srcdir)/'`../libopenjpeg/raw.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/raw.Tpo $(DEPDIR)/raw.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/raw.c' object='raw.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o raw.lo `test -f '../libopenjpeg/raw.c' || echo '$(srcdir)/'`../libopenjpeg/raw.c + +t1.lo: ../libopenjpeg/t1.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1.lo -MD -MP -MF $(DEPDIR)/t1.Tpo -c -o t1.lo `test -f '../libopenjpeg/t1.c' || echo '$(srcdir)/'`../libopenjpeg/t1.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/t1.Tpo $(DEPDIR)/t1.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/t1.c' object='t1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1.lo `test -f '../libopenjpeg/t1.c' || echo '$(srcdir)/'`../libopenjpeg/t1.c + +t2.lo: ../libopenjpeg/t2.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t2.lo -MD -MP -MF $(DEPDIR)/t2.Tpo -c -o t2.lo `test -f '../libopenjpeg/t2.c' || echo '$(srcdir)/'`../libopenjpeg/t2.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/t2.Tpo $(DEPDIR)/t2.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/t2.c' object='t2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t2.lo `test -f '../libopenjpeg/t2.c' || echo '$(srcdir)/'`../libopenjpeg/t2.c + +tcd.lo: ../libopenjpeg/tcd.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tcd.lo -MD -MP -MF $(DEPDIR)/tcd.Tpo -c -o tcd.lo `test -f '../libopenjpeg/tcd.c' || echo '$(srcdir)/'`../libopenjpeg/tcd.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tcd.Tpo $(DEPDIR)/tcd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/tcd.c' object='tcd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tcd.lo `test -f '../libopenjpeg/tcd.c' || echo '$(srcdir)/'`../libopenjpeg/tcd.c + +tgt.lo: ../libopenjpeg/tgt.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tgt.lo -MD -MP -MF $(DEPDIR)/tgt.Tpo -c -o tgt.lo `test -f '../libopenjpeg/tgt.c' || echo '$(srcdir)/'`../libopenjpeg/tgt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tgt.Tpo $(DEPDIR)/tgt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../libopenjpeg/tgt.c' object='tgt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tgt.lo `test -f '../libopenjpeg/tgt.c' || echo '$(srcdir)/'`../libopenjpeg/tgt.c + +JPWL_image_to_j2k-getopt.o: ../common/getopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-getopt.o -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-getopt.Tpo -c -o JPWL_image_to_j2k-getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-getopt.Tpo $(DEPDIR)/JPWL_image_to_j2k-getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/getopt.c' object='JPWL_image_to_j2k-getopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + +JPWL_image_to_j2k-getopt.obj: ../common/getopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-getopt.obj -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-getopt.Tpo -c -o JPWL_image_to_j2k-getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-getopt.Tpo $(DEPDIR)/JPWL_image_to_j2k-getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/getopt.c' object='JPWL_image_to_j2k-getopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + +JPWL_image_to_j2k-index.o: ../codec/index.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-index.o -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-index.Tpo -c -o JPWL_image_to_j2k-index.o `test -f '../codec/index.c' || echo '$(srcdir)/'`../codec/index.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-index.Tpo $(DEPDIR)/JPWL_image_to_j2k-index.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/index.c' object='JPWL_image_to_j2k-index.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-index.o `test -f '../codec/index.c' || echo '$(srcdir)/'`../codec/index.c + +JPWL_image_to_j2k-index.obj: ../codec/index.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-index.obj -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-index.Tpo -c -o JPWL_image_to_j2k-index.obj `if test -f '../codec/index.c'; then $(CYGPATH_W) '../codec/index.c'; else $(CYGPATH_W) '$(srcdir)/../codec/index.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-index.Tpo $(DEPDIR)/JPWL_image_to_j2k-index.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/index.c' object='JPWL_image_to_j2k-index.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-index.obj `if test -f '../codec/index.c'; then $(CYGPATH_W) '../codec/index.c'; else $(CYGPATH_W) '$(srcdir)/../codec/index.c'; fi` + +JPWL_image_to_j2k-convert.o: ../codec/convert.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-convert.o -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-convert.Tpo -c -o JPWL_image_to_j2k-convert.o `test -f '../codec/convert.c' || echo '$(srcdir)/'`../codec/convert.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-convert.Tpo $(DEPDIR)/JPWL_image_to_j2k-convert.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/convert.c' object='JPWL_image_to_j2k-convert.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-convert.o `test -f '../codec/convert.c' || echo '$(srcdir)/'`../codec/convert.c + +JPWL_image_to_j2k-convert.obj: ../codec/convert.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-convert.obj -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-convert.Tpo -c -o JPWL_image_to_j2k-convert.obj `if test -f '../codec/convert.c'; then $(CYGPATH_W) '../codec/convert.c'; else $(CYGPATH_W) '$(srcdir)/../codec/convert.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-convert.Tpo $(DEPDIR)/JPWL_image_to_j2k-convert.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/convert.c' object='JPWL_image_to_j2k-convert.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-convert.obj `if test -f '../codec/convert.c'; then $(CYGPATH_W) '../codec/convert.c'; else $(CYGPATH_W) '$(srcdir)/../codec/convert.c'; fi` + +JPWL_image_to_j2k-image_to_j2k.o: ../codec/image_to_j2k.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-image_to_j2k.o -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Tpo -c -o JPWL_image_to_j2k-image_to_j2k.o `test -f '../codec/image_to_j2k.c' || echo '$(srcdir)/'`../codec/image_to_j2k.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Tpo $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/image_to_j2k.c' object='JPWL_image_to_j2k-image_to_j2k.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-image_to_j2k.o `test -f '../codec/image_to_j2k.c' || echo '$(srcdir)/'`../codec/image_to_j2k.c + +JPWL_image_to_j2k-image_to_j2k.obj: ../codec/image_to_j2k.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -MT JPWL_image_to_j2k-image_to_j2k.obj -MD -MP -MF $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Tpo -c -o JPWL_image_to_j2k-image_to_j2k.obj `if test -f '../codec/image_to_j2k.c'; then $(CYGPATH_W) '../codec/image_to_j2k.c'; else $(CYGPATH_W) '$(srcdir)/../codec/image_to_j2k.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Tpo $(DEPDIR)/JPWL_image_to_j2k-image_to_j2k.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/image_to_j2k.c' object='JPWL_image_to_j2k-image_to_j2k.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_image_to_j2k_CFLAGS) $(CFLAGS) -c -o JPWL_image_to_j2k-image_to_j2k.obj `if test -f '../codec/image_to_j2k.c'; then $(CYGPATH_W) '../codec/image_to_j2k.c'; else $(CYGPATH_W) '$(srcdir)/../codec/image_to_j2k.c'; fi` + +JPWL_j2k_to_image-getopt.o: ../common/getopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-getopt.o -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-getopt.Tpo -c -o JPWL_j2k_to_image-getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-getopt.Tpo $(DEPDIR)/JPWL_j2k_to_image-getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/getopt.c' object='JPWL_j2k_to_image-getopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + +JPWL_j2k_to_image-getopt.obj: ../common/getopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-getopt.obj -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-getopt.Tpo -c -o JPWL_j2k_to_image-getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-getopt.Tpo $(DEPDIR)/JPWL_j2k_to_image-getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/getopt.c' object='JPWL_j2k_to_image-getopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + +JPWL_j2k_to_image-index.o: ../codec/index.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-index.o -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-index.Tpo -c -o JPWL_j2k_to_image-index.o `test -f '../codec/index.c' || echo '$(srcdir)/'`../codec/index.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-index.Tpo $(DEPDIR)/JPWL_j2k_to_image-index.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/index.c' object='JPWL_j2k_to_image-index.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-index.o `test -f '../codec/index.c' || echo '$(srcdir)/'`../codec/index.c + +JPWL_j2k_to_image-index.obj: ../codec/index.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-index.obj -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-index.Tpo -c -o JPWL_j2k_to_image-index.obj `if test -f '../codec/index.c'; then $(CYGPATH_W) '../codec/index.c'; else $(CYGPATH_W) '$(srcdir)/../codec/index.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-index.Tpo $(DEPDIR)/JPWL_j2k_to_image-index.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/index.c' object='JPWL_j2k_to_image-index.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-index.obj `if test -f '../codec/index.c'; then $(CYGPATH_W) '../codec/index.c'; else $(CYGPATH_W) '$(srcdir)/../codec/index.c'; fi` + +JPWL_j2k_to_image-convert.o: ../codec/convert.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-convert.o -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-convert.Tpo -c -o JPWL_j2k_to_image-convert.o `test -f '../codec/convert.c' || echo '$(srcdir)/'`../codec/convert.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-convert.Tpo $(DEPDIR)/JPWL_j2k_to_image-convert.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/convert.c' object='JPWL_j2k_to_image-convert.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-convert.o `test -f '../codec/convert.c' || echo '$(srcdir)/'`../codec/convert.c + +JPWL_j2k_to_image-convert.obj: ../codec/convert.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-convert.obj -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-convert.Tpo -c -o JPWL_j2k_to_image-convert.obj `if test -f '../codec/convert.c'; then $(CYGPATH_W) '../codec/convert.c'; else $(CYGPATH_W) '$(srcdir)/../codec/convert.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-convert.Tpo $(DEPDIR)/JPWL_j2k_to_image-convert.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/convert.c' object='JPWL_j2k_to_image-convert.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-convert.obj `if test -f '../codec/convert.c'; then $(CYGPATH_W) '../codec/convert.c'; else $(CYGPATH_W) '$(srcdir)/../codec/convert.c'; fi` + +JPWL_j2k_to_image-color.o: ../common/color.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-color.o -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-color.Tpo -c -o JPWL_j2k_to_image-color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-color.Tpo $(DEPDIR)/JPWL_j2k_to_image-color.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/color.c' object='JPWL_j2k_to_image-color.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c + +JPWL_j2k_to_image-color.obj: ../common/color.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-color.obj -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-color.Tpo -c -o JPWL_j2k_to_image-color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-color.Tpo $(DEPDIR)/JPWL_j2k_to_image-color.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/color.c' object='JPWL_j2k_to_image-color.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` + +JPWL_j2k_to_image-j2k_to_image.o: ../codec/j2k_to_image.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-j2k_to_image.o -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Tpo -c -o JPWL_j2k_to_image-j2k_to_image.o `test -f '../codec/j2k_to_image.c' || echo '$(srcdir)/'`../codec/j2k_to_image.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Tpo $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/j2k_to_image.c' object='JPWL_j2k_to_image-j2k_to_image.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-j2k_to_image.o `test -f '../codec/j2k_to_image.c' || echo '$(srcdir)/'`../codec/j2k_to_image.c + +JPWL_j2k_to_image-j2k_to_image.obj: ../codec/j2k_to_image.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -MT JPWL_j2k_to_image-j2k_to_image.obj -MD -MP -MF $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Tpo -c -o JPWL_j2k_to_image-j2k_to_image.obj `if test -f '../codec/j2k_to_image.c'; then $(CYGPATH_W) '../codec/j2k_to_image.c'; else $(CYGPATH_W) '$(srcdir)/../codec/j2k_to_image.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Tpo $(DEPDIR)/JPWL_j2k_to_image-j2k_to_image.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../codec/j2k_to_image.c' object='JPWL_j2k_to_image-j2k_to_image.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(JPWL_j2k_to_image_CFLAGS) $(CFLAGS) -c -o JPWL_j2k_to_image-j2k_to_image.obj `if test -f '../codec/j2k_to_image.c'; then $(CYGPATH_W) '../codec/j2k_to_image.c'; else $(CYGPATH_W) '$(srcdir)/../codec/j2k_to_image.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) all-local +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-libLTLIBRARIES + + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +all-local: + $(INSTALL) -d ../bin + $(INSTALL) $(bin_PROGRAMS) ../bin + cp -P .libs/libopenjpeg_JPWL.* ../bin + rm -f ../bin/libopenjpeg_JPWL.la* + @rm -rf .report_lib + @$(INSTALL) -d .report_lib + @cp -P .libs/libopenjpeg_JPWL.* .report_lib + @rm -f .report_lib/libopenjpeg_JPWL.lai + echo "" > .report.txt + @(for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> .report.txt ; \ + done) + @(cd .report_lib; \ + l=`ls --file-type`; \ + for f in $$l ; do \ + echo "Installing: ${prefix}/lib/$$f" >> ../.report.txt ; \ + done) + @rm -rf .report_lib + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/jpwl/Makefile.nix b/contrib/menuetlibc/openjpeg/jpwl/Makefile.nix new file mode 100644 index 0000000000..a266cd1a30 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/Makefile.nix @@ -0,0 +1,152 @@ +#jpwl Makefile +include ../config.nix + +TARGET = openjpeg_JPWL +COMPILERFLAGS = -Wall -ffast-math -std=c99 -fPIC +USERLIBS = + +JPWL_SRCS = ./crc.c ./jpwl.c ./jpwl_lib.c ./rs.c + +SRCS = ../libopenjpeg/bio.c ../libopenjpeg/cio.c ../libopenjpeg/dwt.c \ + ../libopenjpeg/event.c ../libopenjpeg/image.c ../libopenjpeg/j2k.c \ + ../libopenjpeg/j2k_lib.c ../libopenjpeg/jp2.c ../libopenjpeg/jpt.c \ + ../libopenjpeg/mct.c ../libopenjpeg/mqc.c ../libopenjpeg/openjpeg.c \ + ../libopenjpeg/pi.c ../libopenjpeg/raw.c ../libopenjpeg/t1.c \ + ../libopenjpeg/t2.c ../libopenjpeg/tcd.c ../libopenjpeg/tgt.c \ + $(JPWL_SRCS) + +INCLS = ../libopenjpeg/bio.h ../libopenjpeg/cio.h ../libopenjpeg/dwt.h \ + ../libopenjpeg/event.h ../libopenjpeg/fix.h ../libopenjpeg/image.h \ + ../libopenjpeg/int.h ../libopenjpeg/j2k.h ../libopenjpeg/j2k_lib.h \ + ../libopenjpeg/jp2.h ../libopenjpeg/jpt.h ../libopenjpeg/mct.h \ + ../libopenjpeg/mqc.h ../libopenjpeg/openjpeg.h ../libopenjpeg/pi.h \ + ../libopenjpeg/raw.h ../libopenjpeg/t1.h ../libopenjpeg/t2.h \ + ../libopenjpeg/tcd.h ../libopenjpeg/tgt.h ../libopenjpeg/opj_malloc.h \ + ../libopenjpeg/opj_includes.h + +INCLUDE = -I.. -I. -I../libopenjpeg -I../common + +INSTALL_LIBDIR = $(prefix)/lib +INSTALL_BIN = $(prefix)/bin + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix + + +LIBRARIES = -lstdc++ + +ifeq ($(WITH_TIFF),yes) +INCLUDE += $(TIFF_INCLUDE) +USERLIBS += $(TIFF_LIB) +endif + +ifeq ($(WITH_PNG),yes) +INCLUDE += $(PNG_INCLUDE) +USERLIBS += $(PNG_LIB) +endif + +ifeq ($(WITH_LCMS2),yes) +INCLUDE += $(LCMS2_INCLUDE) +USERLIBS += $(LCMS2_LIB) +endif + +ifeq ($(WITH_LCMS1),yes) +INCLUDE += $(LCMS1_INCLUDE) +USERLIBS += $(LCMS1_LIB) +endif + +USERLIBS += -lm + +MODULES = $(SRCS:.c=.o) + +CFLAGS = $(COMPILERFLAGS) $(INCLUDE) -DUSE_JPWL + +LIBNAME = lib$(TARGET) + +ifeq ($(ENABLE_SHARED),yes) +SHAREDLIB = $(LIBNAME).so.$(MAJOR).$(MINOR).$(BUILD) +else +STATICLIB = $(LIBNAME).a +endif + +default: all + +all: OpenJPEG_JPWL JPWL_image_to_j2k JPWL_j2k_to_image + install -d ../bin +ifeq ($(ENABLE_SHARED),yes) + install -m 755 $(SHAREDLIB) ../bin + (cd ../bin && ln -sf $(SHAREDLIB) $(LIBNAME).so.$(MAJOR).$(MINOR)) + (cd ../bin && ln -sf $(LIBNAME).so.$(MAJOR).$(MINOR) $(LIBNAME).so) +else + install -m 644 $(STATICLIB) ../bin +endif + install JPWL_image_to_j2k JPWL_j2k_to_image ../bin + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +OpenJPEG_JPWL: $(STATICLIB) $(SHAREDLIB) + +JPWL_codec: JPWL_j2k_to_image JPWL_image_to_j2k $(STATICLIB) + +.c.o: + $(CC) $(CFLAGS) -c $< -o $@ + +ifeq ($(ENABLE_SHARED),yes) +$(SHAREDLIB): $(MODULES) + $(CC) -shared -Wl,-soname,$(LIBNAME) -o $@ $(MODULES) $(LIBRARIES) +else +$(STATICLIB): $(MODULES) + $(AR) r $@ $(MODULES) +endif + +ifeq ($(ENABLE_SHARED),yes) +ELIB = $(SHAREDLIB) +else +ELIB = $(STATICLIB) +endif + +JPWL_j2k_to_image: ../codec/j2k_to_image.c + $(CC) $(CFLAGS) ../common/getopt.c ../codec/index.c \ + ../codec/convert.c ../common/color.c ../codec/j2k_to_image.c \ + -o JPWL_j2k_to_image $(ELIB) $(USERLIBS) + +JPWL_image_to_j2k: ../codec/image_to_j2k.c + $(CC) $(CFLAGS) ../common/getopt.c ../codec/index.c \ + ../codec/convert.c ../codec/image_to_j2k.c \ + -o JPWL_image_to_j2k $(ELIB) $(USERLIBS) + +install: OpenJPEG_JPWL + install -d $(DESTDIR)$(INSTALL_LIBDIR) +ifeq ($(ENABLE_SHARED),yes) + install -m 755 -o root -g root $(SHAREDLIB) $(DESTDIR)$(INSTALL_LIBDIR) + (cd $(DESTDIR)$(INSTALL_LIBDIR) && \ + ln -sf $(SHAREDLIB) $(LIBNAME).so.$(MAJOR).$(MINOR) ) + (cd $(DESTDIR)$(INSTALL_LIBDIR) && \ + ln -sf $(LIBNAME).so.$(MAJOR).$(MINOR) $(LIBNAME).so ) +else + install -m 644 -o root -g root $(STATICLIB) $(DESTDIR)$(INSTALL_LIBDIR) + (cd $(DESTDIR)$(INSTALL_LIBDIR) && ranlib $(STATICLIB)) +endif + install -d $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root JPWL_j2k_to_image $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root JPWL_image_to_j2k $(DESTDIR)$(INSTALL_BIN) + +cleanlib: + rm -f core u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) + +cleancodec: + rm -f JPWL_j2k_to_image JPWL_image_to_j2k JPWL_j2k_to_image.o \ + JPWL_image_to_j2k.o + +clean: cleanlib cleancodec + +uninstall: +ifeq ($(ENABLE_SHARED),yes) + (cd $(DESTDIR)$(INSTALL_LIBDIR) && \ + rm -f $(LIBNAME).so $(LIBNAME).so.$(MAJOR).$(MINOR) $(SHAREDLIB)) +else + rm -f $(DESTDIR)$(INSTALL_LIBDIR)/$(STATICLIB) +endif + rm -f $(DESTDIR)$(INSTALL_BIN)/JPWL_j2k_to_image + rm -f $(DESTDIR)$(INSTALL_BIN)/JPWL_image_to_j2k diff --git a/contrib/menuetlibc/openjpeg/jpwl/README.txt b/contrib/menuetlibc/openjpeg/jpwl/README.txt new file mode 100644 index 0000000000..66e9d5b18e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/README.txt @@ -0,0 +1,136 @@ +=============================================================================== + JPEG2000 Part 11 (ISO/IEC 15444-11 JPWL) Software + + + + Version 20061213 +=============================================================================== + + + + + +1. Scope +============= + +This document describes the installation and use of the JPWL module in the framework of OpenJPEG library. + +This implementation has been developed from OpenJPEG implementation of JPEG2000 standard, and for this reason it is written in C language. + +If you find some bugs or if you have problems using the encoder/decoder, please send an e-mail to jpwl@diei.unipg.it + + +2. Installing the code +========================== + +The JPWL code is integrated with the standard OpenJPEG library and codecs: it is activated by setting the macro USE_JPWL to defined in the preprocessor configuration options of your preferred C compiler. + +2.1. Compiling the source code in Windows +------------------------------------------- + +The "jpwl" directory is already populated with a couple of Visual C++ 6.0 workspaces + + * JPWL_image_to_j2k.dsw - Creates the encoder with JPWL functionalities + * JPWL_j2k_to_image.dsw - Creates the decoder with JPWL functionalities + +2.2. Compiling the source code in Unix-like systems +----------------------------------------------------- + +Under linux, enter the jpwl directory and type "make clean" and "make". + + +3. Running the JPWL software +========================= + +The options available at the command line are exactly the same of the base OpenJPEG codecs. In addition, there is a "-W" switch that activates JPWL functionalities. + +3.1. JPWL Encoder +------------------- + +-W : adoption of JPWL (Part 11) capabilities (-W params) + The parameters can be written and repeated in any order: + [h<=type>,s<=method>,a=,z=,g=,... + ...,p<=type>] + + h selects the header error protection (EPB): 'type' can be + [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS] + if 'tile' is absent, it applies to main and tile headers + if 'tile' is present, it applies from that tile + onwards, up to the next h spec, or to the last tile + in the codestream (max. 16 specs) + + p selects the packet error protection (EEP/UEP with EPBs) + to be applied to raw data: 'type' can be + [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS] + if 'tile:pack' is absent, it starts from tile 0, packet 0 + if 'tile:pack' is present, it applies from that tile + and that packet onwards, up to the next packet spec + or to the last packet in the last tile in the codestream + (max. 16 specs) + + s enables sensitivity data insertion (ESD): 'method' can be + [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR + 4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED] + if 'tile' is absent, it applies to main header only + if 'tile' is present, it applies from that tile + onwards, up to the next s spec, or to the last tile + in the codestream (max. 16 specs) + + g determines the addressing mode: can be + [0=PACKET 1=BYTE RANGE 2=PACKET RANGE] + + a determines the size of data addressing: can be + 2/4 bytes (small/large codestreams). If not set, auto-mode + + z determines the size of sensitivity values: can be + 1/2 bytes, for the transformed pseudo-floating point value + + ex.: + h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,s0=6,s3=-1,a=0,g=1,z=1 + means + predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2, + CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs, + UEP rs(78,32) for packets 0 to 23 of tile 0, + UEP rs(56,32) for packets 24 to the last of tile 0, + UEP rs default for packets of tile 1, + no UEP for packets 0 to 19 of tile 3, + UEP CRC-32 for packets 20 of tile 3 to last tile, + relative sensitivity ESD for MH, + TSE ESD from TPH 0 to TPH 2, byte range with automatic + size of addresses and 1 byte for each sensitivity value + + ex.: + h,s,p + means + default protection to headers (MH and TPHs) as well as + data packets, one ESD in MH + + N.B.: use the following recommendations when specifying + the JPWL parameters list + - when you use UEP, always pair the 'p' option with 'h' + +3.2. JPWL Decoder +------------------- + + -W + Activates the JPWL correction capability, if the codestream complies. + Options can be a comma separated list of tokens: + c, c=numcomps + numcomps is the number of expected components in the codestream + (search of first EPB rely upon this, default is 3) + + +4. Known bugs and limitations +=============================== + +4.1. Bugs +----------- + +* It is not possible to save a JPWL encoded codestream using the wrapped file format (i.e. JP2): only raw file format (i.e. J2K) is working + +4.2. Limitations +------------------ + +* When specifying an UEP protection, you need to activate even TPH protection for those tiles where there is a protection of the packets +* RED insertion is not currently implemented at the decoder +* JPWL at entropy coding level is not implemented diff --git a/contrib/menuetlibc/openjpeg/jpwl/crc.c b/contrib/menuetlibc/openjpeg/jpwl/crc.c new file mode 100644 index 0000000000..a54b657537 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/crc.c @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef USE_JPWL + +#include "crc.h" + +/** +@file crc.c +@brief Functions used to compute the 16- and 32-bit CRC of byte arrays + +*/ + +/** file: CRC16.CPP + * + * CRC - Cyclic Redundancy Check (16-bit) + * + * A CRC-checksum is used to be sure, the data hasn't changed or is false. + * To create a CRC-checksum, initialise a check-variable (unsigned short), + * and set this to zero. Than call for every byte in the file (e.g.) the + * procedure updateCRC16 with this check-variable as the first parameter, + * and the byte as the second. At the end, the check-variable contains the + * CRC-checksum. + * + * implemented by Michael Neumann, 14.06.1998 + * + */ +const unsigned short CRC16_table[256] = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 +}; + +void updateCRC16(unsigned short *crc, unsigned char data) { + *crc = CRC16_table[(*crc >> 8) & 0xFF] ^ (*crc << 8) ^ data; +}; + + +/** file: CRC32.CPP + * + * CRC - Cyclic Redundancy Check (32-bit) + * + * A CRC-checksum is used to be sure, the data hasn't changed or is false. + * To create a CRC-checksum, initialise a check-variable (unsigned long), + * and set this to zero. Than call for every byte in the file (e.g.) the + * procedure updateCRC32 with this check-variable as the first parameter, + * and the byte as the second. At the end, the check-variable contains the + * CRC-checksum. + * + * implemented by Michael Neumann, 14.06.1998 + * + */ +const unsigned long CRC32_table[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d +}; + +void updateCRC32(unsigned long *crc, unsigned char data) { + *crc = CRC32_table[(unsigned char) *crc ^ data] ^ ((*crc >> 8) & 0x00FFFFFF); +}; + +#endif /* USE_JPWL */ diff --git a/contrib/menuetlibc/openjpeg/jpwl/crc.h b/contrib/menuetlibc/openjpeg/jpwl/crc.h new file mode 100644 index 0000000000..2d871687ae --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/crc.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef USE_JPWL + +/** +@file crc.h +@brief Functions used to compute the 16- and 32-bit CRC of byte arrays + +*/ + +#ifndef __CRC16_HEADER__ +#define __CRC16_HEADER__ + +/** file: CRC16.HPP + * + * CRC - Cyclic Redundancy Check (16-bit) + * + * A CRC-checksum is used to be sure, the data hasn't changed or is false. + * To create a CRC-checksum, initialise a check-variable (unsigned short), + * and set this to zero. Than call for every byte in the file (e.g.) the + * procedure updateCRC16 with this check-variable as the first parameter, + * and the byte as the second. At the end, the check-variable contains the + * CRC-checksum. + * + * implemented by Michael Neumann, 14.06.1998 + * + */ +void updateCRC16(unsigned short *, unsigned char); + +#endif /* __CRC16_HEADER__ */ + + +#ifndef __CRC32_HEADER__ +#define __CRC32_HEADER__ + +/** file: CRC32.HPP + * + * CRC - Cyclic Redundancy Check (32-bit) + * + * A CRC-checksum is used to be sure, the data hasn't changed or is false. + * To create a CRC-checksum, initialise a check-variable (unsigned short), + * and set this to zero. Than call for every byte in the file (e.g.) the + * procedure updateCRC32 with this check-variable as the first parameter, + * and the byte as the second. At the end, the check-variable contains the + * CRC-checksum. + * + * implemented by Michael Neumann, 14.06.1998 + * + */ +void updateCRC32(unsigned long *, unsigned char); + +#endif /* __CRC32_HEADER__ */ + + +#endif /* USE_JPWL */ diff --git a/contrib/menuetlibc/openjpeg/jpwl/jpwl.c b/contrib/menuetlibc/openjpeg/jpwl/jpwl.c new file mode 100644 index 0000000000..07ca796adf --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/jpwl.c @@ -0,0 +1,1357 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "../libopenjpeg/opj_includes.h" + +#ifdef USE_JPWL + +/** @defgroup JPWL JPWL - JPEG-2000 Part11 (JPWL) codestream manager */ +/*@{*/ + +/** @name Local static variables */ +/*@{*/ + +/** number of JPWL prepared markers */ +static int jwmarker_num; +/** properties of JPWL markers to insert */ +static jpwl_marker_t jwmarker[JPWL_MAX_NO_MARKERS]; + +/*@}*/ + +/*@}*/ + +/** @name Local static functions */ +/*@{*/ + +/** create an EPC marker segment +@param j2k J2K compressor handle +@param esd_on true if ESD is activated +@param red_on true if RED is activated +@param epb_on true if EPB is activated +@param info_on true if informative techniques are activated +@return returns the freshly created EPC +*/ +jpwl_epc_ms_t *jpwl_epc_create(opj_j2k_t *j2k, bool esd_on, bool red_on, bool epb_on, bool info_on); + +/*@}*/ + +/** create an EPC marker segment +@param j2k J2K compressor handle +@param comps considered component (-1=average, 0/1/2/...=component no.) +@param addrm addressing mode (0=packet, 1=byte range, 2=packet range, 3=reserved) +@param ad_size size of addresses (2/4 bytes) +@param senst sensitivity type +@param se_size sensitivity values size (1/2 bytes) +@param tileno tile where this ESD lies (-1 means MH) +@param svalnum number of sensitivity values (if 0, they will be automatically filled) +@param sensval pointer to an array of sensitivity values (if NULL, they will be automatically filled) +@return returns the freshly created ESD +*/ +jpwl_esd_ms_t *jpwl_esd_create(opj_j2k_t *j2k, int comps, unsigned char addrm, unsigned char ad_size, + unsigned char senst, int se_size, int tileno, + unsigned long int svalnum, void *sensval); + +/** this function is used to compare two JPWL markers based on +their relevant wishlist position +@param arg1 pointer to first marker +@param arg2 pointer to second marker +@return 1 if arg1>arg2, 0 if arg1=arg2, -1 if arg1pos_correction = 0; + +} + +void j2k_add_marker(opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len) { + + if (!cstr_info) + return; + + /* expand the list? */ + if ((cstr_info->marknum + 1) > cstr_info->maxmarknum) { + cstr_info->maxmarknum = 100 + (int) ((float) cstr_info->maxmarknum * 1.0F); + cstr_info->marker = opj_realloc(cstr_info->marker, cstr_info->maxmarknum); + } + + /* add the marker */ + cstr_info->marker[cstr_info->marknum].type = type; + cstr_info->marker[cstr_info->marknum].pos = pos; + cstr_info->marker[cstr_info->marknum].len = len; + cstr_info->marknum++; + +} + +void jpwl_prepare_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) { + + unsigned short int socsiz_len = 0; + int ciopos = cio_tell(cio), soc_pos = j2k->cstr_info->main_head_start; + unsigned char *socp = NULL; + + int tileno, acc_tpno, tpno, tilespec, hprot, sens, pprot, packspec, lastileno, packno; + + jpwl_epb_ms_t *epb_mark; + jpwl_epc_ms_t *epc_mark; + jpwl_esd_ms_t *esd_mark; + + /* find (SOC + SIZ) length */ + /* I assume SIZ is always the first marker after SOC */ + cio_seek(cio, soc_pos + 4); + socsiz_len = (unsigned short int) cio_read(cio, 2) + 4; /* add the 2 marks length itself */ + cio_seek(cio, soc_pos + 0); + socp = cio_getbp(cio); /* pointer to SOC */ + + /* + EPC MS for Main Header: if we are here it's required + */ + /* create the EPC */ + if ((epc_mark = jpwl_epc_create( + j2k, + j2k->cp->esd_on, /* is ESD present? */ + j2k->cp->red_on, /* is RED present? */ + j2k->cp->epb_on, /* is EPB present? */ + false /* are informative techniques present? */ + ))) { + + /* Add this marker to the 'insertanda' list */ + if (epc_mark) { + jwmarker[jwmarker_num].id = J2K_MS_EPC; /* its type */ + jwmarker[jwmarker_num].m.epcmark = epc_mark; /* the EPC */ + jwmarker[jwmarker_num].pos = soc_pos + socsiz_len; /* after SIZ */ + jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos + 0.1; /* not so first */ + jwmarker[jwmarker_num].len = epc_mark->Lepc; /* its length */ + jwmarker[jwmarker_num].len_ready = true; /* ready */ + jwmarker[jwmarker_num].pos_ready = true; /* ready */ + jwmarker[jwmarker_num].parms_ready = false; /* not ready */ + jwmarker[jwmarker_num].data_ready = true; /* ready */ + jwmarker_num++; + }; + + opj_event_msg(j2k->cinfo, EVT_INFO, + "MH EPC : setting %s%s%s\n", + j2k->cp->esd_on ? "ESD, " : "", + j2k->cp->red_on ? "RED, " : "", + j2k->cp->epb_on ? "EPB, " : "" + ); + + } else { + /* ooops, problems */ + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH EPC\n"); + }; + + /* + ESD MS for Main Header + */ + /* first of all, must MH have an ESD MS? */ + if (j2k->cp->esd_on && (j2k->cp->sens_MH >= 0)) { + + /* Create the ESD */ + if ((esd_mark = jpwl_esd_create( + j2k, /* this encoder handle */ + -1, /* we are averaging over all components */ + (unsigned char) j2k->cp->sens_range, /* range method */ + (unsigned char) j2k->cp->sens_addr, /* sensitivity addressing */ + (unsigned char) j2k->cp->sens_MH, /* sensitivity method */ + j2k->cp->sens_size, /* sensitivity size */ + -1, /* this ESD is in main header */ + 0 /*j2k->cstr_info->num*/, /* number of packets in codestream */ + NULL /*sensval*/ /* pointer to sensitivity data of packets */ + ))) { + + /* Add this marker to the 'insertanda' list */ + if (jwmarker_num < JPWL_MAX_NO_MARKERS) { + jwmarker[jwmarker_num].id = J2K_MS_ESD; /* its type */ + jwmarker[jwmarker_num].m.esdmark = esd_mark; /* the EPB */ + jwmarker[jwmarker_num].pos = soc_pos + socsiz_len; /* we choose to place it after SIZ */ + jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos + 0.2; /* not first at all! */ + jwmarker[jwmarker_num].len = esd_mark->Lesd; /* its length */ + jwmarker[jwmarker_num].len_ready = true; /* not ready, yet */ + jwmarker[jwmarker_num].pos_ready = true; /* ready */ + jwmarker[jwmarker_num].parms_ready = true; /* not ready */ + jwmarker[jwmarker_num].data_ready = false; /* not ready */ + jwmarker_num++; + } + + opj_event_msg(j2k->cinfo, EVT_INFO, + "MH ESDs: method %d\n", + j2k->cp->sens_MH + ); + + } else { + /* ooops, problems */ + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH ESD\n"); + }; + + } + + /* + ESD MSs for Tile Part Headers + */ + /* cycle through tiles */ + sens = -1; /* default spec: no ESD */ + tilespec = 0; /* first tile spec */ + acc_tpno = 0; + for (tileno = 0; tileno < j2k->cstr_info->tw * j2k->cstr_info->th; tileno++) { + + opj_event_msg(j2k->cinfo, EVT_INFO, + "Tile %d has %d tile part(s)\n", + tileno, j2k->cstr_info->tile[tileno].num_tps + ); + + /* for every tile part in the tile */ + for (tpno = 0; tpno < j2k->cstr_info->tile[tileno].num_tps; tpno++, acc_tpno++) { + + int sot_len, Psot, Psotp, mm; + unsigned long sot_pos, post_sod_pos; + + unsigned long int left_THmarks_len; + + /******* sot_pos = j2k->cstr_info->tile[tileno].start_pos; */ + sot_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos; + cio_seek(cio, sot_pos + 2); + sot_len = cio_read(cio, 2); /* SOT Len */ + cio_skip(cio, 2); + Psotp = cio_tell(cio); + Psot = cio_read(cio, 4); /* tile length */ + + /******* post_sod_pos = j2k->cstr_info->tile[tileno].end_header + 1; */ + post_sod_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_end_header + 1; + left_THmarks_len = post_sod_pos - sot_pos; + + /* add all the lengths of the markers which are len-ready and stay within SOT and SOD */ + for (mm = 0; mm < jwmarker_num; mm++) { + if ((jwmarker[mm].pos >= sot_pos) && (jwmarker[mm].pos < post_sod_pos)) { + if (jwmarker[mm].len_ready) + left_THmarks_len += jwmarker[mm].len + 2; + else { + opj_event_msg(j2k->cinfo, EVT_ERROR, "MS %x in %f is not len-ready: could not set up TH EPB\n", + jwmarker[mm].id, jwmarker[mm].dpos); + exit(1); + } + } + } + + /******* if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->sens_TPH_tileno[tilespec] == tileno)) */ + if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->sens_TPH_tileno[tilespec] == acc_tpno)) + /* we got a specification from this tile onwards */ + sens = j2k->cp->sens_TPH[tilespec++]; + + /* must this TPH have an ESD MS? */ + if (j2k->cp->esd_on && (sens >= 0)) { + + /* Create the ESD */ + if ((esd_mark = jpwl_esd_create( + j2k, /* this encoder handle */ + -1, /* we are averaging over all components */ + (unsigned char) j2k->cp->sens_range, /* range method */ + (unsigned char) j2k->cp->sens_addr, /* sensitivity addressing size */ + (unsigned char) sens, /* sensitivity method */ + j2k->cp->sens_size, /* sensitivity value size */ + tileno, /* this ESD is in a tile */ + 0, /* number of packets in codestream */ + NULL /* pointer to sensitivity data of packets */ + ))) { + + /* Add this marker to the 'insertanda' list */ + if (jwmarker_num < JPWL_MAX_NO_MARKERS) { + jwmarker[jwmarker_num].id = J2K_MS_ESD; /* its type */ + jwmarker[jwmarker_num].m.esdmark = esd_mark; /* the EPB */ + /****** jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].start_pos + sot_len + 2; */ /* after SOT */ + jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2; /* after SOT */ + jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos + 0.2; /* not first at all! */ + jwmarker[jwmarker_num].len = esd_mark->Lesd; /* its length */ + jwmarker[jwmarker_num].len_ready = true; /* ready, yet */ + jwmarker[jwmarker_num].pos_ready = true; /* ready */ + jwmarker[jwmarker_num].parms_ready = true; /* not ready */ + jwmarker[jwmarker_num].data_ready = false; /* ready */ + jwmarker_num++; + } + + /* update Psot of the tile */ + cio_seek(cio, Psotp); + cio_write(cio, Psot + esd_mark->Lesd + 2, 4); + + opj_event_msg(j2k->cinfo, EVT_INFO, + /******* "TPH ESDs: tile %02d, method %d\n", */ + "TPH ESDs: tile %02d, part %02d, method %d\n", + /******* tileno, */ + tileno, tpno, + sens + ); + + } else { + /* ooops, problems */ + /***** opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH ESD #%d\n", tileno); */ + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH ESD #%d,%d\n", tileno, tpno); + }; + + } + + } + + }; + + /* + EPB MS for Main Header + */ + /* first of all, must MH have an EPB MS? */ + if (j2k->cp->epb_on && (j2k->cp->hprot_MH > 0)) { + + int mm; + + /* position of SOT */ + unsigned int sot_pos = j2k->cstr_info->main_head_end + 1; + + /* how much space is there between end of SIZ and beginning of SOT? */ + int left_MHmarks_len = sot_pos - socsiz_len; + + /* add all the lengths of the markers which are len-ready and stay within SOC and SOT */ + for (mm = 0; mm < jwmarker_num; mm++) { + if ((jwmarker[mm].pos >=0) && (jwmarker[mm].pos < sot_pos)) { + if (jwmarker[mm].len_ready) + left_MHmarks_len += jwmarker[mm].len + 2; + else { + opj_event_msg(j2k->cinfo, EVT_ERROR, "MS %x in %f is not len-ready: could not set up MH EPB\n", + jwmarker[mm].id, jwmarker[mm].dpos); + exit(1); + } + } + } + + /* Create the EPB */ + if ((epb_mark = jpwl_epb_create( + j2k, /* this encoder handle */ + true, /* is it the latest? */ + true, /* is it packed? not for now */ + -1, /* we are in main header */ + 0, /* its index is 0 (first) */ + j2k->cp->hprot_MH, /* protection type parameters of data */ + socsiz_len, /* pre-data: only SOC+SIZ */ + left_MHmarks_len /* post-data: from SOC to SOT, and all JPWL markers within */ + ))) { + + /* Add this marker to the 'insertanda' list */ + if (jwmarker_num < JPWL_MAX_NO_MARKERS) { + jwmarker[jwmarker_num].id = J2K_MS_EPB; /* its type */ + jwmarker[jwmarker_num].m.epbmark = epb_mark; /* the EPB */ + jwmarker[jwmarker_num].pos = soc_pos + socsiz_len; /* after SIZ */ + jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos; /* first first first! */ + jwmarker[jwmarker_num].len = epb_mark->Lepb; /* its length */ + jwmarker[jwmarker_num].len_ready = true; /* ready */ + jwmarker[jwmarker_num].pos_ready = true; /* ready */ + jwmarker[jwmarker_num].parms_ready = true; /* ready */ + jwmarker[jwmarker_num].data_ready = false; /* not ready */ + jwmarker_num++; + } + + opj_event_msg(j2k->cinfo, EVT_INFO, + "MH EPB : prot. %d\n", + j2k->cp->hprot_MH + ); + + } else { + /* ooops, problems */ + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH EPB\n"); + }; + } + + /* + EPB MSs for Tile Parts + */ + /* cycle through TPHs */ + hprot = j2k->cp->hprot_MH; /* default spec */ + tilespec = 0; /* first tile spec */ + lastileno = 0; + packspec = 0; + pprot = -1; + acc_tpno = 0; + for (tileno = 0; tileno < j2k->cstr_info->tw * j2k->cstr_info->th; tileno++) { + + opj_event_msg(j2k->cinfo, EVT_INFO, + "Tile %d has %d tile part(s)\n", + tileno, j2k->cstr_info->tile[tileno].num_tps + ); + + /* for every tile part in the tile */ + for (tpno = 0; tpno < j2k->cstr_info->tile[tileno].num_tps; tpno++, acc_tpno++) { + + int sot_len, Psot, Psotp, mm, epb_index = 0, prot_len = 0; + unsigned long sot_pos, post_sod_pos; + unsigned long int left_THmarks_len/*, epbs_len = 0*/; + int startpack = 0, stoppack = j2k->cstr_info->packno; + int first_tp_pack, last_tp_pack; + jpwl_epb_ms_t *tph_epb = NULL; + + /****** sot_pos = j2k->cstr_info->tile[tileno].start_pos; */ + sot_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos; + cio_seek(cio, sot_pos + 2); + sot_len = cio_read(cio, 2); /* SOT Len */ + cio_skip(cio, 2); + Psotp = cio_tell(cio); + Psot = cio_read(cio, 4); /* tile length */ + + /* a-priori length of the data dwelling between SOT and SOD */ + /****** post_sod_pos = j2k->cstr_info->tile[tileno].end_header + 1; */ + post_sod_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_end_header + 1; + left_THmarks_len = post_sod_pos - (sot_pos + sot_len + 2); + + /* add all the lengths of the JPWL markers which are len-ready and stay within SOT and SOD */ + for (mm = 0; mm < jwmarker_num; mm++) { + if ((jwmarker[mm].pos >= sot_pos) && (jwmarker[mm].pos < post_sod_pos)) { + if (jwmarker[mm].len_ready) + left_THmarks_len += jwmarker[mm].len + 2; + else { + opj_event_msg(j2k->cinfo, EVT_ERROR, "MS %x in %f is not len-ready: could not set up TH EPB\n", + jwmarker[mm].id, jwmarker[mm].dpos); + exit(1); + } + } + } + + /****** if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->hprot_TPH_tileno[tilespec] == tileno)) */ + if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->hprot_TPH_tileno[tilespec] == acc_tpno)) + /* we got a specification from this tile part onwards */ + hprot = j2k->cp->hprot_TPH[tilespec++]; + + /* must this TPH have an EPB MS? */ + if (j2k->cp->epb_on && (hprot > 0)) { + + /* Create the EPB */ + if ((epb_mark = jpwl_epb_create( + j2k, /* this encoder handle */ + false, /* is it the latest? in TPH, no for now (if huge data size in TPH, we'd need more) */ + true, /* is it packed? yes for now */ + tileno, /* we are in TPH */ + epb_index++, /* its index is 0 (first) */ + hprot, /* protection type parameters of following data */ + sot_len + 2, /* pre-data length: only SOT */ + left_THmarks_len /* post-data length: from SOT end to SOD inclusive */ + ))) { + + /* Add this marker to the 'insertanda' list */ + if (jwmarker_num < JPWL_MAX_NO_MARKERS) { + jwmarker[jwmarker_num].id = J2K_MS_EPB; /* its type */ + jwmarker[jwmarker_num].m.epbmark = epb_mark; /* the EPB */ + /****** jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].start_pos + sot_len + 2; */ /* after SOT */ + jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2; /* after SOT */ + jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos; /* first first first! */ + jwmarker[jwmarker_num].len = epb_mark->Lepb; /* its length */ + jwmarker[jwmarker_num].len_ready = true; /* ready */ + jwmarker[jwmarker_num].pos_ready = true; /* ready */ + jwmarker[jwmarker_num].parms_ready = true; /* ready */ + jwmarker[jwmarker_num].data_ready = false; /* not ready */ + jwmarker_num++; + } + + /* update Psot of the tile */ + Psot += epb_mark->Lepb + 2; + + opj_event_msg(j2k->cinfo, EVT_INFO, + /***** "TPH EPB : tile %02d, prot. %d\n", */ + "TPH EPB : tile %02d, part %02d, prot. %d\n", + /***** tileno, */ + tileno, tpno, + hprot + ); + + /* save this TPH EPB address */ + tph_epb = epb_mark; + + } else { + /* ooops, problems */ + /****** opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH EPB #%d\n", tileno); */ + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH EPB in #%d,d\n", tileno, tpno); + }; + + } + + startpack = 0; + /* EPB MSs for UEP packet data protection in Tile Parts */ + /****** for (packno = 0; packno < j2k->cstr_info->num; packno++) { */ + /*first_tp_pack = (tpno > 0) ? (first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno - 1].tp_numpacks) : 0;*/ + first_tp_pack = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pack; + last_tp_pack = first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno].tp_numpacks - 1; + for (packno = 0; packno < j2k->cstr_info->tile[tileno].tp[tpno].tp_numpacks; packno++) { + + /******** if ((packspec < JPWL_MAX_NO_PACKSPECS) && + (j2k->cp->pprot_tileno[packspec] == tileno) && (j2k->cp->pprot_packno[packspec] == packno)) { */ + if ((packspec < JPWL_MAX_NO_PACKSPECS) && + (j2k->cp->pprot_tileno[packspec] == acc_tpno) && (j2k->cp->pprot_packno[packspec] == packno)) { + + /* we got a specification from this tile and packet onwards */ + /* print the previous spec */ + if (packno > 0) { + stoppack = packno - 1; + opj_event_msg(j2k->cinfo, EVT_INFO, + /***** "UEP EPBs: tile %02d, packs. %02d-%02d (B %d-%d), prot. %d\n", */ + "UEP EPBs: tile %02d, part %02d, packs. %02d-%02d (B %d-%d), prot. %d\n", + /***** tileno, */ + tileno, tpno, + startpack, + stoppack, + /***** j2k->cstr_info->tile[tileno].packet[startpack].start_pos, */ + j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos, + /***** j2k->cstr_info->tile[tileno].packet[stoppack].end_pos, */ + j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos, + pprot); + + /***** prot_len = j2k->cstr_info->tile[tileno].packet[stoppack].end_pos + 1 - + j2k->cstr_info->tile[tileno].packet[startpack].start_pos; */ + prot_len = j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos + 1 - + j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos; + + /* + particular case: if this is the last header and the last packet, + then it is better to protect even the EOC marker + */ + /****** if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) && + (stoppack == (j2k->cstr_info->num - 1))) */ + if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) && + (tpno == (j2k->cstr_info->tile[tileno].num_tps - 1)) && + (stoppack == last_tp_pack)) + /* add the EOC len */ + prot_len += 2; + + /* let's add the EPBs */ + Psot += jpwl_epbs_add( + j2k, /* J2K handle */ + jwmarker, /* pointer to JPWL markers list */ + &jwmarker_num, /* pointer to the number of current markers */ + false, /* latest */ + true, /* packed */ + false, /* inside MH */ + &epb_index, /* pointer to EPB index */ + pprot, /* protection type */ + /****** (double) (j2k->cstr_info->tile[tileno].start_pos + sot_len + 2) + 0.0001, */ /* position */ + (double) (j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2) + 0.0001, /* position */ + tileno, /* number of tile */ + 0, /* length of pre-data */ + prot_len /*4000*/ /* length of post-data */ + ); + } + + startpack = packno; + pprot = j2k->cp->pprot[packspec++]; + } + + //printf("Tile %02d, pack %02d ==> %d\n", tileno, packno, pprot); + + } + + /* we are at the end: print the remaining spec */ + stoppack = packno - 1; + if (pprot >= 0) { + + opj_event_msg(j2k->cinfo, EVT_INFO, + /**** "UEP EPBs: tile %02d, packs. %02d-%02d (B %d-%d), prot. %d\n", */ + "UEP EPBs: tile %02d, part %02d, packs. %02d-%02d (B %d-%d), prot. %d\n", + /**** tileno, */ + tileno, tpno, + startpack, + stoppack, + /***** j2k->image_info->tile[tileno].packet[startpack].start_pos, + j2k->image_info->tile[tileno].packet[stoppack].end_pos, */ + j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos, + j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos, + pprot); + + /***** prot_len = j2k->cstr_info->tile[tileno].packet[stoppack].end_pos + 1 - + j2k->cstr_info->tile[tileno].packet[startpack].start_pos; */ + prot_len = j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos + 1 - + j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos; + + /* + particular case: if this is the last header and the last packet, + then it is better to protect even the EOC marker + */ + /***** if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) && + (stoppack == (j2k->cstr_info->num - 1))) */ + if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) && + (tpno == (j2k->cstr_info->tile[tileno].num_tps - 1)) && + (stoppack == last_tp_pack)) + /* add the EOC len */ + prot_len += 2; + + /* let's add the EPBs */ + Psot += jpwl_epbs_add( + j2k, /* J2K handle */ + jwmarker, /* pointer to JPWL markers list */ + &jwmarker_num, /* pointer to the number of current markers */ + true, /* latest */ + true, /* packed */ + false, /* inside MH */ + &epb_index, /* pointer to EPB index */ + pprot, /* protection type */ + /***** (double) (j2k->cstr_info->tile[tileno].start_pos + sot_len + 2) + 0.0001,*/ /* position */ + (double) (j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2) + 0.0001, /* position */ + tileno, /* number of tile */ + 0, /* length of pre-data */ + prot_len /*4000*/ /* length of post-data */ + ); + } + + /* we can now check if the TPH EPB was really the last one */ + if (tph_epb && (epb_index == 1)) { + /* set the TPH EPB to be the last one in current header */ + tph_epb->Depb |= (unsigned char) ((true & 0x0001) << 6); + tph_epb = NULL; + } + + /* write back Psot */ + cio_seek(cio, Psotp); + cio_write(cio, Psot, 4); + + } + + }; + + /* reset the position */ + cio_seek(cio, ciopos); + +} + +void jpwl_dump_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) { + + int mm; + unsigned long int old_size = j2k->cstr_info->codestream_size; + unsigned long int new_size = old_size; + int /*ciopos = cio_tell(cio),*/ soc_pos = j2k->cstr_info->main_head_start; + unsigned char *jpwl_buf, *orig_buf; + unsigned long int orig_pos; + double epbcoding_time = 0.0, esdcoding_time = 0.0; + + /* Order JPWL markers according to their wishlist position */ + qsort((void *) jwmarker, (size_t) jwmarker_num, sizeof (jpwl_marker_t), jpwl_markcomp); + + /* compute markers total size */ + for (mm = 0; mm < jwmarker_num; mm++) { + /*printf("%x, %d, %.10f, %d long\n", jwmarker[mm].id, jwmarker[mm].pos, + jwmarker[mm].dpos, jwmarker[mm].len);*/ + new_size += jwmarker[mm].len + 2; + } + + /* allocate a new buffer of proper size */ + if (!(jpwl_buf = (unsigned char *) opj_malloc((size_t) (new_size + soc_pos) * sizeof(unsigned char)))) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for JPWL codestream buffer\n"); + exit(1); + }; + + /* copy the jp2 part, if any */ + orig_buf = jpwl_buf; + memcpy(jpwl_buf, cio->buffer, soc_pos); + jpwl_buf += soc_pos; + + /* cycle through markers */ + orig_pos = soc_pos + 0; /* start from the beginning */ + cio_seek(cio, soc_pos + 0); /* rewind the original */ + for (mm = 0; mm < jwmarker_num; mm++) { + + /* + need to copy a piece of the original codestream + if there is such + */ + memcpy(jpwl_buf, cio_getbp(cio), jwmarker[mm].pos - orig_pos); + jpwl_buf += jwmarker[mm].pos - orig_pos; + orig_pos = jwmarker[mm].pos; + cio_seek(cio, orig_pos); + + /* + then write down the marker + */ + switch (jwmarker[mm].id) { + + case J2K_MS_EPB: + jpwl_epb_write(j2k, jwmarker[mm].m.epbmark, jpwl_buf); + break; + + case J2K_MS_EPC: + jpwl_epc_write(j2k, jwmarker[mm].m.epcmark, jpwl_buf); + break; + + case J2K_MS_ESD: + jpwl_esd_write(j2k, jwmarker[mm].m.esdmark, jpwl_buf); + break; + + case J2K_MS_RED: + memset(jpwl_buf, 0, jwmarker[mm].len + 2); /* placeholder */ + break; + + default: + break; + }; + + /* we update the markers struct */ + if (j2k->cstr_info) + j2k->cstr_info->marker[j2k->cstr_info->marknum - 1].pos = (jpwl_buf - orig_buf); + + /* we set the marker dpos to the new position in the JPWL codestream */ + jwmarker[mm].dpos = (double) (jpwl_buf - orig_buf); + + /* advance JPWL buffer position */ + jpwl_buf += jwmarker[mm].len + 2; + + } + + /* finish remaining original codestream */ + memcpy(jpwl_buf, cio_getbp(cio), old_size - (orig_pos - soc_pos)); + jpwl_buf += old_size - (orig_pos - soc_pos); + cio_seek(cio, soc_pos + old_size); + + /* + update info file based on added markers + */ + if (!jpwl_update_info(j2k, jwmarker, jwmarker_num)) + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not update OPJ cstr_info structure\n"); + + /* now we need to repass some markers and fill their data fields */ + + /* first of all, DL and Pcrc in EPCs */ + for (mm = 0; mm < jwmarker_num; mm++) { + + /* find the EPCs */ + if (jwmarker[mm].id == J2K_MS_EPC) { + + int epc_pos = (int) jwmarker[mm].dpos, pp; + unsigned short int mycrc = 0x0000; + + /* fix and fill the DL field */ + jwmarker[mm].m.epcmark->DL = new_size; + orig_buf[epc_pos + 6] = (unsigned char) (jwmarker[mm].m.epcmark->DL >> 24); + orig_buf[epc_pos + 7] = (unsigned char) (jwmarker[mm].m.epcmark->DL >> 16); + orig_buf[epc_pos + 8] = (unsigned char) (jwmarker[mm].m.epcmark->DL >> 8); + orig_buf[epc_pos + 9] = (unsigned char) (jwmarker[mm].m.epcmark->DL >> 0); + + /* compute the CRC field (excluding itself) */ + for (pp = 0; pp < 4; pp++) + jpwl_updateCRC16(&mycrc, orig_buf[epc_pos + pp]); + for (pp = 6; pp < (jwmarker[mm].len + 2); pp++) + jpwl_updateCRC16(&mycrc, orig_buf[epc_pos + pp]); + + /* fix and fill the CRC */ + jwmarker[mm].m.epcmark->Pcrc = mycrc; + orig_buf[epc_pos + 4] = (unsigned char) (jwmarker[mm].m.epcmark->Pcrc >> 8); + orig_buf[epc_pos + 5] = (unsigned char) (jwmarker[mm].m.epcmark->Pcrc >> 0); + + } + } + + /* then, sensitivity data in ESDs */ + esdcoding_time = opj_clock(); + for (mm = 0; mm < jwmarker_num; mm++) { + + /* find the ESDs */ + if (jwmarker[mm].id == J2K_MS_ESD) { + + /* remember that they are now in a new position (dpos) */ + int esd_pos = (int) jwmarker[mm].dpos; + + jpwl_esd_fill(j2k, jwmarker[mm].m.esdmark, &orig_buf[esd_pos]); + + } + + } + esdcoding_time = opj_clock() - esdcoding_time; + if (j2k->cp->esd_on) + opj_event_msg(j2k->cinfo, EVT_INFO, "ESDs sensitivities computed in %f s\n", esdcoding_time); + + /* finally, RS or CRC parity in EPBs */ + epbcoding_time = opj_clock(); + for (mm = 0; mm < jwmarker_num; mm++) { + + /* find the EPBs */ + if (jwmarker[mm].id == J2K_MS_EPB) { + + /* remember that they are now in a new position (dpos) */ + int nn, accum_len; + + /* let's see how many EPBs are following this one, included itself */ + /* for this to work, we suppose that the markers are correctly ordered */ + /* and, overall, that they are in packed mode inside headers */ + accum_len = 0; + for (nn = mm; (nn < jwmarker_num) && (jwmarker[nn].id == J2K_MS_EPB) && + (jwmarker[nn].pos == jwmarker[mm].pos); nn++) + accum_len += jwmarker[nn].m.epbmark->Lepb + 2; + + /* fill the current (first) EPB with post-data starting from the computed position */ + jpwl_epb_fill(j2k, jwmarker[mm].m.epbmark, &orig_buf[(int) jwmarker[mm].dpos], + &orig_buf[(int) jwmarker[mm].dpos + accum_len]); + + /* fill the remaining EPBs in the header with post-data starting from the last position */ + for (nn = mm + 1; (nn < jwmarker_num) && (jwmarker[nn].id == J2K_MS_EPB) && + (jwmarker[nn].pos == jwmarker[mm].pos); nn++) + jpwl_epb_fill(j2k, jwmarker[nn].m.epbmark, &orig_buf[(int) jwmarker[nn].dpos], NULL); + + /* skip all the processed EPBs */ + mm = nn - 1; + } + + } + epbcoding_time = opj_clock() - epbcoding_time; + if (j2k->cp->epb_on) + opj_event_msg(j2k->cinfo, EVT_INFO, "EPBs redundancy computed in %f s\n", epbcoding_time); + + /* free original cio buffer and set it to the JPWL one */ + opj_free(cio->buffer); + cio->cinfo = cio->cinfo; /* no change */ + cio->openmode = cio->openmode; /* no change */ + cio->buffer = orig_buf; + cio->length = new_size + soc_pos; + cio->start = cio->buffer; + cio->end = cio->buffer + cio->length; + cio->bp = cio->buffer; + cio_seek(cio, soc_pos + new_size); + +} + + +void j2k_read_epc(opj_j2k_t *j2k) { + unsigned long int DL, Lepcp, Pcrcp, l; + unsigned short int Lepc, Pcrc = 0x0000; + unsigned char Pepc; + opj_cio_t *cio = j2k->cio; + char *ans1; + + /* Simply read the EPC parameters */ + Lepcp = cio_tell(cio); + Lepc = cio_read(cio, 2); + Pcrcp = cio_tell(cio); + cio_skip(cio, 2); /* Pcrc */ + DL = cio_read(cio, 4); + Pepc = cio_read(cio, 1); + + /* compute Pcrc */ + cio_seek(cio, Lepcp - 2); + + /* Marker */ + jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); + jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); + + /* Length */ + jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); + jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); + + /* skip Pcrc */ + cio_skip(cio, 2); + + /* read all remaining */ + for (l = 4; l < Lepc; l++) + jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); + + /* check Pcrc with the result */ + cio_seek(cio, Pcrcp); + ans1 = (Pcrc == (unsigned short int) cio_read(cio, 2)) ? "crc-ok" : "crc-ko"; + + /* now we write them to screen */ + opj_event_msg(j2k->cinfo, EVT_INFO, + "EPC(%u,%d): %s, DL=%d%s %s %s\n", + Lepcp - 2, + Lepc, + ans1, + DL, /* data length this EPC is referring to */ + (Pepc & 0x10) ? ", esd" : "", /* ESD is present */ + (Pepc & 0x20) ? ", red" : "", /* RED is present */ + (Pepc & 0x40) ? ", epb" : ""); /* EPB is present */ + + cio_seek(cio, Lepcp + Lepc); +} + +void j2k_write_epc(opj_j2k_t *j2k) { + + unsigned long int DL, Lepcp, Pcrcp, l; + unsigned short int Lepc, Pcrc; + unsigned char Pepc; + + opj_cio_t *cio = j2k->cio; + + cio_write(cio, J2K_MS_EPC, 2); /* EPC */ + Lepcp = cio_tell(cio); + cio_skip(cio, 2); + + /* CRC-16 word of the EPC */ + Pcrc = 0x0000; /* initialize */ + Pcrcp = cio_tell(cio); + cio_write(cio, Pcrc, 2); /* Pcrc placeholder*/ + + /* data length of the EPC protection domain */ + DL = 0x00000000; /* we leave this set to 0, as if the information is not available */ + cio_write(cio, DL, 4); /* DL */ + + /* jpwl capabilities */ + Pepc = 0x00; + cio_write(cio, Pepc, 1); /* Pepc */ + + /* ID section */ + /* no ID's, as of now */ + + Lepc = (unsigned short) (cio_tell(cio) - Lepcp); + cio_seek(cio, Lepcp); + cio_write(cio, Lepc, 2); /* Lepc */ + + /* compute Pcrc */ + cio_seek(cio, Lepcp - 2); + + /* Marker */ + jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); + jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); + + /* Length */ + jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); + jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); + + /* skip Pcrc */ + cio_skip(cio, 2); + + /* read all remaining */ + for (l = 4; l < Lepc; l++) + jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); + + /* fill Pcrc with the result */ + cio_seek(cio, Pcrcp); + cio_write(cio, Pcrc, 2); + + cio_seek(cio, Lepcp + Lepc); + + /* marker struct update */ + j2k_add_marker(j2k->cstr_info, J2K_MS_EPC, Lepcp - 2, Lepc + 2); + +} + +void j2k_read_epb(opj_j2k_t *j2k) { + unsigned long int LDPepb, Pepb; + unsigned short int Lepb; + unsigned char Depb; + char str1[25] = ""; + bool status; + static bool first_in_tph = true; + int type, pre_len, post_len; + static unsigned char *redund = NULL; + + opj_cio_t *cio = j2k->cio; + + /* B/W = 45, RGB = 51 */ + /* SIZ SIZ_FIELDS SIZ_COMPS FOLLOWING_MARKER */ + int skipnum = 2 + 38 + 3 * j2k->cp->exp_comps + 2; + + if (j2k->cp->correct) { + + /* go back to EPB marker value */ + cio_seek(cio, cio_tell(cio) - 2); + + /* we need to understand where we are */ + if (j2k->state == J2K_STATE_MH) { + /* we are in MH */ + type = 0; /* MH */ + pre_len = skipnum; /* SOC+SIZ */ + post_len = -1; /* auto */ + + } else if ((j2k->state == J2K_STATE_TPH) && first_in_tph) { + /* we are in TPH */ + type = 1; /* TPH */ + pre_len = 12; /* SOC+SIZ */ + first_in_tph = false; + post_len = -1; /* auto */ + + } else { + /* we are elsewhere */ + type = 2; /* other */ + pre_len = 0; /* nada */ + post_len = -1; /* auto */ + + } + + /* call EPB corrector */ + /*printf("before %x, ", redund);*/ + status = jpwl_epb_correct(j2k, /* J2K decompressor handle */ + cio->bp, /* pointer to EPB in codestream buffer */ + type, /* EPB type: MH */ + pre_len, /* length of pre-data */ + post_len, /* length of post-data: -1 means auto */ + NULL, /* do everything auto */ + &redund + ); + /*printf("after %x\n", redund);*/ + + /* Read the (possibly corrected) EPB parameters */ + cio_skip(cio, 2); + Lepb = cio_read(cio, 2); + Depb = cio_read(cio, 1); + LDPepb = cio_read(cio, 4); + Pepb = cio_read(cio, 4); + + if (!status) { + + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL correction could not be performed\n"); + + /* advance to EPB endpoint */ + cio_skip(cio, Lepb + 2); + + return; + } + + /* last in current header? */ + if (Depb & 0x40) { + redund = NULL; /* reset the pointer to L4 buffer */ + first_in_tph = true; + } + + /* advance to EPB endpoint */ + cio_skip(cio, Lepb - 11); + + } else { + + /* Simply read the EPB parameters */ + Lepb = cio_read(cio, 2); + Depb = cio_read(cio, 1); + LDPepb = cio_read(cio, 4); + Pepb = cio_read(cio, 4); + + /* What does Pepb tells us about the protection method? */ + if (((Pepb & 0xF0000000) >> 28) == 0) + sprintf(str1, "pred"); /* predefined */ + else if (((Pepb & 0xF0000000) >> 28) == 1) + sprintf(str1, "crc-%lu", 16 * ((Pepb & 0x00000001) + 1)); /* CRC mode */ + else if (((Pepb & 0xF0000000) >> 28) == 2) + sprintf(str1, "rs(%lu,32)", (Pepb & 0x0000FF00) >> 8); /* RS mode */ + else if (Pepb == 0xFFFFFFFF) + sprintf(str1, "nometh"); /* RS mode */ + else + sprintf(str1, "unknown"); /* unknown */ + + /* Now we write them to screen */ + opj_event_msg(j2k->cinfo, EVT_INFO, + "EPB(%d): (%sl, %sp, %u), %lu, %s\n", + cio_tell(cio) - 13, + (Depb & 0x40) ? "" : "n", /* latest EPB or not? */ + (Depb & 0x80) ? "" : "n", /* packed or unpacked EPB? */ + (Depb & 0x3F), /* EPB index value */ + LDPepb, /*length of the data protected by the EPB */ + str1); /* protection method */ + + cio_skip(cio, Lepb - 11); + } +} + +void j2k_write_epb(opj_j2k_t *j2k) { + unsigned long int LDPepb, Pepb, Lepbp; + unsigned short int Lepb; + unsigned char Depb; + + opj_cio_t *cio = j2k->cio; + + cio_write(cio, J2K_MS_EPB, 2); /* EPB */ + Lepbp = cio_tell(cio); + cio_skip(cio, 2); + + /* EPB style */ + Depb = 0x00; /* test */ + cio_write(cio, Depb, 1); /* Depb */ + + /* length of the data to be protected by this EPB */ + LDPepb = 0x00000000; /* test */ + cio_write(cio, LDPepb, 4); /* LDPepb */ + + /* next error correction tool */ + Pepb = 0x00000000; /* test */ + cio_write(cio, Pepb, 4); /* Pepb */ + + /* EPB data */ + /* no data, as of now */ + + Lepb = (unsigned short) (cio_tell(cio) - Lepbp); + cio_seek(cio, Lepbp); + cio_write(cio, Lepb, 2); /* Lepb */ + + cio_seek(cio, Lepbp + Lepb); + + /* marker struct update */ + j2k_add_marker(j2k->cstr_info, J2K_MS_EPB, Lepbp - 2, Lepb + 2); +} + +void j2k_read_esd(opj_j2k_t *j2k) { + unsigned short int Lesd, Cesd; + unsigned char Pesd; + + int cesdsize = (j2k->image->numcomps >= 257) ? 2 : 1; + + char str1[4][4] = {"p", "br", "pr", "res"}; + char str2[8][8] = {"res", "mse", "mse-r", "psnr", "psnr-i", "maxerr", "tse", "res"}; + + opj_cio_t *cio = j2k->cio; + + /* Simply read the ESD parameters */ + Lesd = cio_read(cio, 2); + Cesd = cio_read(cio, cesdsize); + Pesd = cio_read(cio, 1); + + /* Now we write them to screen */ + opj_event_msg(j2k->cinfo, EVT_INFO, + "ESD(%d): c%d, %s, %s, %s, %s, %s\n", + cio_tell(cio) - (5 + cesdsize), + Cesd, /* component number for this ESD */ + str1[(Pesd & (unsigned char) 0xC0) >> 6], /* addressing mode */ + str2[(Pesd & (unsigned char) 0x38) >> 3], /* sensitivity type */ + ((Pesd & (unsigned char) 0x04) >> 2) ? "2Bs" : "1Bs", + ((Pesd & (unsigned char) 0x02) >> 1) ? "4Ba" : "2Ba", + (Pesd & (unsigned char) 0x01) ? "avgc" : ""); + + cio_skip(cio, Lesd - (3 + cesdsize)); +} + +void j2k_read_red(opj_j2k_t *j2k) { + unsigned short int Lred; + unsigned char Pred; + char str1[4][4] = {"p", "br", "pr", "res"}; + + opj_cio_t *cio = j2k->cio; + + /* Simply read the RED parameters */ + Lred = cio_read(cio, 2); + Pred = cio_read(cio, 1); + + /* Now we write them to screen */ + opj_event_msg(j2k->cinfo, EVT_INFO, + "RED(%d): %s, %dc, %s, %s\n", + cio_tell(cio) - 5, + str1[(Pred & (unsigned char) 0xC0) >> 6], /* addressing mode */ + (Pred & (unsigned char) 0x38) >> 3, /* corruption level */ + ((Pred & (unsigned char) 0x02) >> 1) ? "4Ba" : "2Ba", /* address range */ + (Pred & (unsigned char) 0x01) ? "errs" : "free"); /* error free? */ + + cio_skip(cio, Lred - 3); +} + +bool jpwl_check_tile(opj_j2k_t *j2k, opj_tcd_t *tcd, int tileno) { + +#ifdef oerhgierhgvhreit4u + /* + we navigate through the tile and find possible invalid parameters: + this saves a lot of crashes!!!!! + */ + int compno, resno, precno, /*layno,*/ bandno, blockno; + int numprecincts, numblocks; + + /* this is the selected tile */ + opj_tcd_tile_t *tile = &(tcd->tcd_image->tiles[tileno]); + + /* will keep the component */ + opj_tcd_tilecomp_t *comp = NULL; + + /* will keep the resolution */ + opj_tcd_resolution_t *res; + + /* will keep the subband */ + opj_tcd_band_t *band; + + /* will keep the precinct */ + opj_tcd_precinct_t *prec; + + /* will keep the codeblock */ + opj_tcd_cblk_t *block; + + /* check all tile components */ + for (compno = 0; compno < tile->numcomps; compno++) { + comp = &(tile->comps[compno]); + + /* check all component resolutions */ + for (resno = 0; resno < comp->numresolutions; resno++) { + res = &(comp->resolutions[resno]); + numprecincts = res->pw * res->ph; + + /* check all the subbands */ + for (bandno = 0; bandno < res->numbands; bandno++) { + band = &(res->bands[bandno]); + + /* check all the precincts */ + for (precno = 0; precno < numprecincts; precno++) { + prec = &(band->precincts[precno]); + numblocks = prec->ch * prec->cw; + + /* check all the codeblocks */ + for (blockno = 0; blockno < numblocks; blockno++) { + block = &(prec->cblks[blockno]); + + /* x-origin is invalid */ + if ((block->x0 < prec->x0) || (block->x0 > prec->x1)) { + opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, + "JPWL: wrong x-cord of block origin %d => x-prec is (%d, %d)\n", + block->x0, prec->x0, prec->x1); + if (!JPWL_ASSUME || JPWL_ASSUME) + return false; + }; + } + } + } + } + } + +#endif + + return true; +} + +/*@}*/ + +#endif /* USE_JPWL */ + + +#ifdef USE_JPSEC + +/** @defgroup JPSEC JPSEC - JPEG-2000 Part 8 (JPSEC) codestream manager */ +/*@{*/ + + +/** @name Local static functions */ +/*@{*/ + +void j2k_read_sec(opj_j2k_t *j2k) { + unsigned short int Lsec; + + opj_cio_t *cio = j2k->cio; + + /* Simply read the SEC length */ + Lsec = cio_read(cio, 2); + + /* Now we write them to screen */ + opj_event_msg(j2k->cinfo, EVT_INFO, + "SEC(%d)\n", + cio_tell(cio) - 2 + ); + + cio_skip(cio, Lsec - 2); +} + +void j2k_write_sec(opj_j2k_t *j2k) { + unsigned short int Lsec = 24; + int i; + + opj_cio_t *cio = j2k->cio; + + cio_write(cio, J2K_MS_SEC, 2); /* SEC */ + cio_write(cio, Lsec, 2); + + /* write dummy data */ + for (i = 0; i < Lsec - 2; i++) + cio_write(cio, 0, 1); +} + +void j2k_read_insec(opj_j2k_t *j2k) { + unsigned short int Linsec; + + opj_cio_t *cio = j2k->cio; + + /* Simply read the INSEC length */ + Linsec = cio_read(cio, 2); + + /* Now we write them to screen */ + opj_event_msg(j2k->cinfo, EVT_INFO, + "INSEC(%d)\n", + cio_tell(cio) - 2 + ); + + cio_skip(cio, Linsec - 2); +} + + +/*@}*/ + +/*@}*/ + +#endif /* USE_JPSEC */ + diff --git a/contrib/menuetlibc/openjpeg/jpwl/jpwl.h b/contrib/menuetlibc/openjpeg/jpwl/jpwl.h new file mode 100644 index 0000000000..a96840ccf9 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/jpwl.h @@ -0,0 +1,425 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __JPWL_H +#define __JPWL_H + +#ifdef USE_JPWL + +#include "crc.h" +#include "rs.h" + +/** +@file jpwl.h +@brief The JPEG-2000 Part11 (JPWL) marker segments manager + +The functions in JPWL.C have for goal to read/write the markers added by JPWL. +*/ + +/** @defgroup JPWL JPWL - JPEG-2000 Part11 (JPWL) codestream manager */ +/*@{*/ + +/** +Assume a basic codestream structure, so you can resort better from uncorrected errors +*/ +#define JPWL_ASSUME true + +/** +EPB (Error Protection Block) Marker segment +*/ +typedef struct jpwl_epb_ms { + /**@name Private fields set by epb_create */ + /*@{*/ + /** is the latest in header? */ + bool latest; + /** is it in packed mode? */ + bool packed; + /** TH where this marker has been placed (-1 means MH) */ + int tileno; + /** index in current header (0-63) */ + unsigned char index; + /** error protection method [-1=absent 0=none 1=predefined 16=CRC-16 32=CRC-32 37-128=RS] */ + int hprot; + /** message word length of pre-data */ + int k_pre; + /** code word length of pre-data */ + int n_pre; + /** length of pre-data */ + int pre_len; + /** message word length of post-data */ + int k_post; + /** code word length of post-data */ + int n_post; + /** length of post-data */ + int post_len; + /*@}*/ + /**@name Marker segment fields */ + /*@{*/ + /** two bytes for the length of EPB MS, exluding the marker itself (11 to 65535 bytes) */ + unsigned short int Lepb; + /** single byte for the style */ + unsigned char Depb; + /** four bytes, from 0 to 2^31-1 */ + unsigned long int LDPepb; + /** four bytes, next error management method */ + unsigned long int Pepb; + /** EPB data, variable size */ + unsigned char *data; + /*@}*/ +} jpwl_epb_ms_t; + +/** +EPC (Error Protection Capability) Marker segment +*/ +typedef struct jpwl_epc_ms { + /** is ESD active? */ + bool esd_on; + /** is RED active? */ + bool red_on; + /** is EPB active? */ + bool epb_on; + /** are informative techniques active? */ + bool info_on; + /**@name Marker segment fields */ + /*@{*/ + /** two bytes for the length of EPC MS, exluding the marker itself (9 to 65535 bytes) */ + unsigned short int Lepc; + /** two bytes, CRC for the EPC, excluding Pcrc itself */ + unsigned short int Pcrc; + /** four bytes, the codestream length from SOC to EOC */ + unsigned long int DL; + /** one byte, signals JPWL techniques adoption */ + unsigned char Pepc; + /** EPC data, variable length */ + unsigned char *data; + /*@}*/ +} jpwl_epc_ms_t; + +/** +ESD (Error Sensitivity Descriptor) Marker segment +*/ +typedef struct jpwl_esd_ms { + /** codestream addressing mode [0=packet, 1=byte range, 2=packet range, 3=reserved] */ + unsigned char addrm; + /** size of codestream addresses [2/4 bytes] */ + unsigned char ad_size; + /** type of sensitivity + [0=relative error, 1=MSE, 2=MSE reduction, 3=PSNR, 4=PSNR increment, + 5=MAXERR (absolute peak error), 6=TSE (total squared error), 7=reserved */ + unsigned char senst; + /** size of sensitivity data (1/2 bytes) */ + unsigned char se_size; + /**@name Marker segment fields */ + /*@{*/ + /** two bytes for the length of ESD MS, exluding the marker itself (4 to 65535 bytes) */ + unsigned short int Lesd; + /** two bytes, component of error sensitivity */ + unsigned short int Cesd; + /** one byte, signals JPWL techniques adoption */ + unsigned char Pesd; + /** ESD data, variable length */ + unsigned char *data; + /*@}*/ + /**@name Fields set by esd_create (only internal use) */ + /*@{*/ + /** number of components in the image */ + int numcomps; + /** tile where this marker has been placed (-1 means MH) */ + int tileno; + /** number of sensitivity values */ + unsigned long int svalnum; + /** size of a single sensitivity pair (address+value) */ + size_t sensval_size; + /*@}*/ +} jpwl_esd_ms_t; + +/** +RED (Residual Error Descriptor) Marker segment +*/ +typedef struct jpwl_red_ms { + /** two bytes for the length of RED MS, exluding the marker itself (3 to 65535 bytes) */ + unsigned short int Lred; + /** one byte, signals JPWL techniques adoption */ + unsigned char Pred; + /** RED data, variable length */ + unsigned char *data; +} jpwl_red_ms_t; + +/** +Structure used to store JPWL markers temporary position and readyness +*/ +typedef struct jpwl_marker { + /** marker value (J2K_MS_EPC, etc.) */ + int id; + /** union keeping the pointer to the real marker struct */ + union jpwl_marks { + /** pointer to EPB marker */ + jpwl_epb_ms_t *epbmark; + /** pointer to EPC marker */ + jpwl_epc_ms_t *epcmark; + /** pointer to ESD marker */ + jpwl_esd_ms_t *esdmark; + /** pointer to RED marker */ + jpwl_red_ms_t *redmark; + } m; + /** position where the marker should go, in the pre-JPWL codestream */ + unsigned long int pos; + /** same as before, only written as a double, so we can sort it better */ + double dpos; + /** length of the marker segment (marker excluded) */ + unsigned short int len; + /** the marker length is ready or not? */ + bool len_ready; + /** the marker position is ready or not? */ + bool pos_ready; + /** the marker parameters are ready or not? */ + bool parms_ready; + /** are the written data ready or not */ + bool data_ready; +} jpwl_marker_t; + +/** +Encode according to JPWL specs +@param j2k J2K handle +@param cio codestream handle +@param image image handle +*/ +void jpwl_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image); + +/** +Prepare the list of JPWL markers, after the Part 1 codestream +has been finalized (index struct is full) +@param j2k J2K handle +@param cio codestream handle +@param image image handle +*/ +void jpwl_prepare_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image); + +/** +Dump the list of JPWL markers, after it has been prepared +@param j2k J2K handle +@param cio codestream handle +@param image image handle +*/ +void jpwl_dump_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image); + +/** +Read the EPC marker (Error Protection Capability) +@param j2k J2K handle +*/ +void j2k_read_epc(opj_j2k_t *j2k); + +/** +Write the EPC marker (Error Protection Capability), BUT the DL field is always set to 0 +(this simplifies the management of EPBs and it is openly stated in the standard +as a possible value, mening that the information is not available) and the informative techniques +are not yet implemented +@param j2k J2K handle +*/ +void j2k_write_epc(opj_j2k_t *j2k); + +/** +Read the EPB marker (Error Protection Block) +@param j2k J2K handle +*/ +void j2k_read_epb(opj_j2k_t *j2k); + +/** +Write the EPB marker (Error Protection Block) +@param j2k J2K handle +*/ +void j2k_write_epb(opj_j2k_t *j2k); + +/** +Read the ESD marker (Error Sensitivity Descriptor) +@param j2k J2K handle +*/ +void j2k_read_esd(opj_j2k_t *j2k); + +/** +Read the RED marker (Residual Error Descriptor) +@param j2k J2K handle +*/ +void j2k_read_red(opj_j2k_t *j2k); + +/** create an EPB marker segment +@param j2k J2K compressor handle +@param latest it is the latest EPB in the header +@param packed EPB is in packed style +@param tileno tile number where the marker has been placed (-1 means MH) +@param idx current EPB running index +@param hprot applied protection type (-1/0,1,16,32,37-128) +@param pre_len length of pre-protected data +@param post_len length of post-protected data +@return returns the freshly created EPB +*/ +jpwl_epb_ms_t *jpwl_epb_create(opj_j2k_t *j2k, bool latest, bool packed, int tileno, int idx, int hprot, + unsigned long int pre_len, unsigned long int post_len); + +/** add a number of EPB marker segments +@param j2k J2K compressor handle +@param jwmarker pointer to the JPWL markers list +@param jwmarker_num pointer to the number of JPWL markers (gets updated) +@param latest it is the latest group of EPBs in the header +@param packed EPBs are in packed style +@param insideMH it is in the MH +@param idx pointer to the starting EPB running index (gets updated) +@param hprot applied protection type (-1/0,1,16,32,37-128) +@param place_pos place in original codestream where EPBs should go +@param tileno tile number of these EPBs +@param pre_len length of pre-protected data +@param post_len length of post-protected data +@return returns the length of all added markers +*/ +int jpwl_epbs_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num, + bool latest, bool packed, bool insideMH, int *idx, int hprot, + double place_pos, int tileno, + unsigned long int pre_len, unsigned long int post_len); + +/** add a number of ESD marker segments +@param j2k J2K compressor handle +@param jwmarker pointer to the JPWL markers list +@param jwmarker_num pointer to the number of JPWL markers (gets updated) +@param comps considered component (-1=average, 0/1/2/...=component no.) +@param addrm addressing mode (0=packet, 1=byte range, 2=packet range, 3=reserved) +@param ad_size size of addresses (2/4 bytes) +@param senst sensitivity type +@param se_size sensitivity values size (1/2 bytes) +@param place_pos place in original codestream where EPBs should go +@param tileno tile number of these EPBs +@return returns the length of all added markers +*/ +int jpwl_esds_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num, + int comps, unsigned char addrm, unsigned char ad_size, + unsigned char senst, unsigned char se_size, + double place_pos, int tileno); + +/** updates the information structure by modifying the positions and lengths +@param j2k J2K compressor handle +@param jwmarker pointer to JPWL markers list +@param jwmarker_num number of JPWL markers +@return returns true in case of success +*/ +bool jpwl_update_info(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int jwmarker_num); + + +bool jpwl_esd_fill(opj_j2k_t *j2k, jpwl_esd_ms_t *esdmark, unsigned char *buf); + +bool jpwl_epb_fill(opj_j2k_t *j2k, jpwl_epb_ms_t *epbmark, unsigned char *buf, unsigned char *post_buf); + +void j2k_add_marker(opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len); + +/** corrects the data in the JPWL codestream +@param j2k J2K compressor handle +@return true if correction is performed correctly +*/ +bool jpwl_correct(opj_j2k_t *j2k); + +/** corrects the data protected by an EPB +@param j2k J2K compressor handle +@param buffer pointer to the EPB position +@param type type of EPB: 0=MH, 1=TPH, 2=other, 3=auto +@param pre_len length of pre-data +@param post_len length of post_data +@param conn is a pointer to the length of all connected (packed) EPBs +@param L4_bufp is a pointer to the buffer pointer of redundancy data +@return returns true if correction could be succesfully performed +*/ +bool jpwl_epb_correct(opj_j2k_t *j2k, unsigned char *buffer, int type, int pre_len, int post_len, int *conn, + unsigned char **L4_bufp); + +/** check that a tile and its children have valid data +@param j2k J2K decompressor handle +@param tcd Tile decompressor handle +@param tileno number of the tile to check +*/ +bool jpwl_check_tile(opj_j2k_t *j2k, opj_tcd_t *tcd, int tileno); + +/** Macro functions for CRC computation */ + +/** +Computes the CRC-16, as stated in JPWL specs +@param CRC two bytes containing the CRC value (must be initialized with 0x0000) +@param DATA byte for which the CRC is computed; call this on every byte of the sequence +and get the CRC at the end +*/ +#define jpwl_updateCRC16(CRC, DATA) updateCRC16(CRC, DATA) + +/** +Computes the CRC-32, as stated in JPWL specs +@param CRC four bytes containing the CRC value (must be initialized with 0x00000000) +@param DATA byte for which the CRC is computed; call this on every byte of the sequence +and get the CRC at the end +*/ +#define jpwl_updateCRC32(CRC, DATA) updateCRC32(CRC, DATA) + +/** +Computes the minimum between two integers +@param a first integer to compare +@param b second integer to compare +@return returns the minimum integer between a and b +*/ +#ifndef min +#define min(a,b) (((a) < (b)) ? (a) : (b)) +#endif /* min */ + +/*@}*/ + +#endif /* USE_JPWL */ + +#ifdef USE_JPSEC + +/** @defgroup JPSEC JPSEC - JPEG-2000 Part 8 (JPSEC) codestream manager */ +/*@{*/ + +/** +Read the SEC marker (SEcured Codestream) +@param j2k J2K handle +*/ +void j2k_read_sec(opj_j2k_t *j2k); + +/** +Write the SEC marker (SEcured Codestream) +@param j2k J2K handle +*/ +void j2k_write_sec(opj_j2k_t *j2k); + +/** +Read the INSEC marker (SEcured Codestream) +@param j2k J2K handle +*/ +void j2k_read_insec(opj_j2k_t *j2k); + +/*@}*/ + +#endif /* USE_JPSEC */ + +#endif /* __JPWL_H */ + diff --git a/contrib/menuetlibc/openjpeg/jpwl/jpwl_lib.c b/contrib/menuetlibc/openjpeg/jpwl/jpwl_lib.c new file mode 100644 index 0000000000..90391b01c5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/jpwl_lib.c @@ -0,0 +1,1796 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef USE_JPWL + +#include "../libopenjpeg/opj_includes.h" +#include + +/** Minimum and maximum values for the double->pfp conversion */ +#define MIN_V1 0.0 +#define MAX_V1 17293822569102704640.0 +#define MIN_V2 0.000030517578125 +#define MAX_V2 131040.0 + +/** conversion between a double precision floating point +number and the corresponding pseudo-floating point used +to represent sensitivity values +@param V the double precision value +@param bytes the number of bytes of the representation +@return the pseudo-floating point value (cast accordingly) +*/ +unsigned short int jpwl_double_to_pfp(double V, int bytes); + +/** conversion between a pseudo-floating point used +to represent sensitivity values and the corresponding +double precision floating point number +@param em the pseudo-floating point value (cast accordingly) +@param bytes the number of bytes of the representation +@return the double precision value +*/ +double jpwl_pfp_to_double(unsigned short int em, int bytes); + + /*-------------------------------------------------------------*/ + +int jpwl_markcomp(const void *arg1, const void *arg2) +{ + /* Compare the two markers' positions */ + double diff = (((jpwl_marker_t *) arg1)->dpos - ((jpwl_marker_t *) arg2)->dpos); + + if (diff == 0.0) + return (0); + else if (diff < 0) + return (-1); + else + return (+1); +} + +int jpwl_epbs_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num, + bool latest, bool packed, bool insideMH, int *idx, int hprot, + double place_pos, int tileno, + unsigned long int pre_len, unsigned long int post_len) { + + jpwl_epb_ms_t *epb_mark = NULL; + + int k_pre, k_post, n_pre, n_post; + + unsigned long int L1, L2, dL4, max_postlen, epbs_len = 0; + + /* We find RS(n,k) for EPB parms and pre-data, if any */ + if (insideMH && (*idx == 0)) { + /* First EPB in MH */ + k_pre = 64; + n_pre = 160; + } else if (!insideMH && (*idx == 0)) { + /* First EPB in TH */ + k_pre = 25; + n_pre = 80; + } else { + /* Following EPBs in MH or TH */ + k_pre = 13; + n_pre = 40; + }; + + /* Find lengths, Figs. B3 and B4 */ + /* size of pre data: pre_buf(pre_len) + EPB(2) + Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) */ + L1 = pre_len + 13; + + /* size of pre-data redundancy */ + /* (redundancy per codeword) * (number of codewords, rounded up) */ + L2 = (n_pre - k_pre) * (unsigned long int) ceil((double) L1 / (double) k_pre); + + /* Find protection type for post data and its associated redundancy field length*/ + if ((hprot == 16) || (hprot == 32)) { + /* there is a CRC for post-data */ + k_post = post_len; + n_post = post_len + (hprot >> 3); + /*L3 = hprot >> 3;*/ /* 2 (CRC-16) or 4 (CRC-32) bytes */ + + } else if ((hprot >= 37) && (hprot <= 128)) { + /* there is a RS for post-data */ + k_post = 32; + n_post = hprot; + + } else { + /* Use predefined codes */ + n_post = n_pre; + k_post = k_pre; + }; + + /* Create the EPB(s) */ + while (post_len > 0) { + + /* maximum postlen in order to respect EPB size + (we use JPWL_MAXIMUM_EPB_ROOM instead of 65535 for keeping room for EPB parms)*/ + /* (message word size) * (number of containable parity words) */ + max_postlen = k_post * (unsigned long int) floor((double) JPWL_MAXIMUM_EPB_ROOM / (double) (n_post - k_post)); + + /* maximum postlen in order to respect EPB size */ + if (*idx == 0) + /* (we use (JPWL_MAXIMUM_EPB_ROOM - L2) instead of 65535 for keeping room for EPB parms + pre-data) */ + /* (message word size) * (number of containable parity words) */ + max_postlen = k_post * (unsigned long int) floor((double) (JPWL_MAXIMUM_EPB_ROOM - L2) / (double) (n_post - k_post)); + + else + /* (we use JPWL_MAXIMUM_EPB_ROOM instead of 65535 for keeping room for EPB parms) */ + /* (message word size) * (number of containable parity words) */ + max_postlen = k_post * (unsigned long int) floor((double) JPWL_MAXIMUM_EPB_ROOM / (double) (n_post - k_post)); + + /* null protection case */ + /* the max post length can be as large as the LDPepb field can host */ + if (hprot == 0) + max_postlen = INT_MAX; + + /* length to use */ + dL4 = min(max_postlen, post_len); + + if ((epb_mark = jpwl_epb_create( + j2k, /* this encoder handle */ + latest ? (dL4 < max_postlen) : false, /* is it the latest? */ + packed, /* is it packed? */ + tileno, /* we are in TPH */ + *idx, /* its index */ + hprot, /* protection type parameters of following data */ + 0, /* pre-data: nothing for now */ + dL4 /* post-data: the stub computed previously */ + ))) { + + /* Add this marker to the 'insertanda' list */ + if (*jwmarker_num < JPWL_MAX_NO_MARKERS) { + jwmarker[*jwmarker_num].id = J2K_MS_EPB; /* its type */ + jwmarker[*jwmarker_num].m.epbmark = epb_mark; /* the EPB */ + jwmarker[*jwmarker_num].pos = (int) place_pos; /* after SOT */ + jwmarker[*jwmarker_num].dpos = place_pos + 0.0000001 * (double)(*idx); /* not very first! */ + jwmarker[*jwmarker_num].len = epb_mark->Lepb; /* its length */ + jwmarker[*jwmarker_num].len_ready = true; /* ready */ + jwmarker[*jwmarker_num].pos_ready = true; /* ready */ + jwmarker[*jwmarker_num].parms_ready = true; /* ready */ + jwmarker[*jwmarker_num].data_ready = false; /* not ready */ + (*jwmarker_num)++; + } + + /* increment epb index */ + (*idx)++; + + /* decrease postlen */ + post_len -= dL4; + + /* increase the total length of EPBs */ + epbs_len += epb_mark->Lepb + 2; + + } else { + /* ooops, problems */ + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH EPB for UEP in tile %d\n", tileno); + }; + } + + return epbs_len; +} + + +jpwl_epb_ms_t *jpwl_epb_create(opj_j2k_t *j2k, bool latest, bool packed, int tileno, int idx, int hprot, + unsigned long int pre_len, unsigned long int post_len) { + + jpwl_epb_ms_t *epb = NULL; + /*unsigned short int data_len = 0;*/ + unsigned short int L2, L3; + unsigned long int L1, L4; + /*unsigned char *predata_in = NULL;*/ + + bool insideMH = (tileno == -1); + + /* Alloc space */ + if (!(epb = (jpwl_epb_ms_t *) opj_malloc((size_t) 1 * sizeof (jpwl_epb_ms_t)))) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for one EPB MS\n"); + return NULL; + }; + + /* We set RS(n,k) for EPB parms and pre-data, if any */ + if (insideMH && (idx == 0)) { + /* First EPB in MH */ + epb->k_pre = 64; + epb->n_pre = 160; + } else if (!insideMH && (idx == 0)) { + /* First EPB in TH */ + epb->k_pre = 25; + epb->n_pre = 80; + } else { + /* Following EPBs in MH or TH */ + epb->k_pre = 13; + epb->n_pre = 40; + }; + + /* Find lengths, Figs. B3 and B4 */ + /* size of pre data: pre_buf(pre_len) + EPB(2) + Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) */ + L1 = pre_len + 13; + epb->pre_len = pre_len; + + /* size of pre-data redundancy */ + /* (redundancy per codeword) * (number of codewords, rounded up) */ + L2 = (epb->n_pre - epb->k_pre) * (unsigned short int) ceil((double) L1 / (double) epb->k_pre); + + /* length of post-data */ + L4 = post_len; + epb->post_len = post_len; + + /* Find protection type for post data and its associated redundancy field length*/ + if ((hprot == 16) || (hprot == 32)) { + /* there is a CRC for post-data */ + epb->Pepb = 0x10000000 | ((unsigned long int) hprot >> 5); /* 0=CRC-16, 1=CRC-32 */ + epb->k_post = post_len; + epb->n_post = post_len + (hprot >> 3); + /*L3 = hprot >> 3;*/ /* 2 (CRC-16) or 4 (CRC-32) bytes */ + + } else if ((hprot >= 37) && (hprot <= 128)) { + /* there is a RS for post-data */ + epb->Pepb = 0x20000020 | (((unsigned long int) hprot & 0x000000FF) << 8); + epb->k_post = 32; + epb->n_post = hprot; + + } else if (hprot == 1) { + /* Use predefined codes */ + epb->Pepb = (unsigned long int) 0x00000000; + epb->n_post = epb->n_pre; + epb->k_post = epb->k_pre; + + } else if (hprot == 0) { + /* Placeholder EPB: only protects its parameters, no protection method */ + epb->Pepb = (unsigned long int) 0xFFFFFFFF; + epb->n_post = 1; + epb->k_post = 1; + + } else { + opj_event_msg(j2k->cinfo, EVT_ERROR, "Invalid protection value for EPB h = %d\n", hprot); + return NULL; + } + + epb->hprot = hprot; + + /* (redundancy per codeword) * (number of codewords, rounded up) */ + L3 = (epb->n_post - epb->k_post) * (unsigned short int) ceil((double) L4 / (double) epb->k_post); + + /* private fields */ + epb->tileno = tileno; + + /* Fill some fields of the EPB */ + + /* total length of the EPB MS (less the EPB marker itself): */ + /* Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) + pre_redundancy + post-redundancy */ + epb->Lepb = 11 + L2 + L3; + + /* EPB style */ + epb->Depb = ((packed & 0x0001) << 7) | ((latest & 0x0001) << 6) | (idx & 0x003F); + + /* length of data protected by EPB: */ + epb->LDPepb = L1 + L4; + + return epb; +} + +void jpwl_epb_write(opj_j2k_t *j2k, jpwl_epb_ms_t *epb, unsigned char *buf) { + + /* Marker */ + *(buf++) = (unsigned char) (J2K_MS_EPB >> 8); + *(buf++) = (unsigned char) (J2K_MS_EPB >> 0); + + /* Lepb */ + *(buf++) = (unsigned char) (epb->Lepb >> 8); + *(buf++) = (unsigned char) (epb->Lepb >> 0); + + /* Depb */ + *(buf++) = (unsigned char) (epb->Depb >> 0); + + /* LDPepb */ + *(buf++) = (unsigned char) (epb->LDPepb >> 24); + *(buf++) = (unsigned char) (epb->LDPepb >> 16); + *(buf++) = (unsigned char) (epb->LDPepb >> 8); + *(buf++) = (unsigned char) (epb->LDPepb >> 0); + + /* Pepb */ + *(buf++) = (unsigned char) (epb->Pepb >> 24); + *(buf++) = (unsigned char) (epb->Pepb >> 16); + *(buf++) = (unsigned char) (epb->Pepb >> 8); + *(buf++) = (unsigned char) (epb->Pepb >> 0); + + /* Data */ + /*memcpy(buf, epb->data, (size_t) epb->Lepb - 11);*/ + memset(buf, 0, (size_t) epb->Lepb - 11); + + /* update markers struct */ + j2k_add_marker(j2k->cstr_info, J2K_MS_EPB, -1, epb->Lepb + 2); + +}; + + +jpwl_epc_ms_t *jpwl_epc_create(opj_j2k_t *j2k, bool esd_on, bool red_on, bool epb_on, bool info_on) { + + jpwl_epc_ms_t *epc = NULL; + + /* Alloc space */ + if (!(epc = (jpwl_epc_ms_t *) opj_malloc((size_t) 1 * sizeof (jpwl_epc_ms_t)))) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for EPC MS\n"); + return NULL; + }; + + /* Set the EPC parameters */ + epc->esd_on = esd_on; + epc->epb_on = epb_on; + epc->red_on = red_on; + epc->info_on = info_on; + + /* Fill the EPC fields with default values */ + epc->Lepc = 9; + epc->Pcrc = 0x0000; + epc->DL = 0x00000000; + epc->Pepc = ((j2k->cp->esd_on & 0x0001) << 4) | ((j2k->cp->red_on & 0x0001) << 5) | + ((j2k->cp->epb_on & 0x0001) << 6) | ((j2k->cp->info_on & 0x0001) << 7); + + return (epc); +} + +bool jpwl_epb_fill(opj_j2k_t *j2k, jpwl_epb_ms_t *epb, unsigned char *buf, unsigned char *post_buf) { + + unsigned long int L1, L2, L3, L4; + int remaining; + unsigned long int P, NN_P; + + /* Operating buffer */ + static unsigned char codeword[NN], *parityword; + + unsigned char *L1_buf, *L2_buf; + /* these ones are static, since we need to keep memory of + the exact place from one call to the other */ + static unsigned char *L3_buf, *L4_buf; + + /* some consistency check */ + if (!buf) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "There is no operating buffer for EPBs\n"); + return false; + } + + if (!post_buf && !L4_buf) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "There is no operating buffer for EPBs data\n"); + return false; + } + + /* + * Compute parity bytes on pre-data, ALWAYS present (at least only for EPB parms) + */ + + /* Initialize RS structures */ + P = epb->n_pre - epb->k_pre; + NN_P = NN - P; + memset(codeword, 0, NN); + parityword = codeword + NN_P; + init_rs(NN_P); + + /* pre-data begins pre_len bytes before of EPB buf */ + L1_buf = buf - epb->pre_len; + L1 = epb->pre_len + 13; + + /* redundancy for pre-data begins immediately after EPB parms */ + L2_buf = buf + 13; + L2 = (epb->n_pre - epb->k_pre) * (unsigned short int) ceil((double) L1 / (double) epb->k_pre); + + /* post-data + the position of L4 buffer can be: + 1) passed as a parameter: in that case use it + 2) null: in that case use the previous (static) one + */ + if (post_buf) + L4_buf = post_buf; + L4 = epb->post_len; + + /* post-data redundancy begins immediately after pre-data redundancy */ + L3_buf = L2_buf + L2; + L3 = (epb->n_post - epb->k_post) * (unsigned short int) ceil((double) L4 / (double) epb->k_post); + + /* let's check whether EPB length is sufficient to contain all these data */ + if (epb->Lepb < (11 + L2 + L3)) + opj_event_msg(j2k->cinfo, EVT_ERROR, "There is no room in EPB data field for writing redundancy data\n"); + /*printf("Env. %d, nec. %d (%d + %d)\n", epb->Lepb - 11, L2 + L3, L2, L3);*/ + + /* Compute redundancy of pre-data message words */ + remaining = L1; + while (remaining) { + + /* copy message data into codeword buffer */ + if (remaining < epb->k_pre) { + /* the last message word is zero-padded */ + memset(codeword, 0, NN); + memcpy(codeword, L1_buf, remaining); + L1_buf += remaining; + remaining = 0; + + } else { + memcpy(codeword, L1_buf, epb->k_pre); + L1_buf += epb->k_pre; + remaining -= epb->k_pre; + + } + + /* Encode the buffer and obtain parity bytes */ + if (encode_rs(codeword, parityword)) + opj_event_msg(j2k->cinfo, EVT_WARNING, + "Possible encoding error in codeword @ position #%d\n", (L1_buf - buf) / epb->k_pre); + + /* copy parity bytes only in redundancy buffer */ + memcpy(L2_buf, parityword, P); + + /* advance parity buffer */ + L2_buf += P; + } + + /* + * Compute parity bytes on post-data, may be absent if there are no data + */ + /*printf("Hprot is %d (tileno=%d, k_pre=%d, n_pre=%d, k_post=%d, n_post=%d, pre_len=%d, post_len=%d)\n", + epb->hprot, epb->tileno, epb->k_pre, epb->n_pre, epb->k_post, epb->n_post, epb->pre_len, + epb->post_len);*/ + if (epb->hprot < 0) { + + /* there should be no EPB */ + + } else if (epb->hprot == 0) { + + /* no protection for the data */ + /* advance anyway */ + L4_buf += epb->post_len; + + } else if (epb->hprot == 16) { + + /* CRC-16 */ + unsigned short int mycrc = 0x0000; + + /* compute the CRC field (excluding itself) */ + remaining = L4; + while (remaining--) + jpwl_updateCRC16(&mycrc, *(L4_buf++)); + + /* write the CRC field */ + *(L3_buf++) = (unsigned char) (mycrc >> 8); + *(L3_buf++) = (unsigned char) (mycrc >> 0); + + } else if (epb->hprot == 32) { + + /* CRC-32 */ + unsigned long int mycrc = 0x00000000; + + /* compute the CRC field (excluding itself) */ + remaining = L4; + while (remaining--) + jpwl_updateCRC32(&mycrc, *(L4_buf++)); + + /* write the CRC field */ + *(L3_buf++) = (unsigned char) (mycrc >> 24); + *(L3_buf++) = (unsigned char) (mycrc >> 16); + *(L3_buf++) = (unsigned char) (mycrc >> 8); + *(L3_buf++) = (unsigned char) (mycrc >> 0); + + } else { + + /* RS */ + + /* Initialize RS structures */ + P = epb->n_post - epb->k_post; + NN_P = NN - P; + memset(codeword, 0, NN); + parityword = codeword + NN_P; + init_rs(NN_P); + + /* Compute redundancy of post-data message words */ + remaining = L4; + while (remaining) { + + /* copy message data into codeword buffer */ + if (remaining < epb->k_post) { + /* the last message word is zero-padded */ + memset(codeword, 0, NN); + memcpy(codeword, L4_buf, remaining); + L4_buf += remaining; + remaining = 0; + + } else { + memcpy(codeword, L4_buf, epb->k_post); + L4_buf += epb->k_post; + remaining -= epb->k_post; + + } + + /* Encode the buffer and obtain parity bytes */ + if (encode_rs(codeword, parityword)) + opj_event_msg(j2k->cinfo, EVT_WARNING, + "Possible encoding error in codeword @ position #%d\n", (L4_buf - buf) / epb->k_post); + + /* copy parity bytes only in redundancy buffer */ + memcpy(L3_buf, parityword, P); + + /* advance parity buffer */ + L3_buf += P; + } + + } + + return true; +} + + +bool jpwl_correct(opj_j2k_t *j2k) { + + opj_cio_t *cio = j2k->cio; + bool status; + static bool mh_done = false; + int mark_pos, id, len, skips, sot_pos; + unsigned long int Psot = 0; + + /* go back to marker position */ + mark_pos = cio_tell(cio) - 2; + cio_seek(cio, mark_pos); + + if ((j2k->state == J2K_STATE_MHSOC) && !mh_done) { + + int mark_val = 0, skipnum = 0; + + /* + COLOR IMAGE + first thing to do, if we are here, is to look whether + 51 (skipnum) positions ahead there is an EPB, in case of MH + */ + /* + B/W IMAGE + first thing to do, if we are here, is to look whether + 45 (skipnum) positions ahead there is an EPB, in case of MH + */ + /* SIZ SIZ_FIELDS SIZ_COMPS FOLLOWING_MARKER */ + skipnum = 2 + 38 + 3 * j2k->cp->exp_comps + 2; + if ((cio->bp + skipnum) < cio->end) { + + cio_skip(cio, skipnum); + + /* check that you are not going beyond the end of codestream */ + + /* call EPB corrector */ + status = jpwl_epb_correct(j2k, /* J2K decompressor handle */ + cio->bp, /* pointer to EPB in codestream buffer */ + 0, /* EPB type: MH */ + skipnum, /* length of pre-data */ + -1, /* length of post-data: -1 means auto */ + NULL, + NULL + ); + + /* read the marker value */ + mark_val = (*(cio->bp) << 8) | *(cio->bp + 1); + + if (status && (mark_val == J2K_MS_EPB)) { + /* we found it! */ + mh_done = true; + return true; + } + + /* Disable correction in case of missing or bad head EPB */ + /* We can't do better! */ + /* PATCHED: 2008-01-25 */ + /* MOVED UP: 2008-02-01 */ + if (!status) { + j2k->cp->correct = false; + opj_event_msg(j2k->cinfo, EVT_WARNING, "Couldn't find the MH EPB: disabling JPWL\n"); + } + + } + + } + + if (true /*(j2k->state == J2K_STATE_TPHSOT) || (j2k->state == J2K_STATE_TPH)*/) { + /* else, look if 12 positions ahead there is an EPB, in case of TPH */ + cio_seek(cio, mark_pos); + if ((cio->bp + 12) < cio->end) { + + cio_skip(cio, 12); + + /* call EPB corrector */ + status = jpwl_epb_correct(j2k, /* J2K decompressor handle */ + cio->bp, /* pointer to EPB in codestream buffer */ + 1, /* EPB type: TPH */ + 12, /* length of pre-data */ + -1, /* length of post-data: -1 means auto */ + NULL, + NULL + ); + if (status) + /* we found it! */ + return true; + } + } + + return false; + + /* for now, don't use this code */ + + /* else, look if here is an EPB, in case of other */ + if (mark_pos > 64) { + /* it cannot stay before the first MH EPB */ + cio_seek(cio, mark_pos); + cio_skip(cio, 0); + + /* call EPB corrector */ + status = jpwl_epb_correct(j2k, /* J2K decompressor handle */ + cio->bp, /* pointer to EPB in codestream buffer */ + 2, /* EPB type: TPH */ + 0, /* length of pre-data */ + -1, /* length of post-data: -1 means auto */ + NULL, + NULL + ); + if (status) + /* we found it! */ + return true; + } + + /* nope, no EPBs probably, or they are so damaged that we can give up */ + return false; + + return true; + + /* AN ATTEMPT OF PARSER */ + /* NOT USED ACTUALLY */ + + /* go to the beginning of the file */ + cio_seek(cio, 0); + + /* let's begin */ + j2k->state = J2K_STATE_MHSOC; + + /* cycle all over the markers */ + while (cio_tell(cio) < cio->length) { + + /* read the marker */ + mark_pos = cio_tell(cio); + id = cio_read(cio, 2); + + /* details */ + printf("Marker@%d: %X\n", cio_tell(cio) - 2, id); + + /* do an action in response to the read marker */ + switch (id) { + + /* short markers */ + + /* SOC */ + case J2K_MS_SOC: + j2k->state = J2K_STATE_MHSIZ; + len = 0; + skips = 0; + break; + + /* EOC */ + case J2K_MS_EOC: + j2k->state = J2K_STATE_MT; + len = 0; + skips = 0; + break; + + /* particular case of SOD */ + case J2K_MS_SOD: + len = Psot - (mark_pos - sot_pos) - 2; + skips = len; + break; + + /* long markers */ + + /* SOT */ + case J2K_MS_SOT: + j2k->state = J2K_STATE_TPH; + sot_pos = mark_pos; /* position of SOT */ + len = cio_read(cio, 2); /* read the length field */ + cio_skip(cio, 2); /* this field is unnecessary */ + Psot = cio_read(cio, 4); /* tile length */ + skips = len - 8; + break; + + /* remaining */ + case J2K_MS_SIZ: + j2k->state = J2K_STATE_MH; + /* read the length field */ + len = cio_read(cio, 2); + skips = len - 2; + break; + + /* remaining */ + default: + /* read the length field */ + len = cio_read(cio, 2); + skips = len - 2; + break; + + } + + /* skip to marker's end */ + cio_skip(cio, skips); + + } + + +} + +bool jpwl_epb_correct(opj_j2k_t *j2k, unsigned char *buffer, int type, int pre_len, int post_len, int *conn, + unsigned char **L4_bufp) { + + /* Operating buffer */ + unsigned char codeword[NN], *parityword; + + unsigned long int P, NN_P; + unsigned long int L1, L4; + int remaining, n_pre, k_pre, n_post, k_post; + + int status, tt; + + int orig_pos = cio_tell(j2k->cio); + + unsigned char *L1_buf, *L2_buf; + unsigned char *L3_buf, *L4_buf; + + unsigned long int LDPepb, Pepb; + unsigned short int Lepb; + unsigned char Depb; + char str1[25] = ""; + int myconn, errnum = 0; + bool errflag = false; + + opj_cio_t *cio = j2k->cio; + + /* check for common errors */ + if (!buffer) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "The EPB pointer is a NULL buffer\n"); + return false; + } + + /* set bignesses */ + L1 = pre_len + 13; + + /* pre-data correction */ + switch (type) { + + case 0: + /* MH EPB */ + k_pre = 64; + n_pre = 160; + break; + + case 1: + /* TPH EPB */ + k_pre = 25; + n_pre = 80; + break; + + case 2: + /* other EPBs */ + k_pre = 13; + n_pre = 40; + break; + + case 3: + /* automatic setup */ + opj_event_msg(j2k->cinfo, EVT_ERROR, "Auto. setup not yet implemented\n"); + return false; + break; + + default: + /* unknown type */ + opj_event_msg(j2k->cinfo, EVT_ERROR, "Unknown expected EPB type\n"); + return false; + break; + + } + + /* Initialize RS structures */ + P = n_pre - k_pre; + NN_P = NN - P; + tt = (int) floor((float) P / 2.0F); /* correction capability of the code */ + memset(codeword, 0, NN); + parityword = codeword + NN_P; + init_rs(NN_P); + + /* Correct pre-data message words */ + L1_buf = buffer - pre_len; + L2_buf = buffer + 13; + remaining = L1; + while (remaining) { + + /* always zero-pad codewords */ + /* (this is required, since after decoding the zeros in the long codeword + could change, and keep unchanged in subsequent calls) */ + memset(codeword, 0, NN); + + /* copy codeword buffer into message bytes */ + if (remaining < k_pre) + memcpy(codeword, L1_buf, remaining); + else + memcpy(codeword, L1_buf, k_pre); + + /* copy redundancy buffer in parity bytes */ + memcpy(parityword, L2_buf, P); + + /* Decode the buffer and possibly obtain corrected bytes */ + status = eras_dec_rs(codeword, NULL, 0); + if (status == -1) { + /*if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_WARNING, + "Possible decoding error in codeword @ position #%d\n", (L1_buf - buffer) / k_pre);*/ + errflag = true; + /* we can try to safely get out from the function: + if we are here, either this is not an EPB or the first codeword + is too damaged to be helpful */ + /*return false;*/ + + } else if (status == 0) { + /*if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_INFO, "codeword is correctly decoded\n");*/ + + } else if (status <= tt) { + /* it has corrected 0 <= errs <= tt */ + /*if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_WARNING, "%d errors corrected in codeword\n", status);*/ + errnum += status; + + } else { + /*if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_WARNING, "EPB correction capability exceeded\n"); + return false;*/ + errflag = true; + } + + + /* advance parity buffer */ + if ((status >= 0) && (status <= tt)) + /* copy back corrected parity only if all is OK */ + memcpy(L2_buf, parityword, P); + L2_buf += P; + + /* advance message buffer */ + if (remaining < k_pre) { + if ((status >= 0) && (status <= tt)) + /* copy back corrected data only if all is OK */ + memcpy(L1_buf, codeword, remaining); + L1_buf += remaining; + remaining = 0; + + } else { + if ((status >= 0) && (status <= tt)) + /* copy back corrected data only if all is OK */ + memcpy(L1_buf, codeword, k_pre); + L1_buf += k_pre; + remaining -= k_pre; + + } + } + + /* print summary */ + if (!conn) { + + /*if (errnum) + opj_event_msg(j2k->cinfo, EVT_INFO, "+ %d symbol errors corrected (Ps=%.1e)\n", errnum, + (float) errnum / ((float) n_pre * (float) L1 / (float) k_pre));*/ + if (errflag) { + /*opj_event_msg(j2k->cinfo, EVT_INFO, "+ there were unrecoverable errors\n");*/ + return false; + } + + } + + /* presumably, now, EPB parameters are correct */ + /* let's get them */ + + /* Simply read the EPB parameters */ + if (conn) + cio->bp = buffer; + cio_skip(cio, 2); /* the marker */ + Lepb = cio_read(cio, 2); + Depb = cio_read(cio, 1); + LDPepb = cio_read(cio, 4); + Pepb = cio_read(cio, 4); + + /* What does Pepb tells us about the protection method? */ + if (((Pepb & 0xF0000000) >> 28) == 0) + sprintf(str1, "pred"); /* predefined */ + else if (((Pepb & 0xF0000000) >> 28) == 1) + sprintf(str1, "crc-%lu", 16 * ((Pepb & 0x00000001) + 1)); /* CRC mode */ + else if (((Pepb & 0xF0000000) >> 28) == 2) + sprintf(str1, "rs(%lu,32)", (Pepb & 0x0000FF00) >> 8); /* RS mode */ + else if (Pepb == 0xFFFFFFFF) + sprintf(str1, "nometh"); /* RS mode */ + else + sprintf(str1, "unknown"); /* unknown */ + + /* Now we write them to screen */ + if (!conn && post_len) + opj_event_msg(j2k->cinfo, EVT_INFO, + "EPB(%d): (%sl, %sp, %u), %lu, %s\n", + cio_tell(cio) - 13, + (Depb & 0x40) ? "" : "n", /* latest EPB or not? */ + (Depb & 0x80) ? "" : "n", /* packed or unpacked EPB? */ + (Depb & 0x3F), /* EPB index value */ + LDPepb, /*length of the data protected by the EPB */ + str1); /* protection method */ + + + /* well, we need to investigate how long is the connected length of packed EPBs */ + myconn = Lepb + 2; + if ((Depb & 0x40) == 0) /* not latest in header */ + jpwl_epb_correct(j2k, /* J2K decompressor handle */ + buffer + Lepb + 2, /* pointer to next EPB in codestream buffer */ + 2, /* EPB type: should be of other type */ + 0, /* only EPB fields */ + 0, /* do not look after */ + &myconn, + NULL + ); + if (conn) + *conn += myconn; + + /*if (!conn) + printf("connected = %d\n", myconn);*/ + + /*cio_seek(j2k->cio, orig_pos); + return true;*/ + + /* post-data + the position of L4 buffer is at the end of currently connected EPBs + */ + if (!(L4_bufp)) + L4_buf = buffer + myconn; + else if (!(*L4_bufp)) + L4_buf = buffer + myconn; + else + L4_buf = *L4_bufp; + if (post_len == -1) + L4 = LDPepb - pre_len - 13; + else if (post_len == 0) + L4 = 0; + else + L4 = post_len; + + L3_buf = L2_buf; + + /* Do a further check here on the read parameters */ + if (L4 > (unsigned long) cio_numbytesleft(j2k->cio)) + /* overflow */ + return false; + + /* we are ready for decoding the remaining data */ + if (((Pepb & 0xF0000000) >> 28) == 1) { + /* CRC here */ + if ((16 * ((Pepb & 0x00000001) + 1)) == 16) { + + /* CRC-16 */ + unsigned short int mycrc = 0x0000, filecrc = 0x0000; + + /* compute the CRC field */ + remaining = L4; + while (remaining--) + jpwl_updateCRC16(&mycrc, *(L4_buf++)); + + /* read the CRC field */ + filecrc = *(L3_buf++) << 8; + filecrc |= *(L3_buf++); + + /* check the CRC field */ + if (mycrc == filecrc) { + if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_INFO, "- CRC is OK\n"); + } else { + if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_WARNING, "- CRC is KO (r=%d, c=%d)\n", filecrc, mycrc); + errflag = true; + } + } + + if ((16 * ((Pepb & 0x00000001) + 1)) == 32) { + + /* CRC-32 */ + unsigned long int mycrc = 0x00000000, filecrc = 0x00000000; + + /* compute the CRC field */ + remaining = L4; + while (remaining--) + jpwl_updateCRC32(&mycrc, *(L4_buf++)); + + /* read the CRC field */ + filecrc = *(L3_buf++) << 24; + filecrc |= *(L3_buf++) << 16; + filecrc |= *(L3_buf++) << 8; + filecrc |= *(L3_buf++); + + /* check the CRC field */ + if (mycrc == filecrc) { + if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_INFO, "- CRC is OK\n"); + } else { + if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_WARNING, "- CRC is KO (r=%d, c=%d)\n", filecrc, mycrc); + errflag = true; + } + } + + } else if (Pepb == 0xFFFFFFFF) { + /* no method */ + + /* advance without doing anything */ + remaining = L4; + while (remaining--) + L4_buf++; + + } else if ((((Pepb & 0xF0000000) >> 28) == 2) || (((Pepb & 0xF0000000) >> 28) == 0)) { + /* RS coding here */ + + if (((Pepb & 0xF0000000) >> 28) == 0) { + + k_post = k_pre; + n_post = n_pre; + + } else { + + k_post = 32; + n_post = (Pepb & 0x0000FF00) >> 8; + } + + /* Initialize RS structures */ + P = n_post - k_post; + NN_P = NN - P; + tt = (int) floor((float) P / 2.0F); /* again, correction capability */ + memset(codeword, 0, NN); + parityword = codeword + NN_P; + init_rs(NN_P); + + /* Correct post-data message words */ + /*L4_buf = buffer + Lepb + 2;*/ + L3_buf = L2_buf; + remaining = L4; + while (remaining) { + + /* always zero-pad codewords */ + /* (this is required, since after decoding the zeros in the long codeword + could change, and keep unchanged in subsequent calls) */ + memset(codeword, 0, NN); + + /* copy codeword buffer into message bytes */ + if (remaining < k_post) + memcpy(codeword, L4_buf, remaining); + else + memcpy(codeword, L4_buf, k_post); + + /* copy redundancy buffer in parity bytes */ + memcpy(parityword, L3_buf, P); + + /* Decode the buffer and possibly obtain corrected bytes */ + status = eras_dec_rs(codeword, NULL, 0); + if (status == -1) { + /*if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_WARNING, + "Possible decoding error in codeword @ position #%d\n", (L4_buf - (buffer + Lepb + 2)) / k_post);*/ + errflag = true; + + } else if (status == 0) { + /*if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_INFO, "codeword is correctly decoded\n");*/ + + } else if (status <= tt) { + /*if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_WARNING, "%d errors corrected in codeword\n", status);*/ + errnum += status; + + } else { + /*if (conn == NULL) + opj_event_msg(j2k->cinfo, EVT_WARNING, "EPB correction capability exceeded\n"); + return false;*/ + errflag = true; + } + + + /* advance parity buffer */ + if ((status >= 0) && (status <= tt)) + /* copy back corrected data only if all is OK */ + memcpy(L3_buf, parityword, P); + L3_buf += P; + + /* advance message buffer */ + if (remaining < k_post) { + if ((status >= 0) && (status <= tt)) + /* copy back corrected data only if all is OK */ + memcpy(L4_buf, codeword, remaining); + L4_buf += remaining; + remaining = 0; + + } else { + if ((status >= 0) && (status <= tt)) + /* copy back corrected data only if all is OK */ + memcpy(L4_buf, codeword, k_post); + L4_buf += k_post; + remaining -= k_post; + + } + } + } + + /* give back the L4_buf address */ + if (L4_bufp) + *L4_bufp = L4_buf; + + /* print summary */ + if (!conn) { + + if (errnum) + opj_event_msg(j2k->cinfo, EVT_INFO, "- %d symbol errors corrected (Ps=%.1e)\n", errnum, + (float) errnum / (float) LDPepb); + if (errflag) + opj_event_msg(j2k->cinfo, EVT_INFO, "- there were unrecoverable errors\n"); + + } + + cio_seek(j2k->cio, orig_pos); + + return true; +} + +void jpwl_epc_write(opj_j2k_t *j2k, jpwl_epc_ms_t *epc, unsigned char *buf) { + + /* Marker */ + *(buf++) = (unsigned char) (J2K_MS_EPC >> 8); + *(buf++) = (unsigned char) (J2K_MS_EPC >> 0); + + /* Lepc */ + *(buf++) = (unsigned char) (epc->Lepc >> 8); + *(buf++) = (unsigned char) (epc->Lepc >> 0); + + /* Pcrc */ + *(buf++) = (unsigned char) (epc->Pcrc >> 8); + *(buf++) = (unsigned char) (epc->Pcrc >> 0); + + /* DL */ + *(buf++) = (unsigned char) (epc->DL >> 24); + *(buf++) = (unsigned char) (epc->DL >> 16); + *(buf++) = (unsigned char) (epc->DL >> 8); + *(buf++) = (unsigned char) (epc->DL >> 0); + + /* Pepc */ + *(buf++) = (unsigned char) (epc->Pepc >> 0); + + /* Data */ + /*memcpy(buf, epc->data, (size_t) epc->Lepc - 9);*/ + memset(buf, 0, (size_t) epc->Lepc - 9); + + /* update markers struct */ + j2k_add_marker(j2k->cstr_info, J2K_MS_EPC, -1, epc->Lepc + 2); + +}; + +int jpwl_esds_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num, + int comps, unsigned char addrm, unsigned char ad_size, + unsigned char senst, unsigned char se_size, + double place_pos, int tileno) { + + return 0; +} + +jpwl_esd_ms_t *jpwl_esd_create(opj_j2k_t *j2k, int comp, unsigned char addrm, unsigned char ad_size, + unsigned char senst, unsigned char se_size, int tileno, + unsigned long int svalnum, void *sensval) { + + jpwl_esd_ms_t *esd = NULL; + + /* Alloc space */ + if (!(esd = (jpwl_esd_ms_t *) opj_malloc((size_t) 1 * sizeof (jpwl_esd_ms_t)))) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for ESD MS\n"); + return NULL; + }; + + /* if relative sensitivity, activate byte range mode */ + if (senst == 0) + addrm = 1; + + /* size of sensval's ... */ + if ((ad_size != 0) && (ad_size != 2) && (ad_size != 4)) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "Address size %d for ESD MS is forbidden\n", ad_size); + return NULL; + } + if ((se_size != 1) && (se_size != 2)) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "Sensitivity size %d for ESD MS is forbidden\n", se_size); + return NULL; + } + + /* ... depends on the addressing mode */ + switch (addrm) { + + /* packet mode */ + case (0): + ad_size = 0; /* as per the standard */ + esd->sensval_size = se_size; + break; + + /* byte range */ + case (1): + /* auto sense address size */ + if (ad_size == 0) + /* if there are more than 66% of (2^16 - 1) bytes, switch to 4 bytes + (we keep space for possible EPBs being inserted) */ + ad_size = (j2k->cstr_info->codestream_size > (1 * 65535 / 3)) ? 4 : 2; + esd->sensval_size = ad_size + ad_size + se_size; + break; + + /* packet range */ + case (2): + /* auto sense address size */ + if (ad_size == 0) + /* if there are more than 2^16 - 1 packets, switch to 4 bytes */ + ad_size = (j2k->cstr_info->packno > 65535) ? 4 : 2; + esd->sensval_size = ad_size + ad_size + se_size; + break; + + case (3): + opj_event_msg(j2k->cinfo, EVT_ERROR, "Address mode %d for ESD MS is unimplemented\n", addrm); + return NULL; + + default: + opj_event_msg(j2k->cinfo, EVT_ERROR, "Address mode %d for ESD MS is forbidden\n", addrm); + return NULL; + } + + /* set or unset sensitivity values */ + if (svalnum <= 0) { + + switch (senst) { + + /* just based on the portions of a codestream */ + case (0): + /* MH + no. of THs + no. of packets */ + svalnum = 1 + (j2k->cstr_info->tw * j2k->cstr_info->th) * (1 + j2k->cstr_info->packno); + break; + + /* all the ones that are based on the packets */ + default: + if (tileno < 0) + /* MH: all the packets and all the tiles info is written */ + svalnum = j2k->cstr_info->tw * j2k->cstr_info->th * j2k->cstr_info->packno; + else + /* TPH: only that tile info is written */ + svalnum = j2k->cstr_info->packno; + break; + + } + } + + /* fill private fields */ + esd->senst = senst; + esd->ad_size = ad_size; + esd->se_size = se_size; + esd->addrm = addrm; + esd->svalnum = svalnum; + esd->numcomps = j2k->image->numcomps; + esd->tileno = tileno; + + /* Set the ESD parameters */ + /* length, excluding data field */ + if (esd->numcomps < 257) + esd->Lesd = 4 + (unsigned short int) (esd->svalnum * esd->sensval_size); + else + esd->Lesd = 5 + (unsigned short int) (esd->svalnum * esd->sensval_size); + + /* component data field */ + if (comp >= 0) + esd->Cesd = comp; + else + /* we are averaging */ + esd->Cesd = 0; + + /* Pesd field */ + esd->Pesd = 0x00; + esd->Pesd |= (esd->addrm & 0x03) << 6; /* addressing mode */ + esd->Pesd |= (esd->senst & 0x07) << 3; /* sensitivity type */ + esd->Pesd |= ((esd->se_size >> 1) & 0x01) << 2; /* sensitivity size */ + esd->Pesd |= ((esd->ad_size >> 2) & 0x01) << 1; /* addressing size */ + esd->Pesd |= (comp < 0) ? 0x01 : 0x00; /* averaging components */ + + /* if pointer to sensval is NULL, we can fill data field by ourselves */ + if (!sensval) { + + /* old code moved to jpwl_esd_fill() */ + esd->data = NULL; + + } else { + /* we set the data field as the sensitivity values poinnter passed to the function */ + esd->data = (unsigned char *) sensval; + } + + return (esd); +} + +bool jpwl_esd_fill(opj_j2k_t *j2k, jpwl_esd_ms_t *esd, unsigned char *buf) { + + int i; + unsigned long int vv; + unsigned long int addr1 = 0L, addr2 = 0L; + double dvalue = 0.0, Omax2, tmp, TSE = 0.0, MSE, oldMSE = 0.0, PSNR, oldPSNR = 0.0; + unsigned short int pfpvalue; + unsigned long int addrmask = 0x00000000; + bool doneMH = false, doneTPH = false; + + /* sensitivity values in image info are as follows: + - for each tile, distotile is the starting distortion for that tile, sum of all components + - for each packet in a tile, disto is the distortion reduction caused by that packet to that tile + - the TSE for a single tile should be given by distotile - sum(disto) , for all components + - the MSE for a single tile is given by TSE / nbpix , for all components + - the PSNR for a single tile is given by 10*log10( Omax^2 / MSE) , for all components + (Omax is given by 2^bpp - 1 for unsigned images and by 2^(bpp - 1) - 1 for signed images + */ + + /* browse all components and find Omax */ + Omax2 = 0.0; + for (i = 0; i < j2k->image->numcomps; i++) { + tmp = pow(2.0, (double) (j2k->image->comps[i].sgnd ? + (j2k->image->comps[i].bpp - 1) : (j2k->image->comps[i].bpp))) - 1; + if (tmp > Omax2) + Omax2 = tmp; + } + Omax2 = Omax2 * Omax2; + + /* if pointer of esd->data is not null, simply write down all the values byte by byte */ + if (esd->data) { + for (i = 0; i < (int) esd->svalnum; i++) + *(buf++) = esd->data[i]; + return true; + } + + /* addressing mask */ + if (esd->ad_size == 2) + addrmask = 0x0000FFFF; /* two bytes */ + else + addrmask = 0xFFFFFFFF; /* four bytes */ + + /* set on precise point where sensitivity starts */ + if (esd->numcomps < 257) + buf += 6; + else + buf += 7; + + /* let's fill the data fields */ + for (vv = (esd->tileno < 0) ? 0 : (j2k->cstr_info->packno * esd->tileno); vv < esd->svalnum; vv++) { + + int thistile = vv / j2k->cstr_info->packno, thispacket = vv % j2k->cstr_info->packno; + + /* skip for the hack some lines below */ + if (thistile == j2k->cstr_info->tw * j2k->cstr_info->th) + break; + + /* starting tile distortion */ + if (thispacket == 0) { + TSE = j2k->cstr_info->tile[thistile].distotile; + oldMSE = TSE / j2k->cstr_info->tile[thistile].numpix; + oldPSNR = 10.0 * log10(Omax2 / oldMSE); + } + + /* TSE */ + TSE -= j2k->cstr_info->tile[thistile].packet[thispacket].disto; + + /* MSE */ + MSE = TSE / j2k->cstr_info->tile[thistile].numpix; + + /* PSNR */ + PSNR = 10.0 * log10(Omax2 / MSE); + + /* fill the address range */ + switch (esd->addrm) { + + /* packet mode */ + case (0): + /* nothing, there is none */ + break; + + /* byte range */ + case (1): + /* start address of packet */ + addr1 = (j2k->cstr_info->tile[thistile].packet[thispacket].start_pos) & addrmask; + /* end address of packet */ + addr2 = (j2k->cstr_info->tile[thistile].packet[thispacket].end_pos) & addrmask; + break; + + /* packet range */ + case (2): + /* not implemented here */ + opj_event_msg(j2k->cinfo, EVT_WARNING, "Addressing mode packet_range is not implemented\n"); + break; + + /* unknown addressing method */ + default: + /* not implemented here */ + opj_event_msg(j2k->cinfo, EVT_WARNING, "Unknown addressing mode\n"); + break; + + } + + /* hack for writing relative sensitivity of MH and TPHs */ + if ((esd->senst == 0) && (thispacket == 0)) { + + /* possible MH */ + if ((thistile == 0) && !doneMH) { + /* we have to manage MH addresses */ + addr1 = 0; /* start of MH */ + addr2 = j2k->cstr_info->main_head_end; /* end of MH */ + /* set special dvalue for this MH */ + dvalue = -10.0; + doneMH = true; /* don't come here anymore */ + vv--; /* wrap back loop counter */ + + } else if (!doneTPH) { + /* we have to manage TPH addresses */ + addr1 = j2k->cstr_info->tile[thistile].start_pos; + addr2 = j2k->cstr_info->tile[thistile].end_header; + /* set special dvalue for this TPH */ + dvalue = -1.0; + doneTPH = true; /* don't come here till the next tile */ + vv--; /* wrap back loop counter */ + } + + } else + doneTPH = false; /* reset TPH counter */ + + /* write the addresses to the buffer */ + switch (esd->ad_size) { + + case (0): + /* do nothing */ + break; + + case (2): + /* two bytes */ + *(buf++) = (unsigned char) (addr1 >> 8); + *(buf++) = (unsigned char) (addr1 >> 0); + *(buf++) = (unsigned char) (addr2 >> 8); + *(buf++) = (unsigned char) (addr2 >> 0); + break; + + case (4): + /* four bytes */ + *(buf++) = (unsigned char) (addr1 >> 24); + *(buf++) = (unsigned char) (addr1 >> 16); + *(buf++) = (unsigned char) (addr1 >> 8); + *(buf++) = (unsigned char) (addr1 >> 0); + *(buf++) = (unsigned char) (addr2 >> 24); + *(buf++) = (unsigned char) (addr2 >> 16); + *(buf++) = (unsigned char) (addr2 >> 8); + *(buf++) = (unsigned char) (addr2 >> 0); + break; + + default: + /* do nothing */ + break; + } + + + /* let's fill the value field */ + switch (esd->senst) { + + /* relative sensitivity */ + case (0): + /* we just write down the packet ordering */ + if (dvalue == -10) + /* MH */ + dvalue = MAX_V1 + 1000.0; /* this will cause pfpvalue set to 0xFFFF */ + else if (dvalue == -1) + /* TPH */ + dvalue = MAX_V1 + 1000.0; /* this will cause pfpvalue set to 0xFFFF */ + else + /* packet: first is most important, and then in decreasing order + down to the last, which counts for 1 */ + dvalue = jpwl_pfp_to_double((unsigned short) (j2k->cstr_info->packno - thispacket), esd->se_size); + break; + + /* MSE */ + case (1): + /* !!! WRONG: let's put here disto field of packets !!! */ + dvalue = MSE; + break; + + /* MSE reduction */ + case (2): + dvalue = oldMSE - MSE; + oldMSE = MSE; + break; + + /* PSNR */ + case (3): + dvalue = PSNR; + break; + + /* PSNR increase */ + case (4): + dvalue = PSNR - oldPSNR; + oldPSNR = PSNR; + break; + + /* MAXERR */ + case (5): + dvalue = 0.0; + opj_event_msg(j2k->cinfo, EVT_WARNING, "MAXERR sensitivity mode is not implemented\n"); + break; + + /* TSE */ + case (6): + dvalue = TSE; + break; + + /* reserved */ + case (7): + dvalue = 0.0; + opj_event_msg(j2k->cinfo, EVT_WARNING, "Reserved sensitivity mode is not implemented\n"); + break; + + default: + dvalue = 0.0; + break; + } + + /* compute the pseudo-floating point value */ + pfpvalue = jpwl_double_to_pfp(dvalue, esd->se_size); + + /* write the pfp value to the buffer */ + switch (esd->se_size) { + + case (1): + /* one byte */ + *(buf++) = (unsigned char) (pfpvalue >> 0); + break; + + case (2): + /* two bytes */ + *(buf++) = (unsigned char) (pfpvalue >> 8); + *(buf++) = (unsigned char) (pfpvalue >> 0); + break; + } + + } + + return true; +} + +void jpwl_esd_write(opj_j2k_t *j2k, jpwl_esd_ms_t *esd, unsigned char *buf) { + + /* Marker */ + *(buf++) = (unsigned char) (J2K_MS_ESD >> 8); + *(buf++) = (unsigned char) (J2K_MS_ESD >> 0); + + /* Lesd */ + *(buf++) = (unsigned char) (esd->Lesd >> 8); + *(buf++) = (unsigned char) (esd->Lesd >> 0); + + /* Cesd */ + if (esd->numcomps >= 257) + *(buf++) = (unsigned char) (esd->Cesd >> 8); + *(buf++) = (unsigned char) (esd->Cesd >> 0); + + /* Pesd */ + *(buf++) = (unsigned char) (esd->Pesd >> 0); + + /* Data */ + if (esd->numcomps < 257) + memset(buf, 0xAA, (size_t) esd->Lesd - 4); + /*memcpy(buf, esd->data, (size_t) esd->Lesd - 4);*/ + else + memset(buf, 0xAA, (size_t) esd->Lesd - 5); + /*memcpy(buf, esd->data, (size_t) esd->Lesd - 5);*/ + + /* update markers struct */ + j2k_add_marker(j2k->cstr_info, J2K_MS_ESD, -1, esd->Lesd + 2); + +} + +unsigned short int jpwl_double_to_pfp(double V, int bytes) { + + unsigned short int em, e, m; + + switch (bytes) { + + case (1): + + if (V < MIN_V1) { + e = 0x0000; + m = 0x0000; + } else if (V > MAX_V1) { + e = 0x000F; + m = 0x000F; + } else { + e = (unsigned short int) (floor(log(V) * 1.44269504088896) / 4.0); + m = (unsigned short int) (0.5 + (V / (pow(2.0, (double) (4 * e))))); + } + em = ((e & 0x000F) << 4) + (m & 0x000F); + break; + + case (2): + + if (V < MIN_V2) { + e = 0x0000; + m = 0x0000; + } else if (V > MAX_V2) { + e = 0x001F; + m = 0x07FF; + } else { + e = (unsigned short int) floor(log(V) * 1.44269504088896) + 15; + m = (unsigned short int) (0.5 + 2048.0 * ((V / (pow(2.0, (double) e - 15.0))) - 1.0)); + } + em = ((e & 0x001F) << 11) + (m & 0x07FF); + break; + + default: + + em = 0x0000; + break; + }; + + return em; +} + +double jpwl_pfp_to_double(unsigned short int em, int bytes) { + + double V; + + switch (bytes) { + + case 1: + V = (double) (em & 0x0F) * pow(2.0, (double) (em & 0xF0)); + break; + + case 2: + + V = pow(2.0, (double) ((em & 0xF800) >> 11) - 15.0) * (1.0 + (double) (em & 0x07FF) / 2048.0); + break; + + default: + V = 0.0; + break; + + } + + return V; + +} + +bool jpwl_update_info(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int jwmarker_num) { + + int mm; + unsigned long int addlen; + + opj_codestream_info_t *info = j2k->cstr_info; + int tileno, tpno, packno, numtiles = info->th * info->tw, numpacks = info->packno; + + if (!j2k || !jwmarker ) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "J2K handle or JPWL markers list badly allocated\n"); + return false; + } + + /* main_head_end: how many markers are there before? */ + addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + if (jwmarker[mm].pos < (unsigned long int) info->main_head_end) + addlen += jwmarker[mm].len + 2; + info->main_head_end += addlen; + + /* codestream_size: always increment with all markers */ + addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + addlen += jwmarker[mm].len + 2; + info->codestream_size += addlen; + + /* navigate through all the tiles */ + for (tileno = 0; tileno < numtiles; tileno++) { + + /* start_pos: increment with markers before SOT */ + addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].start_pos) + addlen += jwmarker[mm].len + 2; + info->tile[tileno].start_pos += addlen; + + /* end_header: increment with markers before of it */ + addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].end_header) + addlen += jwmarker[mm].len + 2; + info->tile[tileno].end_header += addlen; + + /* end_pos: increment with markers before the end of this tile */ + /* code is disabled, since according to JPWL no markers can be beyond TPH */ + addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].end_pos) + addlen += jwmarker[mm].len + 2; + info->tile[tileno].end_pos += addlen; + + /* navigate through all the tile parts */ + for (tpno = 0; tpno < info->tile[tileno].num_tps; tpno++) { + + /* start_pos: increment with markers before SOT */ + addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp[tpno].tp_start_pos) + addlen += jwmarker[mm].len + 2; + info->tile[tileno].tp[tpno].tp_start_pos += addlen; + + /* end_header: increment with markers before of it */ + addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp[tpno].tp_end_header) + addlen += jwmarker[mm].len + 2; + info->tile[tileno].tp[tpno].tp_end_header += addlen; + + /* end_pos: increment with markers before the end of this tile part */ + addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp[tpno].tp_end_pos) + addlen += jwmarker[mm].len + 2; + info->tile[tileno].tp[tpno].tp_end_pos += addlen; + + } + + /* navigate through all the packets in this tile */ + for (packno = 0; packno < numpacks; packno++) { + + /* start_pos: increment with markers before the packet */ + /* disabled for the same reason as before */ + addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + if (jwmarker[mm].pos <= (unsigned long int) info->tile[tileno].packet[packno].start_pos) + addlen += jwmarker[mm].len + 2; + info->tile[tileno].packet[packno].start_pos += addlen; + + /* end_ph_pos: increment with markers before the packet */ + /* disabled for the same reason as before */ + /*addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].packet[packno].end_ph_pos) + addlen += jwmarker[mm].len + 2;*/ + info->tile[tileno].packet[packno].end_ph_pos += addlen; + + /* end_pos: increment if marker is before the end of packet */ + /* disabled for the same reason as before */ + /*addlen = 0; + for (mm = 0; mm < jwmarker_num; mm++) + if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].packet[packno].end_pos) + addlen += jwmarker[mm].len + 2;*/ + info->tile[tileno].packet[packno].end_pos += addlen; + + } + } + + /* reorder the markers list */ + + return true; +} + +#endif /* USE_JPWL */ diff --git a/contrib/menuetlibc/openjpeg/jpwl/rs.c b/contrib/menuetlibc/openjpeg/jpwl/rs.c new file mode 100644 index 0000000000..419f083654 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/rs.c @@ -0,0 +1,594 @@ + /* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef USE_JPWL + +/** +@file rs.c +@brief Functions used to compute the Reed-Solomon parity and check of byte arrays + +*/ + +/** + * Reed-Solomon coding and decoding + * Phil Karn (karn@ka9q.ampr.org) September 1996 + * + * This file is derived from the program "new_rs_erasures.c" by Robert + * Morelos-Zaragoza (robert@spectra.eng.hawaii.edu) and Hari Thirumoorthy + * (harit@spectra.eng.hawaii.edu), Aug 1995 + * + * I've made changes to improve performance, clean up the code and make it + * easier to follow. Data is now passed to the encoding and decoding functions + * through arguments rather than in global arrays. The decode function returns + * the number of corrected symbols, or -1 if the word is uncorrectable. + * + * This code supports a symbol size from 2 bits up to 16 bits, + * implying a block size of 3 2-bit symbols (6 bits) up to 65535 + * 16-bit symbols (1,048,560 bits). The code parameters are set in rs.h. + * + * Note that if symbols larger than 8 bits are used, the type of each + * data array element switches from unsigned char to unsigned int. The + * caller must ensure that elements larger than the symbol range are + * not passed to the encoder or decoder. + * + */ +#include +#include +#include "rs.h" + +/* This defines the type used to store an element of the Galois Field + * used by the code. Make sure this is something larger than a char if + * if anything larger than GF(256) is used. + * + * Note: unsigned char will work up to GF(256) but int seems to run + * faster on the Pentium. + */ +typedef int gf; + +/* Primitive polynomials - see Lin & Costello, Appendix A, + * and Lee & Messerschmitt, p. 453. + */ +#if(MM == 2)/* Admittedly silly */ +int Pp[MM+1] = { 1, 1, 1 }; + +#elif(MM == 3) +/* 1 + x + x^3 */ +int Pp[MM+1] = { 1, 1, 0, 1 }; + +#elif(MM == 4) +/* 1 + x + x^4 */ +int Pp[MM+1] = { 1, 1, 0, 0, 1 }; + +#elif(MM == 5) +/* 1 + x^2 + x^5 */ +int Pp[MM+1] = { 1, 0, 1, 0, 0, 1 }; + +#elif(MM == 6) +/* 1 + x + x^6 */ +int Pp[MM+1] = { 1, 1, 0, 0, 0, 0, 1 }; + +#elif(MM == 7) +/* 1 + x^3 + x^7 */ +int Pp[MM+1] = { 1, 0, 0, 1, 0, 0, 0, 1 }; + +#elif(MM == 8) +/* 1+x^2+x^3+x^4+x^8 */ +int Pp[MM+1] = { 1, 0, 1, 1, 1, 0, 0, 0, 1 }; + +#elif(MM == 9) +/* 1+x^4+x^9 */ +int Pp[MM+1] = { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 }; + +#elif(MM == 10) +/* 1+x^3+x^10 */ +int Pp[MM+1] = { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 }; + +#elif(MM == 11) +/* 1+x^2+x^11 */ +int Pp[MM+1] = { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + +#elif(MM == 12) +/* 1+x+x^4+x^6+x^12 */ +int Pp[MM+1] = { 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1 }; + +#elif(MM == 13) +/* 1+x+x^3+x^4+x^13 */ +int Pp[MM+1] = { 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + +#elif(MM == 14) +/* 1+x+x^6+x^10+x^14 */ +int Pp[MM+1] = { 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 }; + +#elif(MM == 15) +/* 1+x+x^15 */ +int Pp[MM+1] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + +#elif(MM == 16) +/* 1+x+x^3+x^12+x^16 */ +int Pp[MM+1] = { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 }; + +#else +#error "MM must be in range 2-16" +#endif + +/* Alpha exponent for the first root of the generator polynomial */ +#define B0 0 /* Different from the default 1 */ + +/* index->polynomial form conversion table */ +gf Alpha_to[NN + 1]; + +/* Polynomial->index form conversion table */ +gf Index_of[NN + 1]; + +/* No legal value in index form represents zero, so + * we need a special value for this purpose + */ +#define A0 (NN) + +/* Generator polynomial g(x) + * Degree of g(x) = 2*TT + * has roots @**B0, @**(B0+1), ... ,@^(B0+2*TT-1) + */ +/*gf Gg[NN - KK + 1];*/ +gf Gg[NN - 1]; + +/* Compute x % NN, where NN is 2**MM - 1, + * without a slow divide + */ +static /*inline*/ gf +modnn(int x) +{ + while (x >= NN) { + x -= NN; + x = (x >> MM) + (x & NN); + } + return x; +} + +/*#define min(a,b) ((a) < (b) ? (a) : (b))*/ + +#define CLEAR(a,n) {\ + int ci;\ + for(ci=(n)-1;ci >=0;ci--)\ + (a)[ci] = 0;\ + } + +#define COPY(a,b,n) {\ + int ci;\ + for(ci=(n)-1;ci >=0;ci--)\ + (a)[ci] = (b)[ci];\ + } +#define COPYDOWN(a,b,n) {\ + int ci;\ + for(ci=(n)-1;ci >=0;ci--)\ + (a)[ci] = (b)[ci];\ + } + +void init_rs(int k) +{ + KK = k; + if (KK >= NN) { + printf("KK must be less than 2**MM - 1\n"); + exit(1); + } + + generate_gf(); + gen_poly(); +} + +/* generate GF(2**m) from the irreducible polynomial p(X) in p[0]..p[m] + lookup tables: index->polynomial form alpha_to[] contains j=alpha**i; + polynomial form -> index form index_of[j=alpha**i] = i + alpha=2 is the primitive element of GF(2**m) + HARI's COMMENT: (4/13/94) alpha_to[] can be used as follows: + Let @ represent the primitive element commonly called "alpha" that + is the root of the primitive polynomial p(x). Then in GF(2^m), for any + 0 <= i <= 2^m-2, + @^i = a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1) + where the binary vector (a(0),a(1),a(2),...,a(m-1)) is the representation + of the integer "alpha_to[i]" with a(0) being the LSB and a(m-1) the MSB. Thus for + example the polynomial representation of @^5 would be given by the binary + representation of the integer "alpha_to[5]". + Similarily, index_of[] can be used as follows: + As above, let @ represent the primitive element of GF(2^m) that is + the root of the primitive polynomial p(x). In order to find the power + of @ (alpha) that has the polynomial representation + a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1) + we consider the integer "i" whose binary representation with a(0) being LSB + and a(m-1) MSB is (a(0),a(1),...,a(m-1)) and locate the entry + "index_of[i]". Now, @^index_of[i] is that element whose polynomial + representation is (a(0),a(1),a(2),...,a(m-1)). + NOTE: + The element alpha_to[2^m-1] = 0 always signifying that the + representation of "@^infinity" = 0 is (0,0,0,...,0). + Similarily, the element index_of[0] = A0 always signifying + that the power of alpha which has the polynomial representation + (0,0,...,0) is "infinity". + +*/ + +void +generate_gf(void) +{ + register int i, mask; + + mask = 1; + Alpha_to[MM] = 0; + for (i = 0; i < MM; i++) { + Alpha_to[i] = mask; + Index_of[Alpha_to[i]] = i; + /* If Pp[i] == 1 then, term @^i occurs in poly-repr of @^MM */ + if (Pp[i] != 0) + Alpha_to[MM] ^= mask; /* Bit-wise EXOR operation */ + mask <<= 1; /* single left-shift */ + } + Index_of[Alpha_to[MM]] = MM; + /* + * Have obtained poly-repr of @^MM. Poly-repr of @^(i+1) is given by + * poly-repr of @^i shifted left one-bit and accounting for any @^MM + * term that may occur when poly-repr of @^i is shifted. + */ + mask >>= 1; + for (i = MM + 1; i < NN; i++) { + if (Alpha_to[i - 1] >= mask) + Alpha_to[i] = Alpha_to[MM] ^ ((Alpha_to[i - 1] ^ mask) << 1); + else + Alpha_to[i] = Alpha_to[i - 1] << 1; + Index_of[Alpha_to[i]] = i; + } + Index_of[0] = A0; + Alpha_to[NN] = 0; +} + + +/* + * Obtain the generator polynomial of the TT-error correcting, length + * NN=(2**MM -1) Reed Solomon code from the product of (X+@**(B0+i)), i = 0, + * ... ,(2*TT-1) + * + * Examples: + * + * If B0 = 1, TT = 1. deg(g(x)) = 2*TT = 2. + * g(x) = (x+@) (x+@**2) + * + * If B0 = 0, TT = 2. deg(g(x)) = 2*TT = 4. + * g(x) = (x+1) (x+@) (x+@**2) (x+@**3) + */ +void +gen_poly(void) +{ + register int i, j; + + Gg[0] = Alpha_to[B0]; + Gg[1] = 1; /* g(x) = (X+@**B0) initially */ + for (i = 2; i <= NN - KK; i++) { + Gg[i] = 1; + /* + * Below multiply (Gg[0]+Gg[1]*x + ... +Gg[i]x^i) by + * (@**(B0+i-1) + x) + */ + for (j = i - 1; j > 0; j--) + if (Gg[j] != 0) + Gg[j] = Gg[j - 1] ^ Alpha_to[modnn((Index_of[Gg[j]]) + B0 + i - 1)]; + else + Gg[j] = Gg[j - 1]; + /* Gg[0] can never be zero */ + Gg[0] = Alpha_to[modnn((Index_of[Gg[0]]) + B0 + i - 1)]; + } + /* convert Gg[] to index form for quicker encoding */ + for (i = 0; i <= NN - KK; i++) + Gg[i] = Index_of[Gg[i]]; +} + + +/* + * take the string of symbols in data[i], i=0..(k-1) and encode + * systematically to produce NN-KK parity symbols in bb[0]..bb[NN-KK-1] data[] + * is input and bb[] is output in polynomial form. Encoding is done by using + * a feedback shift register with appropriate connections specified by the + * elements of Gg[], which was generated above. Codeword is c(X) = + * data(X)*X**(NN-KK)+ b(X) + */ +int +encode_rs(dtype *data, dtype *bb) +{ + register int i, j; + gf feedback; + + CLEAR(bb,NN-KK); + for (i = KK - 1; i >= 0; i--) { +#if (MM != 8) + if(data[i] > NN) + return -1; /* Illegal symbol */ +#endif + feedback = Index_of[data[i] ^ bb[NN - KK - 1]]; + if (feedback != A0) { /* feedback term is non-zero */ + for (j = NN - KK - 1; j > 0; j--) + if (Gg[j] != A0) + bb[j] = bb[j - 1] ^ Alpha_to[modnn(Gg[j] + feedback)]; + else + bb[j] = bb[j - 1]; + bb[0] = Alpha_to[modnn(Gg[0] + feedback)]; + } else { /* feedback term is zero. encoder becomes a + * single-byte shifter */ + for (j = NN - KK - 1; j > 0; j--) + bb[j] = bb[j - 1]; + bb[0] = 0; + } + } + return 0; +} + +/* + * Performs ERRORS+ERASURES decoding of RS codes. If decoding is successful, + * writes the codeword into data[] itself. Otherwise data[] is unaltered. + * + * Return number of symbols corrected, or -1 if codeword is illegal + * or uncorrectable. + * + * First "no_eras" erasures are declared by the calling program. Then, the + * maximum # of errors correctable is t_after_eras = floor((NN-KK-no_eras)/2). + * If the number of channel errors is not greater than "t_after_eras" the + * transmitted codeword will be recovered. Details of algorithm can be found + * in R. Blahut's "Theory ... of Error-Correcting Codes". + */ +int +eras_dec_rs(dtype *data, int *eras_pos, int no_eras) +{ + int deg_lambda, el, deg_omega; + int i, j, r; + gf u,q,tmp,num1,num2,den,discr_r; + gf recd[NN]; + /* Err+Eras Locator poly and syndrome poly */ + /*gf lambda[NN-KK + 1], s[NN-KK + 1]; + gf b[NN-KK + 1], t[NN-KK + 1], omega[NN-KK + 1]; + gf root[NN-KK], reg[NN-KK + 1], loc[NN-KK];*/ + gf lambda[NN + 1], s[NN + 1]; + gf b[NN + 1], t[NN + 1], omega[NN + 1]; + gf root[NN], reg[NN + 1], loc[NN]; + int syn_error, count; + + /* data[] is in polynomial form, copy and convert to index form */ + for (i = NN-1; i >= 0; i--){ +#if (MM != 8) + if(data[i] > NN) + return -1; /* Illegal symbol */ +#endif + recd[i] = Index_of[data[i]]; + } + /* first form the syndromes; i.e., evaluate recd(x) at roots of g(x) + * namely @**(B0+i), i = 0, ... ,(NN-KK-1) + */ + syn_error = 0; + for (i = 1; i <= NN-KK; i++) { + tmp = 0; + for (j = 0; j < NN; j++) + if (recd[j] != A0) /* recd[j] in index form */ + tmp ^= Alpha_to[modnn(recd[j] + (B0+i-1)*j)]; + syn_error |= tmp; /* set flag if non-zero syndrome => + * error */ + /* store syndrome in index form */ + s[i] = Index_of[tmp]; + } + if (!syn_error) { + /* + * if syndrome is zero, data[] is a codeword and there are no + * errors to correct. So return data[] unmodified + */ + return 0; + } + CLEAR(&lambda[1],NN-KK); + lambda[0] = 1; + if (no_eras > 0) { + /* Init lambda to be the erasure locator polynomial */ + lambda[1] = Alpha_to[eras_pos[0]]; + for (i = 1; i < no_eras; i++) { + u = eras_pos[i]; + for (j = i+1; j > 0; j--) { + tmp = Index_of[lambda[j - 1]]; + if(tmp != A0) + lambda[j] ^= Alpha_to[modnn(u + tmp)]; + } + } +#ifdef ERASURE_DEBUG + /* find roots of the erasure location polynomial */ + for(i=1;i<=no_eras;i++) + reg[i] = Index_of[lambda[i]]; + count = 0; + for (i = 1; i <= NN; i++) { + q = 1; + for (j = 1; j <= no_eras; j++) + if (reg[j] != A0) { + reg[j] = modnn(reg[j] + j); + q ^= Alpha_to[reg[j]]; + } + if (!q) { + /* store root and error location + * number indices + */ + root[count] = i; + loc[count] = NN - i; + count++; + } + } + if (count != no_eras) { + printf("\n lambda(x) is WRONG\n"); + return -1; + } +#ifndef NO_PRINT + printf("\n Erasure positions as determined by roots of Eras Loc Poly:\n"); + for (i = 0; i < count; i++) + printf("%d ", loc[i]); + printf("\n"); +#endif +#endif + } + for(i=0;i 0; j--) + if (reg[j] != A0) { + reg[j] = modnn(reg[j] + j); + q ^= Alpha_to[reg[j]]; + } + if (!q) { + /* store root (index-form) and error location number */ + root[count] = i; + loc[count] = NN - i; + count++; + } + } + +#ifdef DEBUG + printf("\n Final error positions:\t"); + for (i = 0; i < count; i++) + printf("%d ", loc[i]); + printf("\n"); +#endif + if (deg_lambda != count) { + /* + * deg(lambda) unequal to number of roots => uncorrectable + * error detected + */ + return -1; + } + /* + * Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo + * x**(NN-KK)). in index form. Also find deg(omega). + */ + deg_omega = 0; + for (i = 0; i < NN-KK;i++){ + tmp = 0; + j = (deg_lambda < i) ? deg_lambda : i; + for(;j >= 0; j--){ + if ((s[i + 1 - j] != A0) && (lambda[j] != A0)) + tmp ^= Alpha_to[modnn(s[i + 1 - j] + lambda[j])]; + } + if(tmp != 0) + deg_omega = i; + omega[i] = Index_of[tmp]; + } + omega[NN-KK] = A0; + + /* + * Compute error values in poly-form. num1 = omega(inv(X(l))), num2 = + * inv(X(l))**(B0-1) and den = lambda_pr(inv(X(l))) all in poly-form + */ + for (j = count-1; j >=0; j--) { + num1 = 0; + for (i = deg_omega; i >= 0; i--) { + if (omega[i] != A0) + num1 ^= Alpha_to[modnn(omega[i] + i * root[j])]; + } + num2 = Alpha_to[modnn(root[j] * (B0 - 1) + NN)]; + den = 0; + + /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */ + for (i = min(deg_lambda,NN-KK-1) & ~1; i >= 0; i -=2) { + if(lambda[i+1] != A0) + den ^= Alpha_to[modnn(lambda[i+1] + i * root[j])]; + } + if (den == 0) { +#ifdef DEBUG + printf("\n ERROR: denominator = 0\n"); +#endif + return -1; + } + /* Apply error to data */ + if (num1 != 0) { + data[loc[j]] ^= Alpha_to[modnn(Index_of[num1] + Index_of[num2] + NN - Index_of[den])]; + } + } + return count; +} + + +#endif /* USE_JPWL */ diff --git a/contrib/menuetlibc/openjpeg/jpwl/rs.h b/contrib/menuetlibc/openjpeg/jpwl/rs.h new file mode 100644 index 0000000000..6d2ed59b12 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/jpwl/rs.h @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium + * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef USE_JPWL + +/** +@file rs.h +@brief Functions used to compute Reed-Solomon parity and check of byte arrays + +*/ + +#ifndef __RS_HEADER__ +#define __RS_HEADER__ + +/** Global definitions for Reed-Solomon encoder/decoder + * Phil Karn KA9Q, September 1996 + * + * The parameters MM and KK specify the Reed-Solomon code parameters. + * + * Set MM to be the size of each code symbol in bits. The Reed-Solomon + * block size will then be NN = 2**M - 1 symbols. Supported values are + * defined in rs.c. + * + * Set KK to be the number of data symbols in each block, which must be + * less than the block size. The code will then be able to correct up + * to NN-KK erasures or (NN-KK)/2 errors, or combinations thereof with + * each error counting as two erasures. + */ +#define MM 8 /* RS code over GF(2**MM) - change to suit */ +//static int KK; +int KK; + +/* Original code */ +/*#define KK 239*/ /* KK = number of information symbols */ + +#define NN ((1 << MM) - 1) + +#if (MM <= 8) +typedef unsigned char dtype; +#else +typedef unsigned int dtype; +#endif + +/** Initialization function */ +void init_rs(int); + +/** These two functions *must* be called in this order (e.g., + * by init_rs()) before any encoding/decoding + */ +void generate_gf(void); /* Generate Galois Field */ +void gen_poly(void); /* Generate generator polynomial */ + +/** Reed-Solomon encoding + * data[] is the input block, parity symbols are placed in bb[] + * bb[] may lie past the end of the data, e.g., for (255,223): + * encode_rs(&data[0],&data[223]); + */ +int encode_rs(dtype data[], dtype bb[]); + +/** Reed-Solomon erasures-and-errors decoding + * The received block goes into data[], and a list of zero-origin + * erasure positions, if any, goes in eras_pos[] with a count in no_eras. + * + * The decoder corrects the symbols in place, if possible and returns + * the number of corrected symbols. If the codeword is illegal or + * uncorrectible, the data array is unchanged and -1 is returned + */ +int eras_dec_rs(dtype data[], int eras_pos[], int no_eras); + +/** +Computes the minimum between two integers +@param a first integer to compare +@param b second integer to compare +@return returns the minimum integer between a and b +*/ +#ifndef min +#define min(a,b) (((a) < (b)) ? (a) : (b)) +#endif /* min */ + +#endif /* __RS_HEADER__ */ + + +#endif /* USE_JPWL */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg.pc b/contrib/menuetlibc/openjpeg/libopenjpeg.pc new file mode 100644 index 0000000000..348da35cf0 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg.pc @@ -0,0 +1,11 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: openjpeg +Description: JPEG2000 files library +URL: http://code.google.com/p/openjpeg/ +Version: 1.4.0 +Libs: -L${libdir} -lopenjpeg +Cflags: -I${includedir} diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg.pc.in b/contrib/menuetlibc/openjpeg/libopenjpeg.pc.in new file mode 100644 index 0000000000..e75e2bd410 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: openjpeg +Description: JPEG2000 files library +URL: http://code.google.com/p/openjpeg/ +Version: @VERSION@ +Libs: -L${libdir} -lopenjpeg +Cflags: -I${includedir} diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/bio.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/bio.Plo new file mode 100644 index 0000000000..e80213d412 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/bio.Plo @@ -0,0 +1,160 @@ +bio.lo: bio.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/cio.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/cio.Plo new file mode 100644 index 0000000000..1a1c8bec56 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/cio.Plo @@ -0,0 +1,160 @@ +cio.lo: cio.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/dwt.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/dwt.Plo new file mode 100644 index 0000000000..7a6c6d6d5b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/dwt.Plo @@ -0,0 +1,173 @@ +dwt.lo: dwt.c /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h opj_includes.h \ + /usr/include/memory.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h: + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/event.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/event.Plo new file mode 100644 index 0000000000..d5f1dd1f53 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/event.Plo @@ -0,0 +1,160 @@ +event.lo: event.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/image.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/image.Plo new file mode 100644 index 0000000000..dcd88e2824 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/image.Plo @@ -0,0 +1,160 @@ +image.lo: image.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/j2k.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/j2k.Plo new file mode 100644 index 0000000000..bea10eb910 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/j2k.Plo @@ -0,0 +1,160 @@ +j2k.lo: j2k.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/j2k_lib.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/j2k_lib.Plo new file mode 100644 index 0000000000..f36fd3f811 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/j2k_lib.Plo @@ -0,0 +1,184 @@ +j2k_lib.lo: j2k_lib.c /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/resource.h \ + /usr/include/x86_64-linux-gnu/bits/resource.h \ + /usr/include/x86_64-linux-gnu/sys/times.h opj_includes.h \ + /usr/include/memory.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/resource.h: + +/usr/include/x86_64-linux-gnu/bits/resource.h: + +/usr/include/x86_64-linux-gnu/sys/times.h: + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/jp2.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/jp2.Plo new file mode 100644 index 0000000000..8350e4a791 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/jp2.Plo @@ -0,0 +1,160 @@ +jp2.lo: jp2.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/jpt.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/jpt.Plo new file mode 100644 index 0000000000..384ea8458d --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/jpt.Plo @@ -0,0 +1,160 @@ +jpt.lo: jpt.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/mct.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/mct.Plo new file mode 100644 index 0000000000..cd43b767fe --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/mct.Plo @@ -0,0 +1,173 @@ +mct.lo: mct.c /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h opj_includes.h \ + /usr/include/memory.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h: + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/mqc.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/mqc.Plo new file mode 100644 index 0000000000..15afe57870 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/mqc.Plo @@ -0,0 +1,160 @@ +mqc.lo: mqc.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/openjpeg.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/openjpeg.Plo new file mode 100644 index 0000000000..1febb33d40 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/openjpeg.Plo @@ -0,0 +1,163 @@ +openjpeg.lo: openjpeg.c ../opj_config.h opj_includes.h \ + /usr/include/memory.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +../opj_config.h: + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/pi.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/pi.Plo new file mode 100644 index 0000000000..48c912e67b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/pi.Plo @@ -0,0 +1,160 @@ +pi.lo: pi.c opj_includes.h /usr/include/memory.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/raw.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/raw.Plo new file mode 100644 index 0000000000..5154593fa4 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/raw.Plo @@ -0,0 +1,160 @@ +raw.lo: raw.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/t1.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/t1.Plo new file mode 100644 index 0000000000..ebde6354b9 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/t1.Plo @@ -0,0 +1,162 @@ +t1.lo: t1.c opj_includes.h /usr/include/memory.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h t1_luts.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: + +t1_luts.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/t2.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/t2.Plo new file mode 100644 index 0000000000..40ffecd800 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/t2.Plo @@ -0,0 +1,160 @@ +t2.lo: t2.c opj_includes.h /usr/include/memory.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/tcd.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/tcd.Plo new file mode 100644 index 0000000000..f001eba9eb --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/tcd.Plo @@ -0,0 +1,160 @@ +tcd.lo: tcd.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/tgt.Plo b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/tgt.Plo new file mode 100644 index 0000000000..e244905c61 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/.deps/tgt.Plo @@ -0,0 +1,160 @@ +tgt.lo: tgt.c opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/math-finite.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/ctype.h \ + openjpeg.h j2k_lib.h opj_malloc.h event.h cio.h image.h j2k.h jp2.h \ + jpt.h mqc.h raw.h bio.h tgt.h pi.h tcd.h t1.h dwt.h t2.h mct.h int.h \ + fix.h + +opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/math-finite.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/ctype.h: + +openjpeg.h: + +j2k_lib.h: + +opj_malloc.h: + +event.h: + +cio.h: + +image.h: + +j2k.h: + +jp2.h: + +jpt.h: + +mqc.h: + +raw.h: + +bio.h: + +tgt.h: + +pi.h: + +tcd.h: + +t1.h: + +dwt.h: + +t2.h: + +mct.h: + +int.h: + +fix.h: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/CMakeLists.txt b/contrib/menuetlibc/openjpeg/libopenjpeg/CMakeLists.txt new file mode 100644 index 0000000000..39fb2a9a0b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/CMakeLists.txt @@ -0,0 +1,51 @@ +INCLUDE_REGULAR_EXPRESSION("^.*$") +# Defines the source code for the library +SET(OPENJPEG_SRCS + bio.c + cio.c + dwt.c + event.c + image.c + j2k.c + j2k_lib.c + jp2.c + jpt.c + mct.c + mqc.c + openjpeg.c + pi.c + raw.c + t1.c + t2.c + tcd.c + tgt.c +) + +# Build the library +IF(WIN32) + IF(BUILD_SHARED_LIBS) + ADD_DEFINITIONS(-DOPJ_EXPORTS) + ELSE(BUILD_SHARED_LIBS) + ADD_DEFINITIONS(-DOPJ_STATIC) + ENDIF(BUILD_SHARED_LIBS) +ENDIF(WIN32) +ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME} ${OPENJPEG_SRCS}) +SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME} PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES}) + +# Install library +INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME} + EXPORT OpenJPEGTargets + DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries +) + +# Install includes files +INSTALL(FILES openjpeg.h + DESTINATION ${OPENJPEG_INSTALL_INCLUDE_DIR}/${subdir} COMPONENT Headers +) +INSTALL(CODE + "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${OPENJPEG_INSTALL_INCLUDE_DIR}/${subdir}/openjpeg.h \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${OPENJPEG_INSTALL_INCLUDE_DIR}/openjpeg.h)") + +# install man page of the library +INSTALL( + FILES ../doc/man/man3/libopenjpeg.3 + DESTINATION ${OPENJPEG_INSTALL_MAN_DIR}/man3) diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/Makefile b/contrib/menuetlibc/openjpeg/libopenjpeg/Makefile new file mode 100644 index 0000000000..f12632a506 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/Makefile @@ -0,0 +1,645 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# libopenjpeg/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + + +pkgdatadir = $(datadir)/openjpeg-1.4.0 +pkgincludedir = $(includedir)/openjpeg-1.4.0 +pkglibdir = $(libdir)/openjpeg-1.4.0 +pkglibexecdir = $(libexecdir)/openjpeg-1.4.0 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +am__append_1 = -DOPJ_EXPORTS +#am__append_2 = -DOPJ_STATIC +#am__append_3 = -static +subdir = libopenjpeg +DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libopenjpeg_la_LIBADD = +am__objects_1 = bio.lo cio.lo dwt.lo event.lo image.lo j2k.lo \ + j2k_lib.lo jp2.lo jpt.lo mct.lo mqc.lo openjpeg.lo pi.lo \ + raw.lo t1.lo t2.lo tcd.lo tgt.lo +am__objects_2 = +am_libopenjpeg_la_OBJECTS = $(am__objects_1) $(am__objects_2) +libopenjpeg_la_OBJECTS = $(am_libopenjpeg_la_OBJECTS) +libopenjpeg_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libopenjpeg_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libopenjpeg_la_SOURCES) +DIST_SOURCES = $(libopenjpeg_la_SOURCES) +HEADERS = $(include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf +AUTOHEADER = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader +AUTOMAKE = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11 +AWK = mawk +BUILD_NR = 0 +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JP3D_BUILD_NR = 0 +JP3D_MAJOR_NR = 1 +JP3D_MINOR_NR = 3 +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBPNG_CONFIG = /usr/bin/libpng-config +LIBS = -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAJOR_NR = 1 +MAKEINFO = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo +MINOR_NR = 4 +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = openjpeg-1.4.0 +PACKAGE_BUGREPORT = http://code.google.com/p/openjpeg/ +PACKAGE_NAME = OpenJPEG +PACKAGE_STRING = OpenJPEG 1.4.0 +PACKAGE_TARNAME = openjpeg-1.4.0 +PACKAGE_URL = http://www.openjpeg.org/ +PACKAGE_VERSION = 1.4.0 +PATH_SEPARATOR = : +PKGCONFIG = /usr/bin/pkg-config +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 1.4.0 +abs_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/libopenjpeg +abs_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/libopenjpeg +abs_top_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_top_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include/openjpeg-$(MAJOR).$(MINOR) +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh +jp3d_dir = +jpwl_dir = +lcms1includes = -I/usr/include +lcms1libs = -llcms +lcms2includes = +lcms2libs = +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pngincludes = -I/usr/include/libpng12 +pnglibs = -L/usr/lib/x86_64-linux-gnu -lpng12 +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +tiffincludes = +tifflibs = -ltiff +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +with_doxygen = no +MAJOR = 1 +MINOR = 4 +BUILD = 0 +CURRENT = `expr $(MAJOR) + $(MINOR)` +lib_LTLIBRARIES = libopenjpeg.la +INCLUDES = -I.. -I. +libopenjpeg_la_LDFLAGS = -no-undefined -version-info \ + $(CURRENT):$(BUILD):$(MINOR) $(am__append_3) +SRCS = bio.c cio.c dwt.c event.c image.c j2k.c j2k_lib.c jp2.c jpt.c \ + mct.c mqc.c openjpeg.c pi.c raw.c t1.c t2.c tcd.c tgt.c + +INCLS = bio.h cio.h dwt.h event.h fix.h image.h int.h j2k.h j2k_lib.h \ + jp2.h jpt.h mct.h mqc.h pi.h raw.h t1.h t2.h tcd.h tgt.h opj_malloc.h \ + opj_includes.h + +libopenjpeg_la_SOURCES = $(SRCS) $(INCLS) +include_HEADERS = openjpeg.h + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix +COMPILERFLAGS = -Wall -O3 -ffast-math -std=c99 $(am__append_1) \ + $(am__append_2) +headerdir = openjpeg-$(MAJOR).$(MINOR) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libopenjpeg/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign libopenjpeg/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libopenjpeg.la: $(libopenjpeg_la_OBJECTS) $(libopenjpeg_la_DEPENDENCIES) + $(libopenjpeg_la_LINK) -rpath $(libdir) $(libopenjpeg_la_OBJECTS) $(libopenjpeg_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/bio.Plo +include ./$(DEPDIR)/cio.Plo +include ./$(DEPDIR)/dwt.Plo +include ./$(DEPDIR)/event.Plo +include ./$(DEPDIR)/image.Plo +include ./$(DEPDIR)/j2k.Plo +include ./$(DEPDIR)/j2k_lib.Plo +include ./$(DEPDIR)/jp2.Plo +include ./$(DEPDIR)/jpt.Plo +include ./$(DEPDIR)/mct.Plo +include ./$(DEPDIR)/mqc.Plo +include ./$(DEPDIR)/openjpeg.Plo +include ./$(DEPDIR)/pi.Plo +include ./$(DEPDIR)/raw.Plo +include ./$(DEPDIR)/t1.Plo +include ./$(DEPDIR)/t2.Plo +include ./$(DEPDIR)/tcd.Plo +include ./$(DEPDIR)/tgt.Plo + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-local +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-generic clean-libLTLIBRARIES clean-libtool ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-hook install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-hook \ + uninstall-includeHEADERS uninstall-libLTLIBRARIES + + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +all-local: + @$(INSTALL) -d ../bin + @cp -P .libs/libopenjpeg.* ../bin/ + @rm -f ../bin/libopenjpeg.la* + @rm -rf .report_lib + @$(INSTALL) -d .report_lib + @cp -P .libs/libopenjpeg.* .report_lib + @rm -f .report_lib/libopenjpeg.lai + @echo "" > .report.txt + @echo "Installing: ${prefix}/include/${headerdir}/" >> .report.txt + @echo "Installing: ${prefix}/include/${headerdir}/openjpeg.h" >> .report.txt + @(cd .report_lib; \ + l=`ls --file-type`; \ + for f in $$l ; do \ + echo "Installing: ${prefix}/lib/$$f" >> ../.report.txt ; \ + done) + @rm -rf .report_lib + +install-data-hook: + (cd $(DESTDIR)${prefix}/include && rm -f openjpeg.h) + (cd $(DESTDIR)${prefix}/include && \ + $(LN_S) ${headerdir}/openjpeg.h openjpeg.h) + +uninstall-hook: + (cd $(DESTDIR)${prefix}/include && rm -rf openjpeg.h ${headerdir}) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/Makefile.am b/contrib/menuetlibc/openjpeg/libopenjpeg/Makefile.am new file mode 100644 index 0000000000..30a2b815b1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/Makefile.am @@ -0,0 +1,68 @@ +MAJOR = @MAJOR_NR@ +MINOR = @MINOR_NR@ +BUILD = @BUILD_NR@ +CURRENT=`expr $(MAJOR) + $(MINOR)` + +lib_LTLIBRARIES = libopenjpeg.la + +INCLUDES = -I.. -I. + +libopenjpeg_la_LDFLAGS = -no-undefined \ + -version-info $(CURRENT):$(BUILD):$(MINOR) + +SRCS = bio.c cio.c dwt.c event.c image.c j2k.c j2k_lib.c jp2.c jpt.c \ + mct.c mqc.c openjpeg.c pi.c raw.c t1.c t2.c tcd.c tgt.c + +INCLS = bio.h cio.h dwt.h event.h fix.h image.h int.h j2k.h j2k_lib.h \ + jp2.h jpt.h mct.h mqc.h pi.h raw.h t1.h t2.h tcd.h tgt.h opj_malloc.h \ + opj_includes.h + +libopenjpeg_la_SOURCES = $(SRCS) $(INCLS) + +includedir = ${prefix}/include/openjpeg-$(MAJOR).$(MINOR) +include_HEADERS = openjpeg.h + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +COMPILERFLAGS = -Wall -O3 -ffast-math -std=c99 + +if with_sharedlibs +COMPILERFLAGS += -DOPJ_EXPORTS +else +COMPILERFLAGS += -DOPJ_STATIC +libopenjpeg_la_LDFLAGS += -static +endif + +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) + +headerdir = openjpeg-$(MAJOR).$(MINOR) + +all-local: + @$(INSTALL) -d ../bin + @cp -P .libs/libopenjpeg.* ../bin/ + @rm -f ../bin/libopenjpeg.la* + @rm -rf .report_lib + @$(INSTALL) -d .report_lib + @cp -P .libs/libopenjpeg.* .report_lib + @rm -f .report_lib/libopenjpeg.lai + @echo "" > .report.txt + @echo "Installing: ${prefix}/include/${headerdir}/" >> .report.txt + @echo "Installing: ${prefix}/include/${headerdir}/openjpeg.h" >> .report.txt + @(cd .report_lib; \ + l=`ls --file-type`; \ + for f in $$l ; do \ + echo "Installing: ${prefix}/lib/$$f" >> ../.report.txt ; \ + done) + @rm -rf .report_lib + +install-data-hook: + (cd $(DESTDIR)${prefix}/include && rm -f openjpeg.h) + (cd $(DESTDIR)${prefix}/include && \ + $(LN_S) ${headerdir}/openjpeg.h openjpeg.h) + +uninstall-hook: + (cd $(DESTDIR)${prefix}/include && rm -rf openjpeg.h ${headerdir}) diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/Makefile.in b/contrib/menuetlibc/openjpeg/libopenjpeg/Makefile.in new file mode 100644 index 0000000000..295747ce41 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/Makefile.in @@ -0,0 +1,645 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@with_sharedlibs_TRUE@am__append_1 = -DOPJ_EXPORTS +@with_sharedlibs_FALSE@am__append_2 = -DOPJ_STATIC +@with_sharedlibs_FALSE@am__append_3 = -static +subdir = libopenjpeg +DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libopenjpeg_la_LIBADD = +am__objects_1 = bio.lo cio.lo dwt.lo event.lo image.lo j2k.lo \ + j2k_lib.lo jp2.lo jpt.lo mct.lo mqc.lo openjpeg.lo pi.lo \ + raw.lo t1.lo t2.lo tcd.lo tgt.lo +am__objects_2 = +am_libopenjpeg_la_OBJECTS = $(am__objects_1) $(am__objects_2) +libopenjpeg_la_OBJECTS = $(am_libopenjpeg_la_OBJECTS) +libopenjpeg_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libopenjpeg_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libopenjpeg_la_SOURCES) +DIST_SOURCES = $(libopenjpeg_la_SOURCES) +HEADERS = $(include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_NR = @BUILD_NR@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JP3D_BUILD_NR = @JP3D_BUILD_NR@ +JP3D_MAJOR_NR = @JP3D_MAJOR_NR@ +JP3D_MINOR_NR = @JP3D_MINOR_NR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBPNG_CONFIG = @LIBPNG_CONFIG@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAJOR_NR = @MAJOR_NR@ +MAKEINFO = @MAKEINFO@ +MINOR_NR = @MINOR_NR@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG = @PKGCONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = ${prefix}/include/openjpeg-$(MAJOR).$(MINOR) +infodir = @infodir@ +install_sh = @install_sh@ +jp3d_dir = @jp3d_dir@ +jpwl_dir = @jpwl_dir@ +lcms1includes = @lcms1includes@ +lcms1libs = @lcms1libs@ +lcms2includes = @lcms2includes@ +lcms2libs = @lcms2libs@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pngincludes = @pngincludes@ +pnglibs = @pnglibs@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +tiffincludes = @tiffincludes@ +tifflibs = @tifflibs@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_doxygen = @with_doxygen@ +MAJOR = @MAJOR_NR@ +MINOR = @MINOR_NR@ +BUILD = @BUILD_NR@ +CURRENT = `expr $(MAJOR) + $(MINOR)` +lib_LTLIBRARIES = libopenjpeg.la +INCLUDES = -I.. -I. +libopenjpeg_la_LDFLAGS = -no-undefined -version-info \ + $(CURRENT):$(BUILD):$(MINOR) $(am__append_3) +SRCS = bio.c cio.c dwt.c event.c image.c j2k.c j2k_lib.c jp2.c jpt.c \ + mct.c mqc.c openjpeg.c pi.c raw.c t1.c t2.c tcd.c tgt.c + +INCLS = bio.h cio.h dwt.h event.h fix.h image.h int.h j2k.h j2k_lib.h \ + jp2.h jpt.h mct.h mqc.h pi.h raw.h t1.h t2.h tcd.h tgt.h opj_malloc.h \ + opj_includes.h + +libopenjpeg_la_SOURCES = $(SRCS) $(INCLS) +include_HEADERS = openjpeg.h + +# Converts cr/lf to just lf +DOS2UNIX = dos2unix +COMPILERFLAGS = -Wall -O3 -ffast-math -std=c99 $(am__append_1) \ + $(am__append_2) +headerdir = openjpeg-$(MAJOR).$(MINOR) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libopenjpeg/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign libopenjpeg/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libopenjpeg.la: $(libopenjpeg_la_OBJECTS) $(libopenjpeg_la_DEPENDENCIES) + $(libopenjpeg_la_LINK) -rpath $(libdir) $(libopenjpeg_la_OBJECTS) $(libopenjpeg_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/image.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/j2k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/j2k_lib.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jp2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mct.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mqc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openjpeg.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tgt.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-local +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-generic clean-libLTLIBRARIES clean-libtool ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-hook install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-hook \ + uninstall-includeHEADERS uninstall-libLTLIBRARIES + + +dos2unix: + @$(DOS2UNIX) $(SRCS) $(INCLS) + +all-local: + @$(INSTALL) -d ../bin + @cp -P .libs/libopenjpeg.* ../bin/ + @rm -f ../bin/libopenjpeg.la* + @rm -rf .report_lib + @$(INSTALL) -d .report_lib + @cp -P .libs/libopenjpeg.* .report_lib + @rm -f .report_lib/libopenjpeg.lai + @echo "" > .report.txt + @echo "Installing: ${prefix}/include/${headerdir}/" >> .report.txt + @echo "Installing: ${prefix}/include/${headerdir}/openjpeg.h" >> .report.txt + @(cd .report_lib; \ + l=`ls --file-type`; \ + for f in $$l ; do \ + echo "Installing: ${prefix}/lib/$$f" >> ../.report.txt ; \ + done) + @rm -rf .report_lib + +install-data-hook: + (cd $(DESTDIR)${prefix}/include && rm -f openjpeg.h) + (cd $(DESTDIR)${prefix}/include && \ + $(LN_S) ${headerdir}/openjpeg.h openjpeg.h) + +uninstall-hook: + (cd $(DESTDIR)${prefix}/include && rm -rf openjpeg.h ${headerdir}) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/bio.c b/contrib/menuetlibc/openjpeg/libopenjpeg/bio.c new file mode 100644 index 0000000000..4c02f464d8 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/bio.c @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup BIO BIO - Individual bit input-output stream */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +/** +Write a bit +@param bio BIO handle +@param b Bit to write (0 or 1) +*/ +static void bio_putbit(opj_bio_t *bio, int b); +/** +Read a bit +@param bio BIO handle +@return Returns the read bit +*/ +static int bio_getbit(opj_bio_t *bio); +/** +Write a byte +@param bio BIO handle +@return Returns 0 if successful, returns 1 otherwise +*/ +static int bio_byteout(opj_bio_t *bio); +/** +Read a byte +@param bio BIO handle +@return Returns 0 if successful, returns 1 otherwise +*/ +static int bio_bytein(opj_bio_t *bio); + +/*@}*/ + +/*@}*/ + +/* +========================================================== + local functions +========================================================== +*/ + +static int bio_byteout(opj_bio_t *bio) { + bio->buf = (bio->buf << 8) & 0xffff; + bio->ct = bio->buf == 0xff00 ? 7 : 8; + if (bio->bp >= bio->end) { + return 1; + } + *bio->bp++ = bio->buf >> 8; + return 0; +} + +static int bio_bytein(opj_bio_t *bio) { + bio->buf = (bio->buf << 8) & 0xffff; + bio->ct = bio->buf == 0xff00 ? 7 : 8; + if (bio->bp >= bio->end) { + return 1; + } + bio->buf |= *bio->bp++; + return 0; +} + +static void bio_putbit(opj_bio_t *bio, int b) { + if (bio->ct == 0) { + bio_byteout(bio); + } + bio->ct--; + bio->buf |= b << bio->ct; +} + +static int bio_getbit(opj_bio_t *bio) { + if (bio->ct == 0) { + bio_bytein(bio); + } + bio->ct--; + return (bio->buf >> bio->ct) & 1; +} + +/* +========================================================== + Bit Input/Output interface +========================================================== +*/ + +opj_bio_t* bio_create(void) { + opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t)); + return bio; +} + +void bio_destroy(opj_bio_t *bio) { + if(bio) { + opj_free(bio); + } +} + +int bio_numbytes(opj_bio_t *bio) { + return (bio->bp - bio->start); +} + +void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len) { + bio->start = bp; + bio->end = bp + len; + bio->bp = bp; + bio->buf = 0; + bio->ct = 8; +} + +void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len) { + bio->start = bp; + bio->end = bp + len; + bio->bp = bp; + bio->buf = 0; + bio->ct = 0; +} + +void bio_write(opj_bio_t *bio, int v, int n) { + int i; + for (i = n - 1; i >= 0; i--) { + bio_putbit(bio, (v >> i) & 1); + } +} + +int bio_read(opj_bio_t *bio, int n) { + int i, v; + v = 0; + for (i = n - 1; i >= 0; i--) { + v += bio_getbit(bio) << i; + } + return v; +} + +int bio_flush(opj_bio_t *bio) { + bio->ct = 0; + if (bio_byteout(bio)) { + return 1; + } + if (bio->ct == 7) { + bio->ct = 0; + if (bio_byteout(bio)) { + return 1; + } + } + return 0; +} + +int bio_inalign(opj_bio_t *bio) { + bio->ct = 0; + if ((bio->buf & 0xff) == 0xff) { + if (bio_bytein(bio)) { + return 1; + } + bio->ct = 0; + } + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/bio.h b/contrib/menuetlibc/openjpeg/libopenjpeg/bio.h new file mode 100644 index 0000000000..764d7cb2e9 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/bio.h @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __BIO_H +#define __BIO_H +/** +@file bio.h +@brief Implementation of an individual bit input-output (BIO) + +The functions in BIO.C have for goal to realize an individual bit input - output. +*/ + +/** @defgroup BIO BIO - Individual bit input-output stream */ +/*@{*/ + +/** +Individual bit input-output stream (BIO) +*/ +typedef struct opj_bio { + /** pointer to the start of the buffer */ + unsigned char *start; + /** pointer to the end of the buffer */ + unsigned char *end; + /** pointer to the present position in the buffer */ + unsigned char *bp; + /** temporary place where each byte is read or written */ + unsigned int buf; + /** coder : number of bits free to write. decoder : number of bits read */ + int ct; +} opj_bio_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a new BIO handle +@return Returns a new BIO handle if successful, returns NULL otherwise +*/ +opj_bio_t* bio_create(void); +/** +Destroy a previously created BIO handle +@param bio BIO handle to destroy +*/ +void bio_destroy(opj_bio_t *bio); +/** +Number of bytes written. +@param bio BIO handle +@return Returns the number of bytes written +*/ +int bio_numbytes(opj_bio_t *bio); +/** +Init encoder +@param bio BIO handle +@param bp Output buffer +@param len Output buffer length +*/ +void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len); +/** +Init decoder +@param bio BIO handle +@param bp Input buffer +@param len Input buffer length +*/ +void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len); +/** +Write bits +@param bio BIO handle +@param v Value of bits +@param n Number of bits to write +*/ +void bio_write(opj_bio_t *bio, int v, int n); +/** +Read bits +@param bio BIO handle +@param n Number of bits to read +@return Returns the corresponding read number +*/ +int bio_read(opj_bio_t *bio, int n); +/** +Flush bits +@param bio BIO handle +@return Returns 1 if successful, returns 0 otherwise +*/ +int bio_flush(opj_bio_t *bio); +/** +Passes the ending bits (coming from flushing) +@param bio BIO handle +@return Returns 1 if successful, returns 0 otherwise +*/ +int bio_inalign(opj_bio_t *bio); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __BIO_H */ + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/cio.c b/contrib/menuetlibc/openjpeg/libopenjpeg/cio.c new file mode 100644 index 0000000000..2ac262a1f6 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/cio.c @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/* ----------------------------------------------------------------------- */ + +opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length) { + opj_cp_t *cp = NULL; + opj_cio_t *cio = (opj_cio_t*)opj_malloc(sizeof(opj_cio_t)); + if(!cio) return NULL; + cio->cinfo = cinfo; + if(buffer && length) { + /* wrap a user buffer containing the encoded image */ + cio->openmode = OPJ_STREAM_READ; + cio->buffer = buffer; + cio->length = length; + } + else if(!buffer && !length && cinfo) { + /* allocate a buffer for the encoded image */ + cio->openmode = OPJ_STREAM_WRITE; + switch(cinfo->codec_format) { + case CODEC_J2K: + cp = ((opj_j2k_t*)cinfo->j2k_handle)->cp; + break; + case CODEC_JP2: + cp = ((opj_jp2_t*)cinfo->jp2_handle)->j2k->cp; + break; + default: + opj_free(cio); + return NULL; + } + cio->length = (unsigned int) (0.1625 * cp->img_size + 2000); /* 0.1625 = 1.3/8 and 2000 bytes as a minimum for headers */ + cio->buffer = (unsigned char *)opj_malloc(cio->length); + if(!cio->buffer) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error allocating memory for compressed bitstream\n"); + opj_free(cio); + return NULL; + } + } + else { + opj_free(cio); + return NULL; + } + + /* Initialize byte IO */ + cio->start = cio->buffer; + cio->end = cio->buffer + cio->length; + cio->bp = cio->buffer; + + return cio; +} + +void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio) { + if(cio) { + if(cio->openmode == OPJ_STREAM_WRITE) { + /* destroy the allocated buffer */ + opj_free(cio->buffer); + } + /* destroy the cio */ + opj_free(cio); + } +} + + +/* ----------------------------------------------------------------------- */ + +/* + * Get position in byte stream. + */ +int OPJ_CALLCONV cio_tell(opj_cio_t *cio) { + return cio->bp - cio->start; +} + +/* + * Set position in byte stream. + * + * pos : position, in number of bytes, from the beginning of the stream + */ +void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos) { + cio->bp = cio->start + pos; +} + +/* + * Number of bytes left before the end of the stream. + */ +int cio_numbytesleft(opj_cio_t *cio) { + return cio->end - cio->bp; +} + +/* + * Get pointer to the current position in the stream. + */ +unsigned char *cio_getbp(opj_cio_t *cio) { + return cio->bp; +} + +/* + * Write a byte. + */ +bool cio_byteout(opj_cio_t *cio, unsigned char v) { + if (cio->bp >= cio->end) { + opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n"); + return false; + } + *cio->bp++ = v; + return true; +} + +/* + * Read a byte. + */ +unsigned char cio_bytein(opj_cio_t *cio) { + if (cio->bp >= cio->end) { + opj_event_msg(cio->cinfo, EVT_ERROR, "read error: passed the end of the codestream (start = %d, current = %d, end = %d\n", cio->start, cio->bp, cio->end); + return 0; + } + return *cio->bp++; +} + +/* + * Write some bytes. + * + * v : value to write + * n : number of bytes to write + */ +unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n) { + int i; + for (i = n - 1; i >= 0; i--) { + if( !cio_byteout(cio, (unsigned char) ((v >> (i << 3)) & 0xff)) ) + return 0; + } + return n; +} + +/* + * Read some bytes. + * + * n : number of bytes to read + * + * return : value of the n bytes read + */ +unsigned int cio_read(opj_cio_t *cio, int n) { + int i; + unsigned int v; + v = 0; + for (i = n - 1; i >= 0; i--) { + v += cio_bytein(cio) << (i << 3); + } + return v; +} + +/* + * Skip some bytes. + * + * n : number of bytes to skip + */ +void cio_skip(opj_cio_t *cio, int n) { + cio->bp += n; +} + + + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/cio.h b/contrib/menuetlibc/openjpeg/libopenjpeg/cio.h new file mode 100644 index 0000000000..580bf9c0d1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/cio.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __CIO_H +#define __CIO_H +/** +@file cio.h +@brief Implementation of a byte input-output process (CIO) + +The functions in CIO.C have for goal to realize a byte input / output process. +*/ + +/** @defgroup CIO CIO - byte input-output stream */ +/*@{*/ + +/** @name Exported functions (see also openjpeg.h) */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Number of bytes left before the end of the stream +@param cio CIO handle +@return Returns the number of bytes before the end of the stream +*/ +int cio_numbytesleft(opj_cio_t *cio); +/** +Get pointer to the current position in the stream +@param cio CIO handle +@return Returns a pointer to the current position +*/ +unsigned char *cio_getbp(opj_cio_t *cio); +/** +Write some bytes +@param cio CIO handle +@param v Value to write +@param n Number of bytes to write +@return Returns the number of bytes written or 0 if an error occured +*/ +unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n); +/** +Read some bytes +@param cio CIO handle +@param n Number of bytes to read +@return Returns the value of the n bytes read +*/ +unsigned int cio_read(opj_cio_t *cio, int n); +/** +Skip some bytes +@param cio CIO handle +@param n Number of bytes to skip +*/ +void cio_skip(opj_cio_t *cio, int n); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __CIO_H */ + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/dwt.c b/contrib/menuetlibc/openjpeg/libopenjpeg/dwt.c new file mode 100644 index 0000000000..a8d579fa97 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/dwt.c @@ -0,0 +1,858 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2007, Jonathan Ballard + * Copyright (c) 2007, Callum Lerwick + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef __SSE__ +#include +#endif + +#include "opj_includes.h" + +/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */ +/*@{*/ + +#define WS(i) v->mem[(i)*2] +#define WD(i) v->mem[(1+(i)*2)] + +/** @name Local data structures */ +/*@{*/ + +typedef struct dwt_local { + int* mem; + int dn; + int sn; + int cas; +} dwt_t; + +typedef union { + float f[4]; +} v4; + +typedef struct v4dwt_local { + v4* wavelet ; + int dn ; + int sn ; + int cas ; +} v4dwt_t ; + +static const float dwt_alpha = 1.586134342f; // 12994 +static const float dwt_beta = 0.052980118f; // 434 +static const float dwt_gamma = -0.882911075f; // -7233 +static const float dwt_delta = -0.443506852f; // -3633 + +static const float K = 1.230174105f; // 10078 +/* FIXME: What is this constant? */ +static const float c13318 = 1.625732422f; + +/*@}*/ + +/** +Virtual function type for wavelet transform in 1-D +*/ +typedef void (*DWT1DFN)(dwt_t* v); + +/** @name Local static functions */ +/*@{*/ + +/** +Forward lazy transform (horizontal) +*/ +static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas); +/** +Forward lazy transform (vertical) +*/ +static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas); +/** +Inverse lazy transform (horizontal) +*/ +static void dwt_interleave_h(dwt_t* h, int *a); +/** +Inverse lazy transform (vertical) +*/ +static void dwt_interleave_v(dwt_t* v, int *a, int x); +/** +Forward 5-3 wavelet transform in 1-D +*/ +static void dwt_encode_1(int *a, int dn, int sn, int cas); +/** +Inverse 5-3 wavelet transform in 1-D +*/ +static void dwt_decode_1(dwt_t *v); +/** +Forward 9-7 wavelet transform in 1-D +*/ +static void dwt_encode_1_real(int *a, int dn, int sn, int cas); +/** +Explicit calculation of the Quantization Stepsizes +*/ +static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno_stepsize); +/** +Inverse wavelet transform in 2-D. +*/ +static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int i, DWT1DFN fn); + +/*@}*/ + +/*@}*/ + +#define S(i) a[(i)*2] +#define D(i) a[(1+(i)*2)] +#define S_(i) ((i)<0?S(0):((i)>=sn?S(sn-1):S(i))) +#define D_(i) ((i)<0?D(0):((i)>=dn?D(dn-1):D(i))) +/* new */ +#define SS_(i) ((i)<0?S(0):((i)>=dn?S(dn-1):S(i))) +#define DD_(i) ((i)<0?D(0):((i)>=sn?D(sn-1):D(i))) + +/* */ +/* This table contains the norms of the 5-3 wavelets for different bands. */ +/* */ +static const double dwt_norms[4][10] = { + {1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3}, + {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, + {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, + {.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93} +}; + +/* */ +/* This table contains the norms of the 9-7 wavelets for different bands. */ +/* */ +static const double dwt_norms_real[4][10] = { + {1.000, 1.965, 4.177, 8.403, 16.90, 33.84, 67.69, 135.3, 270.6, 540.9}, + {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0}, + {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0}, + {2.080, 3.865, 8.307, 17.18, 34.71, 69.59, 139.3, 278.6, 557.2} +}; + +/* +========================================================== + local functions +========================================================== +*/ + +/* */ +/* Forward lazy transform (horizontal). */ +/* */ +static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas) { + int i; + for (i=0; i */ +/* Forward lazy transform (vertical). */ +/* */ +static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas) { + int i; + for (i=0; i */ +/* Inverse lazy transform (horizontal). */ +/* */ +static void dwt_interleave_h(dwt_t* h, int *a) { + int *ai = a; + int *bi = h->mem + h->cas; + int i = h->sn; + while( i-- ) { + *bi = *(ai++); + bi += 2; + } + ai = a + h->sn; + bi = h->mem + 1 - h->cas; + i = h->dn ; + while( i-- ) { + *bi = *(ai++); + bi += 2; + } +} + +/* */ +/* Inverse lazy transform (vertical). */ +/* */ +static void dwt_interleave_v(dwt_t* v, int *a, int x) { + int *ai = a; + int *bi = v->mem + v->cas; + int i = v->sn; + while( i-- ) { + *bi = *ai; + bi += 2; + ai += x; + } + ai = a + (v->sn * x); + bi = v->mem + 1 - v->cas; + i = v->dn ; + while( i-- ) { + *bi = *ai; + bi += 2; + ai += x; + } +} + + +/* */ +/* Forward 5-3 wavelet transform in 1-D. */ +/* */ +static void dwt_encode_1(int *a, int dn, int sn, int cas) { + int i; + + if (!cas) { + if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */ + for (i = 0; i < dn; i++) D(i) -= (S_(i) + S_(i + 1)) >> 1; + for (i = 0; i < sn; i++) S(i) += (D_(i - 1) + D_(i) + 2) >> 2; + } + } else { + if (!sn && dn == 1) /* NEW : CASE ONE ELEMENT */ + S(0) *= 2; + else { + for (i = 0; i < dn; i++) S(i) -= (DD_(i) + DD_(i - 1)) >> 1; + for (i = 0; i < sn; i++) D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2; + } + } +} + +/* */ +/* Inverse 5-3 wavelet transform in 1-D. */ +/* */ +static void dwt_decode_1_(int *a, int dn, int sn, int cas) { + int i; + + if (!cas) { + if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */ + for (i = 0; i < sn; i++) S(i) -= (D_(i - 1) + D_(i) + 2) >> 2; + for (i = 0; i < dn; i++) D(i) += (S_(i) + S_(i + 1)) >> 1; + } + } else { + if (!sn && dn == 1) /* NEW : CASE ONE ELEMENT */ + S(0) /= 2; + else { + for (i = 0; i < sn; i++) D(i) -= (SS_(i) + SS_(i + 1) + 2) >> 2; + for (i = 0; i < dn; i++) S(i) += (DD_(i) + DD_(i - 1)) >> 1; + } + } +} + +/* */ +/* Inverse 5-3 wavelet transform in 1-D. */ +/* */ +static void dwt_decode_1(dwt_t *v) { + dwt_decode_1_(v->mem, v->dn, v->sn, v->cas); +} + +/* */ +/* Forward 9-7 wavelet transform in 1-D. */ +/* */ +static void dwt_encode_1_real(int *a, int dn, int sn, int cas) { + int i; + if (!cas) { + if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */ + for (i = 0; i < dn; i++) + D(i) -= fix_mul(S_(i) + S_(i + 1), 12993); + for (i = 0; i < sn; i++) + S(i) -= fix_mul(D_(i - 1) + D_(i), 434); + for (i = 0; i < dn; i++) + D(i) += fix_mul(S_(i) + S_(i + 1), 7233); + for (i = 0; i < sn; i++) + S(i) += fix_mul(D_(i - 1) + D_(i), 3633); + for (i = 0; i < dn; i++) + D(i) = fix_mul(D(i), 5038); /*5038 */ + for (i = 0; i < sn; i++) + S(i) = fix_mul(S(i), 6659); /*6660 */ + } + } else { + if ((sn > 0) || (dn > 1)) { /* NEW : CASE ONE ELEMENT */ + for (i = 0; i < dn; i++) + S(i) -= fix_mul(DD_(i) + DD_(i - 1), 12993); + for (i = 0; i < sn; i++) + D(i) -= fix_mul(SS_(i) + SS_(i + 1), 434); + for (i = 0; i < dn; i++) + S(i) += fix_mul(DD_(i) + DD_(i - 1), 7233); + for (i = 0; i < sn; i++) + D(i) += fix_mul(SS_(i) + SS_(i + 1), 3633); + for (i = 0; i < dn; i++) + S(i) = fix_mul(S(i), 5038); /*5038 */ + for (i = 0; i < sn; i++) + D(i) = fix_mul(D(i), 6659); /*6660 */ + } + } +} + +static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno_stepsize) { + int p, n; + p = int_floorlog2(stepsize) - 13; + n = 11 - int_floorlog2(stepsize); + bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff; + bandno_stepsize->expn = numbps - p; +} + +/* +========================================================== + DWT interface +========================================================== +*/ + +/* */ +/* Forward 5-3 wavelet transform in 2-D. */ +/* */ +void dwt_encode(opj_tcd_tilecomp_t * tilec) { + int i, j, k; + int *a = NULL; + int *aj = NULL; + int *bj = NULL; + int w, l; + + w = tilec->x1-tilec->x0; + l = tilec->numresolutions-1; + a = tilec->data; + + for (i = 0; i < l; i++) { + int rw; /* width of the resolution level computed */ + int rh; /* height of the resolution level computed */ + int rw1; /* width of the resolution level once lower than computed one */ + int rh1; /* height of the resolution level once lower than computed one */ + int cas_col; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */ + int cas_row; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering */ + int dn, sn; + + rw = tilec->resolutions[l - i].x1 - tilec->resolutions[l - i].x0; + rh = tilec->resolutions[l - i].y1 - tilec->resolutions[l - i].y0; + rw1= tilec->resolutions[l - i - 1].x1 - tilec->resolutions[l - i - 1].x0; + rh1= tilec->resolutions[l - i - 1].y1 - tilec->resolutions[l - i - 1].y0; + + cas_row = tilec->resolutions[l - i].x0 % 2; + cas_col = tilec->resolutions[l - i].y0 % 2; + + sn = rh1; + dn = rh - rh1; + bj = (int*)opj_malloc(rh * sizeof(int)); + for (j = 0; j < rw; j++) { + aj = a + j; + for (k = 0; k < rh; k++) bj[k] = aj[k*w]; + dwt_encode_1(bj, dn, sn, cas_col); + dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col); + } + opj_free(bj); + + sn = rw1; + dn = rw - rw1; + bj = (int*)opj_malloc(rw * sizeof(int)); + for (j = 0; j < rh; j++) { + aj = a + j * w; + for (k = 0; k < rw; k++) bj[k] = aj[k]; + dwt_encode_1(bj, dn, sn, cas_row); + dwt_deinterleave_h(bj, aj, dn, sn, cas_row); + } + opj_free(bj); + } +} + + +/* */ +/* Inverse 5-3 wavelet transform in 2-D. */ +/* */ +void dwt_decode(opj_tcd_tilecomp_t* tilec, int numres) { + dwt_decode_tile(tilec, numres, &dwt_decode_1); +} + + +/* */ +/* Get gain of 5-3 wavelet transform. */ +/* */ +int dwt_getgain(int orient) { + if (orient == 0) + return 0; + if (orient == 1 || orient == 2) + return 1; + return 2; +} + +/* */ +/* Get norm of 5-3 wavelet. */ +/* */ +double dwt_getnorm(int level, int orient) { + return dwt_norms[orient][level]; +} + +/* */ +/* Forward 9-7 wavelet transform in 2-D. */ +/* */ + +void dwt_encode_real(opj_tcd_tilecomp_t * tilec) { + int i, j, k; + int *a = NULL; + int *aj = NULL; + int *bj = NULL; + int w, l; + + w = tilec->x1-tilec->x0; + l = tilec->numresolutions-1; + a = tilec->data; + + for (i = 0; i < l; i++) { + int rw; /* width of the resolution level computed */ + int rh; /* height of the resolution level computed */ + int rw1; /* width of the resolution level once lower than computed one */ + int rh1; /* height of the resolution level once lower than computed one */ + int cas_col; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */ + int cas_row; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering */ + int dn, sn; + + rw = tilec->resolutions[l - i].x1 - tilec->resolutions[l - i].x0; + rh = tilec->resolutions[l - i].y1 - tilec->resolutions[l - i].y0; + rw1= tilec->resolutions[l - i - 1].x1 - tilec->resolutions[l - i - 1].x0; + rh1= tilec->resolutions[l - i - 1].y1 - tilec->resolutions[l - i - 1].y0; + + cas_row = tilec->resolutions[l - i].x0 % 2; + cas_col = tilec->resolutions[l - i].y0 % 2; + + sn = rh1; + dn = rh - rh1; + bj = (int*)opj_malloc(rh * sizeof(int)); + for (j = 0; j < rw; j++) { + aj = a + j; + for (k = 0; k < rh; k++) bj[k] = aj[k*w]; + dwt_encode_1_real(bj, dn, sn, cas_col); + dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col); + } + opj_free(bj); + + sn = rw1; + dn = rw - rw1; + bj = (int*)opj_malloc(rw * sizeof(int)); + for (j = 0; j < rh; j++) { + aj = a + j * w; + for (k = 0; k < rw; k++) bj[k] = aj[k]; + dwt_encode_1_real(bj, dn, sn, cas_row); + dwt_deinterleave_h(bj, aj, dn, sn, cas_row); + } + opj_free(bj); + } +} + + +/* */ +/* Get gain of 9-7 wavelet transform. */ +/* */ +int dwt_getgain_real(int orient) { + (void)orient; + return 0; +} + +/* */ +/* Get norm of 9-7 wavelet. */ +/* */ +double dwt_getnorm_real(int level, int orient) { + return dwt_norms_real[orient][level]; +} + +void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec) { + int numbands, bandno; + numbands = 3 * tccp->numresolutions - 2; + for (bandno = 0; bandno < numbands; bandno++) { + double stepsize; + int resno, level, orient, gain; + + resno = (bandno == 0) ? 0 : ((bandno - 1) / 3 + 1); + orient = (bandno == 0) ? 0 : ((bandno - 1) % 3 + 1); + level = tccp->numresolutions - 1 - resno; + gain = (tccp->qmfbid == 0) ? 0 : ((orient == 0) ? 0 : (((orient == 1) || (orient == 2)) ? 1 : 2)); + if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) { + stepsize = 1.0; + } else { + double norm = dwt_norms_real[orient][level]; + stepsize = (1 << (gain)) / norm; + } + dwt_encode_stepsize((int) floor(stepsize * 8192.0), prec + gain, &tccp->stepsizes[bandno]); + } +} + + +/* */ +/* Determine maximum computed resolution level for inverse wavelet transform */ +/* */ +static int dwt_decode_max_resolution(opj_tcd_resolution_t* restrict r, int i) { + int mr = 1; + int w; + while( --i ) { + r++; + if( mr < ( w = r->x1 - r->x0 ) ) + mr = w ; + if( mr < ( w = r->y1 - r->y0 ) ) + mr = w ; + } + return mr ; +} + + +/* */ +/* Inverse wavelet transform in 2-D. */ +/* */ +static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int numres, DWT1DFN dwt_1D) { + dwt_t h; + dwt_t v; + + opj_tcd_resolution_t* tr = tilec->resolutions; + + int rw = tr->x1 - tr->x0; /* width of the resolution level computed */ + int rh = tr->y1 - tr->y0; /* height of the resolution level computed */ + + int w = tilec->x1 - tilec->x0; + + h.mem = opj_aligned_malloc(dwt_decode_max_resolution(tr, numres) * sizeof(int)); + v.mem = h.mem; + + while( --numres) { + int * restrict tiledp = tilec->data; + int j; + + ++tr; + h.sn = rw; + v.sn = rh; + + rw = tr->x1 - tr->x0; + rh = tr->y1 - tr->y0; + + h.dn = rw - h.sn; + h.cas = tr->x0 % 2; + + for(j = 0; j < rh; ++j) { + dwt_interleave_h(&h, &tiledp[j*w]); + (dwt_1D)(&h); + memcpy(&tiledp[j*w], h.mem, rw * sizeof(int)); + } + + v.dn = rh - v.sn; + v.cas = tr->y0 % 2; + + for(j = 0; j < rw; ++j){ + int k; + dwt_interleave_v(&v, &tiledp[j], w); + (dwt_1D)(&v); + for(k = 0; k < rh; ++k) { + tiledp[k * w + j] = v.mem[k]; + } + } + } + opj_aligned_free(h.mem); +} + +static void v4dwt_interleave_h(v4dwt_t* restrict w, float* restrict a, int x, int size){ + float* restrict bi = (float*) (w->wavelet + w->cas); + int count = w->sn; + int i, k; + for(k = 0; k < 2; ++k){ + if (count + 3 * x < size && ((int) a & 0x0f) == 0 && ((int) bi & 0x0f) == 0 && (x & 0x0f) == 0) { + /* Fast code path */ + for(i = 0; i < count; ++i){ + int j = i; + bi[i*8 ] = a[j]; + j += x; + bi[i*8 + 1] = a[j]; + j += x; + bi[i*8 + 2] = a[j]; + j += x; + bi[i*8 + 3] = a[j]; + } + } else { + /* Slow code path */ + for(i = 0; i < count; ++i){ + int j = i; + bi[i*8 ] = a[j]; + j += x; + if(j > size) continue; + bi[i*8 + 1] = a[j]; + j += x; + if(j > size) continue; + bi[i*8 + 2] = a[j]; + j += x; + if(j > size) continue; + bi[i*8 + 3] = a[j]; + } + } + bi = (float*) (w->wavelet + 1 - w->cas); + a += w->sn; + size -= w->sn; + count = w->dn; + } +} + +static void v4dwt_interleave_v(v4dwt_t* restrict v , float* restrict a , int x){ + v4* restrict bi = v->wavelet + v->cas; + int i; + for(i = 0; i < v->sn; ++i){ + memcpy(&bi[i*2], &a[i*x], 4 * sizeof(float)); + } + a += v->sn * x; + bi = v->wavelet + 1 - v->cas; + for(i = 0; i < v->dn; ++i){ + memcpy(&bi[i*2], &a[i*x], 4 * sizeof(float)); + } +} + +#ifdef __SSE__ + +static void v4dwt_decode_step1_sse(v4* w, int count, const __m128 c){ + __m128* restrict vw = (__m128*) w; + int i; + /* 4x unrolled loop */ + for(i = 0; i < count >> 2; ++i){ + *vw = _mm_mul_ps(*vw, c); + vw += 2; + *vw = _mm_mul_ps(*vw, c); + vw += 2; + *vw = _mm_mul_ps(*vw, c); + vw += 2; + *vw = _mm_mul_ps(*vw, c); + vw += 2; + } + count &= 3; + for(i = 0; i < count; ++i){ + *vw = _mm_mul_ps(*vw, c); + vw += 2; + } +} + +static void v4dwt_decode_step2_sse(v4* l, v4* w, int k, int m, __m128 c){ + __m128* restrict vl = (__m128*) l; + __m128* restrict vw = (__m128*) w; + int i; + __m128 tmp1, tmp2, tmp3; + tmp1 = vl[0]; + for(i = 0; i < m; ++i){ + tmp2 = vw[-1]; + tmp3 = vw[ 0]; + vw[-1] = _mm_add_ps(tmp2, _mm_mul_ps(_mm_add_ps(tmp1, tmp3), c)); + tmp1 = tmp3; + vw += 2; + } + vl = vw - 2; + if(m >= k){ + return; + } + c = _mm_add_ps(c, c); + c = _mm_mul_ps(c, vl[0]); + for(; m < k; ++m){ + __m128 tmp = vw[-1]; + vw[-1] = _mm_add_ps(tmp, c); + vw += 2; + } +} + +#else + +static void v4dwt_decode_step1(v4* w, int count, const float c){ + float* restrict fw = (float*) w; + int i; + for(i = 0; i < count; ++i){ + float tmp1 = fw[i*8 ]; + float tmp2 = fw[i*8 + 1]; + float tmp3 = fw[i*8 + 2]; + float tmp4 = fw[i*8 + 3]; + fw[i*8 ] = tmp1 * c; + fw[i*8 + 1] = tmp2 * c; + fw[i*8 + 2] = tmp3 * c; + fw[i*8 + 3] = tmp4 * c; + } +} + +static void v4dwt_decode_step2(v4* l, v4* w, int k, int m, float c){ + float* restrict fl = (float*) l; + float* restrict fw = (float*) w; + int i; + for(i = 0; i < m; ++i){ + float tmp1_1 = fl[0]; + float tmp1_2 = fl[1]; + float tmp1_3 = fl[2]; + float tmp1_4 = fl[3]; + float tmp2_1 = fw[-4]; + float tmp2_2 = fw[-3]; + float tmp2_3 = fw[-2]; + float tmp2_4 = fw[-1]; + float tmp3_1 = fw[0]; + float tmp3_2 = fw[1]; + float tmp3_3 = fw[2]; + float tmp3_4 = fw[3]; + fw[-4] = tmp2_1 + ((tmp1_1 + tmp3_1) * c); + fw[-3] = tmp2_2 + ((tmp1_2 + tmp3_2) * c); + fw[-2] = tmp2_3 + ((tmp1_3 + tmp3_3) * c); + fw[-1] = tmp2_4 + ((tmp1_4 + tmp3_4) * c); + fl = fw; + fw += 8; + } + if(m < k){ + float c1; + float c2; + float c3; + float c4; + c += c; + c1 = fl[0] * c; + c2 = fl[1] * c; + c3 = fl[2] * c; + c4 = fl[3] * c; + for(; m < k; ++m){ + float tmp1 = fw[-4]; + float tmp2 = fw[-3]; + float tmp3 = fw[-2]; + float tmp4 = fw[-1]; + fw[-4] = tmp1 + c1; + fw[-3] = tmp2 + c2; + fw[-2] = tmp3 + c3; + fw[-1] = tmp4 + c4; + fw += 8; + } + } +} + +#endif + +/* */ +/* Inverse 9-7 wavelet transform in 1-D. */ +/* */ +static void v4dwt_decode(v4dwt_t* restrict dwt){ + int a, b; + if(dwt->cas == 0) { + if(!((dwt->dn > 0) || (dwt->sn > 1))){ + return; + } + a = 0; + b = 1; + }else{ + if(!((dwt->sn > 0) || (dwt->dn > 1))) { + return; + } + a = 1; + b = 0; + } +#ifdef __SSE__ + v4dwt_decode_step1_sse(dwt->wavelet+a, dwt->sn, _mm_set1_ps(K)); + v4dwt_decode_step1_sse(dwt->wavelet+b, dwt->dn, _mm_set1_ps(c13318)); + v4dwt_decode_step2_sse(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(dwt_delta)); + v4dwt_decode_step2_sse(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(dwt_gamma)); + v4dwt_decode_step2_sse(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(dwt_beta)); + v4dwt_decode_step2_sse(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(dwt_alpha)); +#else + v4dwt_decode_step1(dwt->wavelet+a, dwt->sn, K); + v4dwt_decode_step1(dwt->wavelet+b, dwt->dn, c13318); + v4dwt_decode_step2(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), dwt_delta); + v4dwt_decode_step2(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), dwt_gamma); + v4dwt_decode_step2(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), dwt_beta); + v4dwt_decode_step2(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), dwt_alpha); +#endif +} + +/* */ +/* Inverse 9-7 wavelet transform in 2-D. */ +/* */ +void dwt_decode_real(opj_tcd_tilecomp_t* restrict tilec, int numres){ + v4dwt_t h; + v4dwt_t v; + + opj_tcd_resolution_t* res = tilec->resolutions; + + int rw = res->x1 - res->x0; /* width of the resolution level computed */ + int rh = res->y1 - res->y0; /* height of the resolution level computed */ + + int w = tilec->x1 - tilec->x0; + + h.wavelet = (v4*) opj_aligned_malloc((dwt_decode_max_resolution(res, numres)+5) * sizeof(v4)); + v.wavelet = h.wavelet; + + while( --numres) { + float * restrict aj = (float*) tilec->data; + int bufsize = (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0); + int j; + + h.sn = rw; + v.sn = rh; + + ++res; + + rw = res->x1 - res->x0; /* width of the resolution level computed */ + rh = res->y1 - res->y0; /* height of the resolution level computed */ + + h.dn = rw - h.sn; + h.cas = res->x0 % 2; + + for(j = rh; j > 3; j -= 4){ + int k; + v4dwt_interleave_h(&h, aj, w, bufsize); + v4dwt_decode(&h); + for(k = rw; --k >= 0;){ + aj[k ] = h.wavelet[k].f[0]; + aj[k+w ] = h.wavelet[k].f[1]; + aj[k+w*2] = h.wavelet[k].f[2]; + aj[k+w*3] = h.wavelet[k].f[3]; + } + aj += w*4; + bufsize -= w*4; + } + if (rh & 0x03) { + int k; + j = rh & 0x03; + v4dwt_interleave_h(&h, aj, w, bufsize); + v4dwt_decode(&h); + for(k = rw; --k >= 0;){ + switch(j) { + case 3: aj[k+w*2] = h.wavelet[k].f[2]; + case 2: aj[k+w ] = h.wavelet[k].f[1]; + case 1: aj[k ] = h.wavelet[k].f[0]; + } + } + } + + v.dn = rh - v.sn; + v.cas = res->y0 % 2; + + aj = (float*) tilec->data; + for(j = rw; j > 3; j -= 4){ + int k; + v4dwt_interleave_v(&v, aj, w); + v4dwt_decode(&v); + for(k = 0; k < rh; ++k){ + memcpy(&aj[k*w], &v.wavelet[k], 4 * sizeof(float)); + } + aj += 4; + } + if (rw & 0x03){ + int k; + j = rw & 0x03; + v4dwt_interleave_v(&v, aj, w); + v4dwt_decode(&v); + for(k = 0; k < rh; ++k){ + memcpy(&aj[k*w], &v.wavelet[k], j * sizeof(float)); + } + } + } + + opj_aligned_free(h.wavelet); +} + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/dwt.h b/contrib/menuetlibc/openjpeg/libopenjpeg/dwt.h new file mode 100644 index 0000000000..adf73e5440 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/dwt.h @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __DWT_H +#define __DWT_H +/** +@file dwt.h +@brief Implementation of a discrete wavelet transform (DWT) + +The functions in DWT.C have for goal to realize forward and inverse discret wavelet +transform with filter 5-3 (reversible) and filter 9-7 (irreversible). The functions in +DWT.C are used by some function in TCD.C. +*/ + +/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */ +/*@{*/ + + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Forward 5-3 wavelet tranform in 2-D. +Apply a reversible DWT transform to a component of an image. +@param tilec Tile component information (current tile) +*/ +void dwt_encode(opj_tcd_tilecomp_t * tilec); +/** +Inverse 5-3 wavelet tranform in 2-D. +Apply a reversible inverse DWT transform to a component of an image. +@param tilec Tile component information (current tile) +@param numres Number of resolution levels to decode +*/ +void dwt_decode(opj_tcd_tilecomp_t* tilec, int numres); +/** +Get the gain of a subband for the reversible 5-3 DWT. +@param orient Number that identifies the subband (0->LL, 1->HL, 2->LH, 3->HH) +@return Returns 0 if orient = 0, returns 1 if orient = 1 or 2, returns 2 otherwise +*/ +int dwt_getgain(int orient); +/** +Get the norm of a wavelet function of a subband at a specified level for the reversible 5-3 DWT. +@param level Level of the wavelet function +@param orient Band of the wavelet function +@return Returns the norm of the wavelet function +*/ +double dwt_getnorm(int level, int orient); +/** +Forward 9-7 wavelet transform in 2-D. +Apply an irreversible DWT transform to a component of an image. +@param tilec Tile component information (current tile) +*/ +void dwt_encode_real(opj_tcd_tilecomp_t * tilec); +/** +Inverse 9-7 wavelet transform in 2-D. +Apply an irreversible inverse DWT transform to a component of an image. +@param tilec Tile component information (current tile) +@param numres Number of resolution levels to decode +*/ +void dwt_decode_real(opj_tcd_tilecomp_t* tilec, int numres); +/** +Get the gain of a subband for the irreversible 9-7 DWT. +@param orient Number that identifies the subband (0->LL, 1->HL, 2->LH, 3->HH) +@return Returns the gain of the 9-7 wavelet transform +*/ +int dwt_getgain_real(int orient); +/** +Get the norm of a wavelet function of a subband at a specified level for the irreversible 9-7 DWT +@param level Level of the wavelet function +@param orient Band of the wavelet function +@return Returns the norm of the 9-7 wavelet +*/ +double dwt_getnorm_real(int level, int orient); +/** +Explicit calculation of the Quantization Stepsizes +@param tccp Tile-component coding parameters +@param prec Precint analyzed +*/ +void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __DWT_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/event.c b/contrib/menuetlibc/openjpeg/libopenjpeg/event.c new file mode 100644 index 0000000000..953a9973eb --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/event.c @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/* ========================================================== + Utility functions + ==========================================================*/ + +#ifndef _WIN32 +static char* +i2a(unsigned i, char *a, unsigned r) { + if (i/r > 0) a = i2a(i/r,a,r); + *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r]; + return a+1; +} + +/** + Transforms integer i into an ascii string and stores the result in a; + string is encoded in the base indicated by r. + @param i Number to be converted + @param a String result + @param r Base of value; must be in the range 2 - 36 + @return Returns a +*/ +static char * +_itoa(int i, char *a, int r) { + r = ((r < 2) || (r > 36)) ? 10 : r; + if(i < 0) { + *a = '-'; + *i2a(-i, a+1, r) = 0; + } + else *i2a(i, a, r) = 0; + return a; +} + +#endif /* !_WIN32 */ + +/* ----------------------------------------------------------------------- */ + +opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) { + if(cinfo) { + opj_event_mgr_t *previous = cinfo->event_mgr; + cinfo->event_mgr = event_mgr; + cinfo->client_data = context; + return previous; + } + + return NULL; +} + +bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) { +#define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */ + opj_msg_callback msg_handler = NULL; + + opj_event_mgr_t *event_mgr = cinfo->event_mgr; + if(event_mgr != NULL) { + switch(event_type) { + case EVT_ERROR: + msg_handler = event_mgr->error_handler; + break; + case EVT_WARNING: + msg_handler = event_mgr->warning_handler; + break; + case EVT_INFO: + msg_handler = event_mgr->info_handler; + break; + default: + break; + } + if(msg_handler == NULL) { + return false; + } + } else { + return false; + } + + if ((fmt != NULL) && (event_mgr != NULL)) { + va_list arg; + int str_length/*, i, j*/; /* UniPG */ + char message[MSG_SIZE]; + memset(message, 0, MSG_SIZE); + /* initialize the optional parameter list */ + va_start(arg, fmt); + /* check the length of the format string */ + str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt); + /* parse the format string and put the result in 'message' */ + vsprintf(message, fmt, arg); /* UniPG */ + /* deinitialize the optional parameter list */ + va_end(arg); + + /* output the message to the user program */ + msg_handler(message, cinfo->client_data); + } + + return true; +} + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/event.h b/contrib/menuetlibc/openjpeg/libopenjpeg/event.h new file mode 100644 index 0000000000..11910b0e4b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/event.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __EVENT_H +#define __EVENT_H +/** +@file event.h +@brief Implementation of a event callback system + +The functions in EVENT.C have for goal to send output messages (errors, warnings, debug) to the user. +*/ + +#define EVT_ERROR 1 /**< Error event type */ +#define EVT_WARNING 2 /**< Warning event type */ +#define EVT_INFO 4 /**< Debug event type */ + +/** @defgroup EVENT EVENT - Implementation of a event callback system */ +/*@{*/ + +/** @name Exported functions (see also openjpeg.h) */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Write formatted data to a string and send the string to a user callback. +@param cinfo Codec context info +@param event_type Event type or callback to use to send the message +@param fmt Format-control string (plus optionnal arguments) +@return Returns true if successful, returns false otherwise +*/ +bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __EVENT_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/fix.h b/contrib/menuetlibc/openjpeg/libopenjpeg/fix.h new file mode 100644 index 0000000000..bcb2acb54c --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/fix.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __FIX_H +#define __FIX_H + +#if defined(_MSC_VER) || defined(__BORLANDC__) +#define int64 __int64 +#else +#define int64 long long +#endif + +/** +@file fix.h +@brief Implementation of operations of specific multiplication (FIX) + +The functions in FIX.H have for goal to realize specific multiplication. +*/ + +/** @defgroup FIX FIX - Implementation of operations of specific multiplication */ +/*@{*/ + +/** +Multiply two fixed-precision rational numbers. +@param a +@param b +@return Returns a * b +*/ +static INLINE int fix_mul(int a, int b) { + int64 temp = (int64) a * (int64) b ; + temp += temp & 4096; + return (int) (temp >> 13) ; +} + +/*@}*/ + +#endif /* __FIX_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/image.c b/contrib/menuetlibc/openjpeg/libopenjpeg/image.c new file mode 100644 index 0000000000..30b7d139e7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/image.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +opj_image_t* opj_image_create0(void) { + opj_image_t *image = (opj_image_t*)opj_calloc(1, sizeof(opj_image_t)); + return image; +} + +opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc) { + int compno; + opj_image_t *image = NULL; + + image = (opj_image_t*) opj_calloc(1, sizeof(opj_image_t)); + if(image) { + image->color_space = clrspc; + image->numcomps = numcmpts; + /* allocate memory for the per-component information */ + image->comps = (opj_image_comp_t*)opj_malloc(image->numcomps * sizeof(opj_image_comp_t)); + if(!image->comps) { + fprintf(stderr,"Unable to allocate memory for image.\n"); + opj_image_destroy(image); + return NULL; + } + /* create the individual image components */ + for(compno = 0; compno < numcmpts; compno++) { + opj_image_comp_t *comp = &image->comps[compno]; + comp->dx = cmptparms[compno].dx; + comp->dy = cmptparms[compno].dy; + comp->w = cmptparms[compno].w; + comp->h = cmptparms[compno].h; + comp->x0 = cmptparms[compno].x0; + comp->y0 = cmptparms[compno].y0; + comp->prec = cmptparms[compno].prec; + comp->bpp = cmptparms[compno].bpp; + comp->sgnd = cmptparms[compno].sgnd; + comp->data = (int*) opj_calloc(comp->w * comp->h, sizeof(int)); + if(!comp->data) { + fprintf(stderr,"Unable to allocate memory for image.\n"); + opj_image_destroy(image); + return NULL; + } + } + } + + return image; +} + +void OPJ_CALLCONV opj_image_destroy(opj_image_t *image) { + int i; + if(image) { + if(image->comps) { + /* image components */ + for(i = 0; i < image->numcomps; i++) { + opj_image_comp_t *image_comp = &image->comps[i]; + if(image_comp->data) { + opj_free(image_comp->data); + } + } + opj_free(image->comps); + } + opj_free(image); + } +} + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/image.h b/contrib/menuetlibc/openjpeg/libopenjpeg/image.h new file mode 100644 index 0000000000..04c362eb83 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/image.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __IMAGE_H +#define __IMAGE_H +/** +@file image.h +@brief Implementation of operations on images (IMAGE) + +The functions in IMAGE.C have for goal to realize operations on images. +*/ + +/** @defgroup IMAGE IMAGE - Implementation of operations on images */ +/*@{*/ + +/** +Create an empty image +@todo this function should be removed +@return returns an empty image if successful, returns NULL otherwise +*/ +opj_image_t* opj_image_create0(void); + +/*@}*/ + +#endif /* __IMAGE_H */ + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/int.h b/contrib/menuetlibc/openjpeg/libopenjpeg/int.h new file mode 100644 index 0000000000..4e5fe08eb7 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/int.h @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __INT_H +#define __INT_H +/** +@file int.h +@brief Implementation of operations on integers (INT) + +The functions in INT.H have for goal to realize operations on integers. +*/ + +/** @defgroup INT INT - Implementation of operations on integers */ +/*@{*/ + +/** @name Exported functions (see also openjpeg.h) */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Get the minimum of two integers +@return Returns a if a < b else b +*/ +static INLINE int int_min(int a, int b) { + return a < b ? a : b; +} +/** +Get the maximum of two integers +@return Returns a if a > b else b +*/ +static INLINE int int_max(int a, int b) { + return (a > b) ? a : b; +} +/** +Clamp an integer inside an interval +@return +
    +
  • Returns a if (min < a < max) +
  • Returns max if (a > max) +
  • Returns min if (a < min) +
+*/ +static INLINE int int_clamp(int a, int min, int max) { + if (a < min) + return min; + if (a > max) + return max; + return a; +} +/** +@return Get absolute value of integer +*/ +static INLINE int int_abs(int a) { + return a < 0 ? -a : a; +} +/** +Divide an integer and round upwards +@return Returns a divided by b +*/ +static INLINE int int_ceildiv(int a, int b) { + return (a + b - 1) / b; +} +/** +Divide an integer by a power of 2 and round upwards +@return Returns a divided by 2^b +*/ +static INLINE int int_ceildivpow2(int a, int b) { + return (a + (1 << b) - 1) >> b; +} +/** +Divide an integer by a power of 2 and round downwards +@return Returns a divided by 2^b +*/ +static INLINE int int_floordivpow2(int a, int b) { + return a >> b; +} +/** +Get logarithm of an integer and round downwards +@return Returns log2(a) +*/ +static INLINE int int_floorlog2(int a) { + int l; + for (l = 0; a > 1; l++) { + a >>= 1; + } + return l; +} +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/j2k.c b/contrib/menuetlibc/openjpeg/libopenjpeg/j2k.c new file mode 100644 index 0000000000..de1c2067dd --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/j2k.c @@ -0,0 +1,2434 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2006-2007, Parvatha Elangovan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +/** +Write the SOC marker (Start Of Codestream) +@param j2k J2K handle +*/ +static void j2k_write_soc(opj_j2k_t *j2k); +/** +Read the SOC marker (Start of Codestream) +@param j2k J2K handle +*/ +static void j2k_read_soc(opj_j2k_t *j2k); +/** +Write the SIZ marker (image and tile size) +@param j2k J2K handle +*/ +static void j2k_write_siz(opj_j2k_t *j2k); +/** +Read the SIZ marker (image and tile size) +@param j2k J2K handle +*/ +static void j2k_read_siz(opj_j2k_t *j2k); +/** +Write the COM marker (comment) +@param j2k J2K handle +*/ +static void j2k_write_com(opj_j2k_t *j2k); +/** +Read the COM marker (comment) +@param j2k J2K handle +*/ +static void j2k_read_com(opj_j2k_t *j2k); +/** +Write the value concerning the specified component in the marker COD and COC +@param j2k J2K handle +@param compno Number of the component concerned by the information written +*/ +static void j2k_write_cox(opj_j2k_t *j2k, int compno); +/** +Read the value concerning the specified component in the marker COD and COC +@param j2k J2K handle +@param compno Number of the component concerned by the information read +*/ +static void j2k_read_cox(opj_j2k_t *j2k, int compno); +/** +Write the COD marker (coding style default) +@param j2k J2K handle +*/ +static void j2k_write_cod(opj_j2k_t *j2k); +/** +Read the COD marker (coding style default) +@param j2k J2K handle +*/ +static void j2k_read_cod(opj_j2k_t *j2k); +/** +Write the COC marker (coding style component) +@param j2k J2K handle +@param compno Number of the component concerned by the information written +*/ +static void j2k_write_coc(opj_j2k_t *j2k, int compno); +/** +Read the COC marker (coding style component) +@param j2k J2K handle +*/ +static void j2k_read_coc(opj_j2k_t *j2k); +/** +Write the value concerning the specified component in the marker QCD and QCC +@param j2k J2K handle +@param compno Number of the component concerned by the information written +*/ +static void j2k_write_qcx(opj_j2k_t *j2k, int compno); +/** +Read the value concerning the specified component in the marker QCD and QCC +@param j2k J2K handle +@param compno Number of the component concern by the information read +@param len Length of the information in the QCX part of the marker QCD/QCC +*/ +static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len); +/** +Write the QCD marker (quantization default) +@param j2k J2K handle +*/ +static void j2k_write_qcd(opj_j2k_t *j2k); +/** +Read the QCD marker (quantization default) +@param j2k J2K handle +*/ +static void j2k_read_qcd(opj_j2k_t *j2k); +/** +Write the QCC marker (quantization component) +@param j2k J2K handle +@param compno Number of the component concerned by the information written +*/ +static void j2k_write_qcc(opj_j2k_t *j2k, int compno); +/** +Read the QCC marker (quantization component) +@param j2k J2K handle +*/ +static void j2k_read_qcc(opj_j2k_t *j2k); +/** +Write the POC marker (progression order change) +@param j2k J2K handle +*/ +static void j2k_write_poc(opj_j2k_t *j2k); +/** +Read the POC marker (progression order change) +@param j2k J2K handle +*/ +static void j2k_read_poc(opj_j2k_t *j2k); +/** +Read the CRG marker (component registration) +@param j2k J2K handle +*/ +static void j2k_read_crg(opj_j2k_t *j2k); +/** +Read the TLM marker (tile-part lengths) +@param j2k J2K handle +*/ +static void j2k_read_tlm(opj_j2k_t *j2k); +/** +Read the PLM marker (packet length, main header) +@param j2k J2K handle +*/ +static void j2k_read_plm(opj_j2k_t *j2k); +/** +Read the PLT marker (packet length, tile-part header) +@param j2k J2K handle +*/ +static void j2k_read_plt(opj_j2k_t *j2k); +/** +Read the PPM marker (packet packet headers, main header) +@param j2k J2K handle +*/ +static void j2k_read_ppm(opj_j2k_t *j2k); +/** +Read the PPT marker (packet packet headers, tile-part header) +@param j2k J2K handle +*/ +static void j2k_read_ppt(opj_j2k_t *j2k); +/** +Write the TLM marker (Mainheader) +@param j2k J2K handle +*/ +static void j2k_write_tlm(opj_j2k_t *j2k); +/** +Write the SOT marker (start of tile-part) +@param j2k J2K handle +*/ +static void j2k_write_sot(opj_j2k_t *j2k); +/** +Read the SOT marker (start of tile-part) +@param j2k J2K handle +*/ +static void j2k_read_sot(opj_j2k_t *j2k); +/** +Write the SOD marker (start of data) +@param j2k J2K handle +@param tile_coder Pointer to a TCD handle +*/ +static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder); +/** +Read the SOD marker (start of data) +@param j2k J2K handle +*/ +static void j2k_read_sod(opj_j2k_t *j2k); +/** +Write the RGN marker (region-of-interest) +@param j2k J2K handle +@param compno Number of the component concerned by the information written +@param tileno Number of the tile concerned by the information written +*/ +static void j2k_write_rgn(opj_j2k_t *j2k, int compno, int tileno); +/** +Read the RGN marker (region-of-interest) +@param j2k J2K handle +*/ +static void j2k_read_rgn(opj_j2k_t *j2k); +/** +Write the EOC marker (end of codestream) +@param j2k J2K handle +*/ +static void j2k_write_eoc(opj_j2k_t *j2k); +/** +Read the EOC marker (end of codestream) +@param j2k J2K handle +*/ +static void j2k_read_eoc(opj_j2k_t *j2k); +/** +Read an unknown marker +@param j2k J2K handle +*/ +static void j2k_read_unk(opj_j2k_t *j2k); + +/*@}*/ + +/*@}*/ + +/* ----------------------------------------------------------------------- */ +typedef struct j2k_prog_order{ + OPJ_PROG_ORDER enum_prog; + char str_prog[4]; +}j2k_prog_order_t; + +j2k_prog_order_t j2k_prog_order_list[] = { + {CPRL, "CPRL"}, + {LRCP, "LRCP"}, + {PCRL, "PCRL"}, + {RLCP, "RLCP"}, + {RPCL, "RPCL"}, + {(OPJ_PROG_ORDER)-1, ""} +}; + +char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order){ + j2k_prog_order_t *po; + for(po = j2k_prog_order_list; po->enum_prog != -1; po++ ){ + if(po->enum_prog == prg_order){ + break; + } + } + return po->str_prog; +} + +/* ----------------------------------------------------------------------- */ +static int j2k_get_num_tp(opj_cp_t *cp,int pino,int tileno){ + char *prog; + int i; + int tpnum=1,tpend=0; + opj_tcp_t *tcp = &cp->tcps[tileno]; + prog = j2k_convert_progression_order(tcp->prg); + + if(cp->tp_on == 1){ + for(i=0;i<4;i++){ + if(tpend!=1){ + if( cp->tp_flag == prog[i] ){ + tpend=1;cp->tp_pos=i; + } + switch(prog[i]){ + case 'C': + tpnum= tpnum * tcp->pocs[pino].compE; + break; + case 'R': + tpnum= tpnum * tcp->pocs[pino].resE; + break; + case 'P': + tpnum= tpnum * tcp->pocs[pino].prcE; + break; + case 'L': + tpnum= tpnum * tcp->pocs[pino].layE; + break; + } + } + } + }else{ + tpnum=1; + } + return tpnum; +} + +/** mem allocation for TLM marker*/ +int j2k_calculate_tp(opj_cp_t *cp,int img_numcomp,opj_image_t *image,opj_j2k_t *j2k ){ + int pino,tileno,totnum_tp=0; + j2k->cur_totnum_tp = (int *) opj_malloc(cp->tw * cp->th * sizeof(int)); + for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { + int cur_totnum_tp = 0; + opj_tcp_t *tcp = &cp->tcps[tileno]; + for(pino = 0; pino <= tcp->numpocs; pino++) { + int tp_num=0; + opj_pi_iterator_t *pi = pi_initialise_encode(image, cp, tileno,FINAL_PASS); + if(!pi) { return -1;} + tp_num = j2k_get_num_tp(cp,pino,tileno); + totnum_tp = totnum_tp + tp_num; + cur_totnum_tp = cur_totnum_tp + tp_num; + pi_destroy(pi, cp, tileno); + } + j2k->cur_totnum_tp[tileno] = cur_totnum_tp; + /* INDEX >> */ + if (j2k->cstr_info) { + j2k->cstr_info->tile[tileno].num_tps = cur_totnum_tp; + j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(cur_totnum_tp * sizeof(opj_tp_info_t)); + } + /* << INDEX */ + } + return totnum_tp; +} + +static void j2k_write_soc(opj_j2k_t *j2k) { + opj_cio_t *cio = j2k->cio; + cio_write(cio, J2K_MS_SOC, 2); + +/* UniPG>> */ +#ifdef USE_JPWL + + /* update markers struct */ + j2k_add_marker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio) - 2, 2); + +#endif /* USE_JPWL */ +/* <state = J2K_STATE_MHSIZ; + /* Index */ + if (j2k->cstr_info) { + j2k->cstr_info->main_head_start = cio_tell(j2k->cio) - 2; + j2k->cstr_info->codestream_size = cio_numbytesleft(j2k->cio) + 2 - j2k->cstr_info->main_head_start; + } +} + +static void j2k_write_siz(opj_j2k_t *j2k) { + int i; + int lenp, len; + + opj_cio_t *cio = j2k->cio; + opj_image_t *image = j2k->image; + opj_cp_t *cp = j2k->cp; + + cio_write(cio, J2K_MS_SIZ, 2); /* SIZ */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + cio_write(cio, cp->rsiz, 2); /* Rsiz (capabilities) */ + cio_write(cio, image->x1, 4); /* Xsiz */ + cio_write(cio, image->y1, 4); /* Ysiz */ + cio_write(cio, image->x0, 4); /* X0siz */ + cio_write(cio, image->y0, 4); /* Y0siz */ + cio_write(cio, cp->tdx, 4); /* XTsiz */ + cio_write(cio, cp->tdy, 4); /* YTsiz */ + cio_write(cio, cp->tx0, 4); /* XT0siz */ + cio_write(cio, cp->ty0, 4); /* YT0siz */ + cio_write(cio, image->numcomps, 2); /* Csiz */ + for (i = 0; i < image->numcomps; i++) { + cio_write(cio, image->comps[i].prec - 1 + (image->comps[i].sgnd << 7), 1); /* Ssiz_i */ + cio_write(cio, image->comps[i].dx, 1); /* XRsiz_i */ + cio_write(cio, image->comps[i].dy, 1); /* YRsiz_i */ + } + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lsiz */ + cio_seek(cio, lenp + len); +} + +static void j2k_read_siz(opj_j2k_t *j2k) { + int len, i; + + opj_cio_t *cio = j2k->cio; + opj_image_t *image = j2k->image; + opj_cp_t *cp = j2k->cp; + + len = cio_read(cio, 2); /* Lsiz */ + cio_read(cio, 2); /* Rsiz (capabilities) */ + image->x1 = cio_read(cio, 4); /* Xsiz */ + image->y1 = cio_read(cio, 4); /* Ysiz */ + image->x0 = cio_read(cio, 4); /* X0siz */ + image->y0 = cio_read(cio, 4); /* Y0siz */ + cp->tdx = cio_read(cio, 4); /* XTsiz */ + cp->tdy = cio_read(cio, 4); /* YTsiz */ + cp->tx0 = cio_read(cio, 4); /* XT0siz */ + cp->ty0 = cio_read(cio, 4); /* YT0siz */ + + if ((image->x0<0)||(image->x1<0)||(image->y0<0)||(image->y1<0)) { + opj_event_msg(j2k->cinfo, EVT_ERROR, + "%s: invalid image size (x0:%d, x1:%d, y0:%d, y1:%d)\n", + image->x0,image->x1,image->y0,image->y1); + return; + } + + image->numcomps = cio_read(cio, 2); /* Csiz */ + +#ifdef USE_JPWL + if (j2k->cp->correct) { + /* if JPWL is on, we check whether TX errors have damaged + too much the SIZ parameters */ + if (!(image->x1 * image->y1)) { + opj_event_msg(j2k->cinfo, EVT_ERROR, + "JPWL: bad image size (%d x %d)\n", + image->x1, image->y1); + if (!JPWL_ASSUME || JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + } + if (image->numcomps != ((len - 38) / 3)) { + opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, + "JPWL: Csiz is %d => space in SIZ only for %d comps.!!!\n", + image->numcomps, ((len - 38) / 3)); + if (!JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + /* we try to correct */ + opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"); + if (image->numcomps < ((len - 38) / 3)) { + len = 38 + 3 * image->numcomps; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting Lsiz to %d => HYPOTHESIS!!!\n", + len); + } else { + image->numcomps = ((len - 38) / 3); + opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting Csiz to %d => HYPOTHESIS!!!\n", + image->numcomps); + } + } + + /* update components number in the jpwl_exp_comps filed */ + cp->exp_comps = image->numcomps; + } +#endif /* USE_JPWL */ + + image->comps = (opj_image_comp_t*) opj_calloc(image->numcomps, sizeof(opj_image_comp_t)); + for (i = 0; i < image->numcomps; i++) { + int tmp, w, h; + tmp = cio_read(cio, 1); /* Ssiz_i */ + image->comps[i].prec = (tmp & 0x7f) + 1; + image->comps[i].sgnd = tmp >> 7; + image->comps[i].dx = cio_read(cio, 1); /* XRsiz_i */ + image->comps[i].dy = cio_read(cio, 1); /* YRsiz_i */ + +#ifdef USE_JPWL + if (j2k->cp->correct) { + /* if JPWL is on, we check whether TX errors have damaged + too much the SIZ parameters, again */ + if (!(image->comps[i].dx * image->comps[i].dy)) { + opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, + "JPWL: bad XRsiz_%d/YRsiz_%d (%d x %d)\n", + i, i, image->comps[i].dx, image->comps[i].dy); + if (!JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + /* we try to correct */ + opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n"); + if (!image->comps[i].dx) { + image->comps[i].dx = 1; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting XRsiz_%d to %d => HYPOTHESIS!!!\n", + i, image->comps[i].dx); + } + if (!image->comps[i].dy) { + image->comps[i].dy = 1; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting YRsiz_%d to %d => HYPOTHESIS!!!\n", + i, image->comps[i].dy); + } + } + + } +#endif /* USE_JPWL */ + + /* TODO: unused ? */ + w = int_ceildiv(image->x1 - image->x0, image->comps[i].dx); + h = int_ceildiv(image->y1 - image->y0, image->comps[i].dy); + + image->comps[i].resno_decoded = 0; /* number of resolution decoded */ + image->comps[i].factor = cp->reduce; /* reducing factor per component */ + } + + cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx); + cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy); + +#ifdef USE_JPWL + if (j2k->cp->correct) { + /* if JPWL is on, we check whether TX errors have damaged + too much the SIZ parameters */ + if ((cp->tw < 1) || (cp->th < 1) || (cp->tw > cp->max_tiles) || (cp->th > cp->max_tiles)) { + opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, + "JPWL: bad number of tiles (%d x %d)\n", + cp->tw, cp->th); + if (!JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + /* we try to correct */ + opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n"); + if (cp->tw < 1) { + cp->tw= 1; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting %d tiles in x => HYPOTHESIS!!!\n", + cp->tw); + } + if (cp->tw > cp->max_tiles) { + cp->tw= 1; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- too large x, increase expectance of %d\n" + "- setting %d tiles in x => HYPOTHESIS!!!\n", + cp->max_tiles, cp->tw); + } + if (cp->th < 1) { + cp->th= 1; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting %d tiles in y => HYPOTHESIS!!!\n", + cp->th); + } + if (cp->th > cp->max_tiles) { + cp->th= 1; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- too large y, increase expectance of %d to continue\n", + "- setting %d tiles in y => HYPOTHESIS!!!\n", + cp->max_tiles, cp->th); + } + } + } +#endif /* USE_JPWL */ + + cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t)); + cp->tileno = (int*) opj_malloc(cp->tw * cp->th * sizeof(int)); + cp->tileno_size = 0; + +#ifdef USE_JPWL + if (j2k->cp->correct) { + if (!cp->tcps) { + opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, + "JPWL: could not alloc tcps field of cp\n"); + if (!JPWL_ASSUME || JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + } + } +#endif /* USE_JPWL */ + + for (i = 0; i < cp->tw * cp->th; i++) { + cp->tcps[i].POC = 0; + cp->tcps[i].numpocs = 0; + cp->tcps[i].first = 1; + } + + /* Initialization for PPM marker */ + cp->ppm = 0; + cp->ppm_data = NULL; + cp->ppm_data_first = NULL; + cp->ppm_previous = 0; + cp->ppm_store = 0; + + j2k->default_tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps, sizeof(opj_tccp_t)); + for (i = 0; i < cp->tw * cp->th; i++) { + cp->tcps[i].tccps = (opj_tccp_t*) opj_malloc(image->numcomps * sizeof(opj_tccp_t)); + } + j2k->tile_data = (unsigned char**) opj_calloc(cp->tw * cp->th, sizeof(unsigned char*)); + j2k->tile_len = (int*) opj_calloc(cp->tw * cp->th, sizeof(int)); + j2k->state = J2K_STATE_MH; + + /* Index */ + if (j2k->cstr_info) { + opj_codestream_info_t *cstr_info = j2k->cstr_info; + cstr_info->image_w = image->x1 - image->x0; + cstr_info->image_h = image->y1 - image->y0; + cstr_info->numcomps = image->numcomps; + cstr_info->tw = cp->tw; + cstr_info->th = cp->th; + cstr_info->tile_x = cp->tdx; + cstr_info->tile_y = cp->tdy; + cstr_info->tile_Ox = cp->tx0; + cstr_info->tile_Oy = cp->ty0; + cstr_info->tile = (opj_tile_info_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tile_info_t)); + } +} + +static void j2k_write_com(opj_j2k_t *j2k) { + unsigned int i; + int lenp, len; + + if(j2k->cp->comment) { + opj_cio_t *cio = j2k->cio; + char *comment = j2k->cp->comment; + + cio_write(cio, J2K_MS_COM, 2); + lenp = cio_tell(cio); + cio_skip(cio, 2); + cio_write(cio, 1, 2); /* General use (IS 8859-15:1999 (Latin) values) */ + for (i = 0; i < strlen(comment); i++) { + cio_write(cio, comment[i], 1); + } + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); + cio_seek(cio, lenp + len); + } +} + +static void j2k_read_com(opj_j2k_t *j2k) { + int len; + + opj_cio_t *cio = j2k->cio; + + len = cio_read(cio, 2); + cio_skip(cio, len - 2); +} + +static void j2k_write_cox(opj_j2k_t *j2k, int compno) { + int i; + + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = &cp->tcps[j2k->curtileno]; + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_cio_t *cio = j2k->cio; + + cio_write(cio, tccp->numresolutions - 1, 1); /* SPcox (D) */ + cio_write(cio, tccp->cblkw - 2, 1); /* SPcox (E) */ + cio_write(cio, tccp->cblkh - 2, 1); /* SPcox (F) */ + cio_write(cio, tccp->cblksty, 1); /* SPcox (G) */ + cio_write(cio, tccp->qmfbid, 1); /* SPcox (H) */ + + if (tccp->csty & J2K_CCP_CSTY_PRT) { + for (i = 0; i < tccp->numresolutions; i++) { + cio_write(cio, tccp->prcw[i] + (tccp->prch[i] << 4), 1); /* SPcox (I_i) */ + } + } +} + +static void j2k_read_cox(opj_j2k_t *j2k, int compno) { + int i; + + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_cio_t *cio = j2k->cio; + + tccp->numresolutions = cio_read(cio, 1) + 1; /* SPcox (D) */ + + // If user wants to remove more resolutions than the codestream contains, return error + if (cp->reduce >= tccp->numresolutions) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "Error decoding component %d.\nThe number of resolutions to remove is higher than the number " + "of resolutions of this component\nModify the cp_reduce parameter.\n\n", compno); + j2k->state |= J2K_STATE_ERR; + } + + tccp->cblkw = cio_read(cio, 1) + 2; /* SPcox (E) */ + tccp->cblkh = cio_read(cio, 1) + 2; /* SPcox (F) */ + tccp->cblksty = cio_read(cio, 1); /* SPcox (G) */ + tccp->qmfbid = cio_read(cio, 1); /* SPcox (H) */ + if (tccp->csty & J2K_CP_CSTY_PRT) { + for (i = 0; i < tccp->numresolutions; i++) { + int tmp = cio_read(cio, 1); /* SPcox (I_i) */ + tccp->prcw[i] = tmp & 0xf; + tccp->prch[i] = tmp >> 4; + } + } + + /* INDEX >> */ + if(j2k->cstr_info && compno == 0) { + for (i = 0; i < tccp->numresolutions; i++) { + if (tccp->csty & J2K_CP_CSTY_PRT) { + j2k->cstr_info->tile[j2k->curtileno].pdx[i] = tccp->prcw[i]; + j2k->cstr_info->tile[j2k->curtileno].pdy[i] = tccp->prch[i]; + } + else { + j2k->cstr_info->tile[j2k->curtileno].pdx[i] = 15; + j2k->cstr_info->tile[j2k->curtileno].pdx[i] = 15; + } + } + } + /* << INDEX */ +} + +static void j2k_write_cod(opj_j2k_t *j2k) { + opj_cp_t *cp = NULL; + opj_tcp_t *tcp = NULL; + int lenp, len; + + opj_cio_t *cio = j2k->cio; + + cio_write(cio, J2K_MS_COD, 2); /* COD */ + + lenp = cio_tell(cio); + cio_skip(cio, 2); + + cp = j2k->cp; + tcp = &cp->tcps[j2k->curtileno]; + + cio_write(cio, tcp->csty, 1); /* Scod */ + cio_write(cio, tcp->prg, 1); /* SGcod (A) */ + cio_write(cio, tcp->numlayers, 2); /* SGcod (B) */ + cio_write(cio, tcp->mct, 1); /* SGcod (C) */ + + j2k_write_cox(j2k, 0); + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lcod */ + cio_seek(cio, lenp + len); +} + +static void j2k_read_cod(opj_j2k_t *j2k) { + int len, i, pos; + + opj_cio_t *cio = j2k->cio; + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; + opj_image_t *image = j2k->image; + + len = cio_read(cio, 2); /* Lcod */ + tcp->csty = cio_read(cio, 1); /* Scod */ + tcp->prg = (OPJ_PROG_ORDER)cio_read(cio, 1); /* SGcod (A) */ + tcp->numlayers = cio_read(cio, 2); /* SGcod (B) */ + tcp->mct = cio_read(cio, 1); /* SGcod (C) */ + + pos = cio_tell(cio); + for (i = 0; i < image->numcomps; i++) { + tcp->tccps[i].csty = tcp->csty & J2K_CP_CSTY_PRT; + cio_seek(cio, pos); + j2k_read_cox(j2k, i); + } + + /* Index */ + if (j2k->cstr_info) { + opj_codestream_info_t *cstr_info = j2k->cstr_info; + cstr_info->prog = tcp->prg; + cstr_info->numlayers = tcp->numlayers; + cstr_info->numdecompos = (int*) opj_malloc(image->numcomps * sizeof(int)); + for (i = 0; i < image->numcomps; i++) { + cstr_info->numdecompos[i] = tcp->tccps[i].numresolutions - 1; + } + } +} + +static void j2k_write_coc(opj_j2k_t *j2k, int compno) { + int lenp, len; + + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = &cp->tcps[j2k->curtileno]; + opj_image_t *image = j2k->image; + opj_cio_t *cio = j2k->cio; + + cio_write(cio, J2K_MS_COC, 2); /* COC */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + cio_write(cio, compno, image->numcomps <= 256 ? 1 : 2); /* Ccoc */ + cio_write(cio, tcp->tccps[compno].csty, 1); /* Scoc */ + j2k_write_cox(j2k, compno); + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lcoc */ + cio_seek(cio, lenp + len); +} + +static void j2k_read_coc(opj_j2k_t *j2k) { + int len, compno; + + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; + opj_image_t *image = j2k->image; + opj_cio_t *cio = j2k->cio; + + len = cio_read(cio, 2); /* Lcoc */ + compno = cio_read(cio, image->numcomps <= 256 ? 1 : 2); /* Ccoc */ + tcp->tccps[compno].csty = cio_read(cio, 1); /* Scoc */ + j2k_read_cox(j2k, compno); +} + +static void j2k_write_qcx(opj_j2k_t *j2k, int compno) { + int bandno, numbands; + int expn, mant; + + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = &cp->tcps[j2k->curtileno]; + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_cio_t *cio = j2k->cio; + + cio_write(cio, tccp->qntsty + (tccp->numgbits << 5), 1); /* Sqcx */ + numbands = tccp->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolutions * 3 - 2; + + for (bandno = 0; bandno < numbands; bandno++) { + expn = tccp->stepsizes[bandno].expn; + mant = tccp->stepsizes[bandno].mant; + + if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) { + cio_write(cio, expn << 3, 1); /* SPqcx_i */ + } else { + cio_write(cio, (expn << 11) + mant, 2); /* SPqcx_i */ + } + } +} + +static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len) { + int tmp; + int bandno, numbands; + + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_cio_t *cio = j2k->cio; + + tmp = cio_read(cio, 1); /* Sqcx */ + tccp->qntsty = tmp & 0x1f; + tccp->numgbits = tmp >> 5; + numbands = (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? + 1 : ((tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) ? len - 1 : (len - 1) / 2); + +#ifdef USE_JPWL + if (j2k->cp->correct) { + + /* if JPWL is on, we check whether there are too many subbands */ + if ((numbands < 0) || (numbands >= J2K_MAXBANDS)) { + opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, + "JPWL: bad number of subbands in Sqcx (%d)\n", + numbands); + if (!JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + /* we try to correct */ + numbands = 1; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n" + "- setting number of bands to %d => HYPOTHESIS!!!\n", + numbands); + }; + + }; +#endif /* USE_JPWL */ + + for (bandno = 0; bandno < numbands; bandno++) { + int expn, mant; + if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) { + expn = cio_read(cio, 1) >> 3; /* SPqcx_i */ + mant = 0; + } else { + tmp = cio_read(cio, 2); /* SPqcx_i */ + expn = tmp >> 11; + mant = tmp & 0x7ff; + } + tccp->stepsizes[bandno].expn = expn; + tccp->stepsizes[bandno].mant = mant; + } + + /* Add Antonin : if scalar_derived -> compute other stepsizes */ + if (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) { + for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) { + tccp->stepsizes[bandno].expn = + ((tccp->stepsizes[0].expn) - ((bandno - 1) / 3) > 0) ? + (tccp->stepsizes[0].expn) - ((bandno - 1) / 3) : 0; + tccp->stepsizes[bandno].mant = tccp->stepsizes[0].mant; + } + } + /* ddA */ +} + +static void j2k_write_qcd(opj_j2k_t *j2k) { + int lenp, len; + + opj_cio_t *cio = j2k->cio; + + cio_write(cio, J2K_MS_QCD, 2); /* QCD */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + j2k_write_qcx(j2k, 0); + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lqcd */ + cio_seek(cio, lenp + len); +} + +static void j2k_read_qcd(opj_j2k_t *j2k) { + int len, i, pos; + + opj_cio_t *cio = j2k->cio; + opj_image_t *image = j2k->image; + + len = cio_read(cio, 2); /* Lqcd */ + pos = cio_tell(cio); + for (i = 0; i < image->numcomps; i++) { + cio_seek(cio, pos); + j2k_read_qcx(j2k, i, len - 2); + } +} + +static void j2k_write_qcc(opj_j2k_t *j2k, int compno) { + int lenp, len; + + opj_cio_t *cio = j2k->cio; + + cio_write(cio, J2K_MS_QCC, 2); /* QCC */ + lenp = cio_tell(cio); + cio_skip(cio, 2); + cio_write(cio, compno, j2k->image->numcomps <= 256 ? 1 : 2); /* Cqcc */ + j2k_write_qcx(j2k, compno); + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lqcc */ + cio_seek(cio, lenp + len); +} + +static void j2k_read_qcc(opj_j2k_t *j2k) { + int len, compno; + int numcomp = j2k->image->numcomps; + opj_cio_t *cio = j2k->cio; + + len = cio_read(cio, 2); /* Lqcc */ + compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */ + +#ifdef USE_JPWL + if (j2k->cp->correct) { + + static int backup_compno = 0; + + /* compno is negative or larger than the number of components!!! */ + if ((compno < 0) || (compno >= numcomp)) { + opj_event_msg(j2k->cinfo, EVT_ERROR, + "JPWL: bad component number in QCC (%d out of a maximum of %d)\n", + compno, numcomp); + if (!JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + /* we try to correct */ + compno = backup_compno % numcomp; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n" + "- setting component number to %d\n", + compno); + } + + /* keep your private count of tiles */ + backup_compno++; + }; +#endif /* USE_JPWL */ + + j2k_read_qcx(j2k, compno, len - 2 - (numcomp <= 256 ? 1 : 2)); +} + +static void j2k_write_poc(opj_j2k_t *j2k) { + int len, numpchgs, i; + + int numcomps = j2k->image->numcomps; + + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = &cp->tcps[j2k->curtileno]; + opj_tccp_t *tccp = &tcp->tccps[0]; + opj_cio_t *cio = j2k->cio; + + numpchgs = 1 + tcp->numpocs; + cio_write(cio, J2K_MS_POC, 2); /* POC */ + len = 2 + (5 + 2 * (numcomps <= 256 ? 1 : 2)) * numpchgs; + cio_write(cio, len, 2); /* Lpoc */ + for (i = 0; i < numpchgs; i++) { + opj_poc_t *poc = &tcp->pocs[i]; + cio_write(cio, poc->resno0, 1); /* RSpoc_i */ + cio_write(cio, poc->compno0, (numcomps <= 256 ? 1 : 2)); /* CSpoc_i */ + cio_write(cio, poc->layno1, 2); /* LYEpoc_i */ + poc->layno1 = int_min(poc->layno1, tcp->numlayers); + cio_write(cio, poc->resno1, 1); /* REpoc_i */ + poc->resno1 = int_min(poc->resno1, tccp->numresolutions); + cio_write(cio, poc->compno1, (numcomps <= 256 ? 1 : 2)); /* CEpoc_i */ + poc->compno1 = int_min(poc->compno1, numcomps); + cio_write(cio, poc->prg, 1); /* Ppoc_i */ + } +} + +static void j2k_read_poc(opj_j2k_t *j2k) { + int len, numpchgs, i, old_poc; + + int numcomps = j2k->image->numcomps; + + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; + opj_cio_t *cio = j2k->cio; + + old_poc = tcp->POC ? tcp->numpocs + 1 : 0; + tcp->POC = 1; + len = cio_read(cio, 2); /* Lpoc */ + numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2)); + + for (i = old_poc; i < numpchgs + old_poc; i++) { + opj_poc_t *poc; + poc = &tcp->pocs[i]; + poc->resno0 = cio_read(cio, 1); /* RSpoc_i */ + poc->compno0 = cio_read(cio, numcomps <= 256 ? 1 : 2); /* CSpoc_i */ + poc->layno1 = cio_read(cio, 2); /* LYEpoc_i */ + poc->resno1 = cio_read(cio, 1); /* REpoc_i */ + poc->compno1 = int_min( + cio_read(cio, numcomps <= 256 ? 1 : 2), (unsigned int) numcomps); /* CEpoc_i */ + poc->prg = (OPJ_PROG_ORDER)cio_read(cio, 1); /* Ppoc_i */ + } + + tcp->numpocs = numpchgs + old_poc - 1; +} + +static void j2k_read_crg(opj_j2k_t *j2k) { + int len, i, Xcrg_i, Ycrg_i; + + opj_cio_t *cio = j2k->cio; + int numcomps = j2k->image->numcomps; + + len = cio_read(cio, 2); /* Lcrg */ + for (i = 0; i < numcomps; i++) { + Xcrg_i = cio_read(cio, 2); /* Xcrg_i */ + Ycrg_i = cio_read(cio, 2); /* Ycrg_i */ + } +} + +static void j2k_read_tlm(opj_j2k_t *j2k) { + int len, Ztlm, Stlm, ST, SP, tile_tlm, i; + long int Ttlm_i, Ptlm_i; + + opj_cio_t *cio = j2k->cio; + + len = cio_read(cio, 2); /* Ltlm */ + Ztlm = cio_read(cio, 1); /* Ztlm */ + Stlm = cio_read(cio, 1); /* Stlm */ + ST = ((Stlm >> 4) & 0x01) + ((Stlm >> 4) & 0x02); + SP = (Stlm >> 6) & 0x01; + tile_tlm = (len - 4) / ((SP + 1) * 2 + ST); + for (i = 0; i < tile_tlm; i++) { + Ttlm_i = cio_read(cio, ST); /* Ttlm_i */ + Ptlm_i = cio_read(cio, SP ? 4 : 2); /* Ptlm_i */ + } +} + +static void j2k_read_plm(opj_j2k_t *j2k) { + int len, i, Zplm, Nplm, add, packet_len = 0; + + opj_cio_t *cio = j2k->cio; + + len = cio_read(cio, 2); /* Lplm */ + Zplm = cio_read(cio, 1); /* Zplm */ + len -= 3; + while (len > 0) { + Nplm = cio_read(cio, 4); /* Nplm */ + len -= 4; + for (i = Nplm; i > 0; i--) { + add = cio_read(cio, 1); + len--; + packet_len = (packet_len << 7) + add; /* Iplm_ij */ + if ((add & 0x80) == 0) { + /* New packet */ + packet_len = 0; + } + if (len <= 0) + break; + } + } +} + +static void j2k_read_plt(opj_j2k_t *j2k) { + int len, i, Zplt, packet_len = 0, add; + + opj_cio_t *cio = j2k->cio; + + len = cio_read(cio, 2); /* Lplt */ + Zplt = cio_read(cio, 1); /* Zplt */ + for (i = len - 3; i > 0; i--) { + add = cio_read(cio, 1); + packet_len = (packet_len << 7) + add; /* Iplt_i */ + if ((add & 0x80) == 0) { + /* New packet */ + packet_len = 0; + } + } +} + +static void j2k_read_ppm(opj_j2k_t *j2k) { + int len, Z_ppm, i, j; + int N_ppm; + + opj_cp_t *cp = j2k->cp; + opj_cio_t *cio = j2k->cio; + + len = cio_read(cio, 2); + cp->ppm = 1; + + Z_ppm = cio_read(cio, 1); /* Z_ppm */ + len -= 3; + while (len > 0) { + if (cp->ppm_previous == 0) { + N_ppm = cio_read(cio, 4); /* N_ppm */ + len -= 4; + } else { + N_ppm = cp->ppm_previous; + } + j = cp->ppm_store; + if (Z_ppm == 0) { /* First PPM marker */ + cp->ppm_data = (unsigned char *) opj_malloc(N_ppm * sizeof(unsigned char)); + cp->ppm_data_first = cp->ppm_data; + cp->ppm_len = N_ppm; + } else { /* NON-first PPM marker */ + cp->ppm_data = (unsigned char *) opj_realloc(cp->ppm_data, (N_ppm + cp->ppm_store) * sizeof(unsigned char)); + +#ifdef USE_JPWL + /* this memory allocation check could be done even in non-JPWL cases */ + if (cp->correct) { + if (!cp->ppm_data) { + opj_event_msg(j2k->cinfo, EVT_ERROR, + "JPWL: failed memory allocation during PPM marker parsing (pos. %x)\n", + cio_tell(cio)); + if (!JPWL_ASSUME || JPWL_ASSUME) { + opj_free(cp->ppm_data); + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + } + } +#endif + + cp->ppm_data_first = cp->ppm_data; + cp->ppm_len = N_ppm + cp->ppm_store; + } + for (i = N_ppm; i > 0; i--) { /* Read packet header */ + cp->ppm_data[j] = cio_read(cio, 1); + j++; + len--; + if (len == 0) + break; /* Case of non-finished packet header in present marker but finished in next one */ + } + cp->ppm_previous = i - 1; + cp->ppm_store = j; + } +} + +static void j2k_read_ppt(opj_j2k_t *j2k) { + int len, Z_ppt, i, j = 0; + + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = cp->tcps + j2k->curtileno; + opj_cio_t *cio = j2k->cio; + + len = cio_read(cio, 2); + Z_ppt = cio_read(cio, 1); + tcp->ppt = 1; + if (Z_ppt == 0) { /* First PPT marker */ + tcp->ppt_data = (unsigned char *) opj_malloc((len - 3) * sizeof(unsigned char)); + tcp->ppt_data_first = tcp->ppt_data; + tcp->ppt_store = 0; + tcp->ppt_len = len - 3; + } else { /* NON-first PPT marker */ + tcp->ppt_data = (unsigned char *) opj_realloc(tcp->ppt_data, (len - 3 + tcp->ppt_store) * sizeof(unsigned char)); + tcp->ppt_data_first = tcp->ppt_data; + tcp->ppt_len = len - 3 + tcp->ppt_store; + } + j = tcp->ppt_store; + for (i = len - 3; i > 0; i--) { + tcp->ppt_data[j] = cio_read(cio, 1); + j++; + } + tcp->ppt_store = j; +} + +static void j2k_write_tlm(opj_j2k_t *j2k){ + int lenp; + opj_cio_t *cio = j2k->cio; + j2k->tlm_start = cio_tell(cio); + cio_write(cio, J2K_MS_TLM, 2);/* TLM */ + lenp = 4 + (5*j2k->totnum_tp); + cio_write(cio,lenp,2); /* Ltlm */ + cio_write(cio, 0,1); /* Ztlm=0*/ + cio_write(cio,80,1); /* Stlm ST=1(8bits-255 tiles max),SP=1(Ptlm=32bits) */ + cio_skip(cio,5*j2k->totnum_tp); +} + +static void j2k_write_sot(opj_j2k_t *j2k) { + int lenp, len; + + opj_cio_t *cio = j2k->cio; + + j2k->sot_start = cio_tell(cio); + cio_write(cio, J2K_MS_SOT, 2); /* SOT */ + lenp = cio_tell(cio); + cio_skip(cio, 2); /* Lsot (further) */ + cio_write(cio, j2k->curtileno, 2); /* Isot */ + cio_skip(cio, 4); /* Psot (further in j2k_write_sod) */ + cio_write(cio, j2k->cur_tp_num , 1); /* TPsot */ + cio_write(cio, j2k->cur_totnum_tp[j2k->curtileno], 1); /* TNsot */ + len = cio_tell(cio) - lenp; + cio_seek(cio, lenp); + cio_write(cio, len, 2); /* Lsot */ + cio_seek(cio, lenp + len); + + /* UniPG>> */ +#ifdef USE_JPWL + /* update markers struct */ + j2k_add_marker(j2k->cstr_info, J2K_MS_SOT, j2k->sot_start, len + 2); +#endif /* USE_JPWL */ + /* <cp; + opj_cio_t *cio = j2k->cio; + + len = cio_read(cio, 2); + tileno = cio_read(cio, 2); + +#ifdef USE_JPWL + if (j2k->cp->correct) { + + static int backup_tileno = 0; + + /* tileno is negative or larger than the number of tiles!!! */ + if ((tileno < 0) || (tileno > (cp->tw * cp->th))) { + opj_event_msg(j2k->cinfo, EVT_ERROR, + "JPWL: bad tile number (%d out of a maximum of %d)\n", + tileno, (cp->tw * cp->th)); + if (!JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + /* we try to correct */ + tileno = backup_tileno; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n" + "- setting tile number to %d\n", + tileno); + } + + /* keep your private count of tiles */ + backup_tileno++; + }; +#endif /* USE_JPWL */ + + if (cp->tileno_size == 0) { + cp->tileno[cp->tileno_size] = tileno; + cp->tileno_size++; + } else { + i = 0; + while (i < cp->tileno_size && status == 0) { + status = cp->tileno[i] == tileno ? 1 : 0; + i++; + } + if (status == 0) { + cp->tileno[cp->tileno_size] = tileno; + cp->tileno_size++; + } + } + + totlen = cio_read(cio, 4); + +#ifdef USE_JPWL + if (j2k->cp->correct) { + + /* totlen is negative or larger than the bytes left!!! */ + if ((totlen < 0) || (totlen > (cio_numbytesleft(cio) + 8))) { + opj_event_msg(j2k->cinfo, EVT_ERROR, + "JPWL: bad tile byte size (%d bytes against %d bytes left)\n", + totlen, cio_numbytesleft(cio) + 8); + if (!JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + /* we try to correct */ + totlen = 0; + opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n" + "- setting Psot to %d => assuming it is the last tile\n", + totlen); + } + + }; +#endif /* USE_JPWL */ + + if (!totlen) + totlen = cio_numbytesleft(cio) + 8; + + partno = cio_read(cio, 1); + numparts = cio_read(cio, 1); + + j2k->curtileno = tileno; + j2k->cur_tp_num = partno; + j2k->eot = cio_getbp(cio) - 12 + totlen; + j2k->state = J2K_STATE_TPH; + tcp = &cp->tcps[j2k->curtileno]; + + /* Index */ + if (j2k->cstr_info) { + if (tcp->first) { + if (tileno == 0) + j2k->cstr_info->main_head_end = cio_tell(cio) - 13; + j2k->cstr_info->tile[tileno].tileno = tileno; + j2k->cstr_info->tile[tileno].start_pos = cio_tell(cio) - 12; + j2k->cstr_info->tile[tileno].end_pos = j2k->cstr_info->tile[tileno].start_pos + totlen - 1; + j2k->cstr_info->tile[tileno].num_tps = numparts; + if (numparts) + j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(numparts * sizeof(opj_tp_info_t)); + else + j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(10 * sizeof(opj_tp_info_t)); // Fixme (10) + } + else { + j2k->cstr_info->tile[tileno].end_pos += totlen; + } + j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = cio_tell(cio) - 12; + j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos = + j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totlen - 1; + } + + if (tcp->first == 1) { + /* Initialization PPT */ + opj_tccp_t *tmp = tcp->tccps; + memcpy(tcp, j2k->default_tcp, sizeof(opj_tcp_t)); + tcp->ppt = 0; + tcp->ppt_data = NULL; + tcp->ppt_data_first = NULL; + tcp->tccps = tmp; + + for (i = 0; i < j2k->image->numcomps; i++) { + tcp->tccps[i] = j2k->default_tcp->tccps[i]; + } + cp->tcps[j2k->curtileno].first = 0; + } +} + +static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder) { + int l, layno; + int totlen; + opj_tcp_t *tcp = NULL; + opj_codestream_info_t *cstr_info = NULL; + + opj_tcd_t *tcd = (opj_tcd_t*)tile_coder; /* cast is needed because of conflicts in header inclusions */ + opj_cp_t *cp = j2k->cp; + opj_cio_t *cio = j2k->cio; + + tcd->tp_num = j2k->tp_num ; + tcd->cur_tp_num = j2k->cur_tp_num; + + cio_write(cio, J2K_MS_SOD, 2); + if (j2k->curtileno == 0) { + j2k->sod_start = cio_tell(cio) + j2k->pos_correction; + } + + /* INDEX >> */ + cstr_info = j2k->cstr_info; + if (cstr_info) { + if (!j2k->cur_tp_num ) { + cstr_info->tile[j2k->curtileno].end_header = cio_tell(cio) + j2k->pos_correction - 1; + j2k->cstr_info->tile[j2k->curtileno].tileno = j2k->curtileno; + } + else{ + if(cstr_info->tile[j2k->curtileno].packet[cstr_info->packno - 1].end_pos < cio_tell(cio)) + cstr_info->tile[j2k->curtileno].packet[cstr_info->packno].start_pos = cio_tell(cio); + } + /* UniPG>> */ +#ifdef USE_JPWL + /* update markers struct */ + j2k_add_marker(j2k->cstr_info, J2K_MS_SOD, j2k->sod_start, 2); +#endif /* USE_JPWL */ + /* <tcps[j2k->curtileno]; + for (layno = 0; layno < tcp->numlayers; layno++) { + if (tcp->rates[layno]>(j2k->sod_start / (cp->th * cp->tw))) { + tcp->rates[layno]-=(j2k->sod_start / (cp->th * cp->tw)); + } else if (tcp->rates[layno]) { + tcp->rates[layno]=1; + } + } + if(j2k->cur_tp_num == 0){ + tcd->tcd_image->tiles->packno = 0; + if(cstr_info) + cstr_info->packno = 0; + } + + l = tcd_encode_tile(tcd, j2k->curtileno, cio_getbp(cio), cio_numbytesleft(cio) - 2, cstr_info); + + /* Writing Psot in SOT marker */ + totlen = cio_tell(cio) + l - j2k->sot_start; + cio_seek(cio, j2k->sot_start + 6); + cio_write(cio, totlen, 4); + cio_seek(cio, j2k->sot_start + totlen); + /* Writing Ttlm and Ptlm in TLM marker */ + if(cp->cinema){ + cio_seek(cio, j2k->tlm_start + 6 + (5*j2k->cur_tp_num)); + cio_write(cio, j2k->curtileno, 1); + cio_write(cio, totlen, 4); + } + cio_seek(cio, j2k->sot_start + totlen); +} + +static void j2k_read_sod(opj_j2k_t *j2k) { + int len, truncate = 0, i; + unsigned char *data = NULL, *data_ptr = NULL; + + opj_cio_t *cio = j2k->cio; + int curtileno = j2k->curtileno; + + /* Index */ + if (j2k->cstr_info) { + j2k->cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_header = + cio_tell(cio) + j2k->pos_correction - 1; + if (j2k->cur_tp_num == 0) + j2k->cstr_info->tile[j2k->curtileno].end_header = cio_tell(cio) + j2k->pos_correction - 1; + j2k->cstr_info->packno = 0; + } + + len = int_min(j2k->eot - cio_getbp(cio), cio_numbytesleft(cio) + 1); + + if (len == cio_numbytesleft(cio) + 1) { + truncate = 1; /* Case of a truncate codestream */ + } + + data = j2k->tile_data[curtileno]; + data = (unsigned char*) opj_realloc(data, (j2k->tile_len[curtileno] + len) * sizeof(unsigned char)); + + data_ptr = data + j2k->tile_len[curtileno]; + for (i = 0; i < len; i++) { + data_ptr[i] = cio_read(cio, 1); + } + + j2k->tile_len[curtileno] += len; + j2k->tile_data[curtileno] = data; + + if (!truncate) { + j2k->state = J2K_STATE_TPHSOT; + } else { + j2k->state = J2K_STATE_NEOC; /* RAJOUTE !! */ + } + j2k->cur_tp_num++; +} + +static void j2k_write_rgn(opj_j2k_t *j2k, int compno, int tileno) { + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = &cp->tcps[tileno]; + opj_cio_t *cio = j2k->cio; + int numcomps = j2k->image->numcomps; + + cio_write(cio, J2K_MS_RGN, 2); /* RGN */ + cio_write(cio, numcomps <= 256 ? 5 : 6, 2); /* Lrgn */ + cio_write(cio, compno, numcomps <= 256 ? 1 : 2); /* Crgn */ + cio_write(cio, 0, 1); /* Srgn */ + cio_write(cio, tcp->tccps[compno].roishift, 1); /* SPrgn */ +} + +static void j2k_read_rgn(opj_j2k_t *j2k) { + int len, compno, roisty; + + opj_cp_t *cp = j2k->cp; + opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; + opj_cio_t *cio = j2k->cio; + int numcomps = j2k->image->numcomps; + + len = cio_read(cio, 2); /* Lrgn */ + compno = cio_read(cio, numcomps <= 256 ? 1 : 2); /* Crgn */ + roisty = cio_read(cio, 1); /* Srgn */ + +#ifdef USE_JPWL + if (j2k->cp->correct) { + /* totlen is negative or larger than the bytes left!!! */ + if (compno >= numcomps) { + opj_event_msg(j2k->cinfo, EVT_ERROR, + "JPWL: bad component number in RGN (%d when there are only %d)\n", + compno, numcomps); + if (!JPWL_ASSUME || JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return; + } + } + }; +#endif /* USE_JPWL */ + + tcp->tccps[compno].roishift = cio_read(cio, 1); /* SPrgn */ +} + +static void j2k_write_eoc(opj_j2k_t *j2k) { + opj_cio_t *cio = j2k->cio; + /* opj_event_msg(j2k->cinfo, "%.8x: EOC\n", cio_tell(cio) + j2k->pos_correction); */ + cio_write(cio, J2K_MS_EOC, 2); + +/* UniPG>> */ +#ifdef USE_JPWL + /* update markers struct */ + j2k_add_marker(j2k->cstr_info, J2K_MS_EOC, cio_tell(cio) - 2, 2); +#endif /* USE_JPWL */ +/* <cp->limit_decoding != DECODE_ALL_BUT_PACKETS) { + opj_tcd_t *tcd = tcd_create(j2k->cinfo); + tcd_malloc_decode(tcd, j2k->image, j2k->cp); + for (i = 0; i < j2k->cp->tileno_size; i++) { + tcd_malloc_decode_tile(tcd, j2k->image, j2k->cp, i, j2k->cstr_info); + tileno = j2k->cp->tileno[i]; + success = tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno, j2k->cstr_info); + opj_free(j2k->tile_data[tileno]); + j2k->tile_data[tileno] = NULL; + tcd_free_decode_tile(tcd, i); + if (success == false) { + j2k->state |= J2K_STATE_ERR; + break; + } + } + tcd_free_decode(tcd); + tcd_destroy(tcd); + } + /* if packets should not be decoded */ + else { + for (i = 0; i < j2k->cp->tileno_size; i++) { + tileno = j2k->cp->tileno[i]; + opj_free(j2k->tile_data[tileno]); + j2k->tile_data[tileno] = NULL; + } + } + if (j2k->state & J2K_STATE_ERR) + j2k->state = J2K_STATE_MT + J2K_STATE_ERR; + else + j2k->state = J2K_STATE_MT; +} + +typedef struct opj_dec_mstabent { + /** marker value */ + int id; + /** value of the state when the marker can appear */ + int states; + /** action linked to the marker */ + void (*handler) (opj_j2k_t *j2k); +} opj_dec_mstabent_t; + +opj_dec_mstabent_t j2k_dec_mstab[] = { + {J2K_MS_SOC, J2K_STATE_MHSOC, j2k_read_soc}, + {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, j2k_read_sot}, + {J2K_MS_SOD, J2K_STATE_TPH, j2k_read_sod}, + {J2K_MS_EOC, J2K_STATE_TPHSOT, j2k_read_eoc}, + {J2K_MS_SIZ, J2K_STATE_MHSIZ, j2k_read_siz}, + {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_cod}, + {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_coc}, + {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_rgn}, + {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcd}, + {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcc}, + {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_poc}, + {J2K_MS_TLM, J2K_STATE_MH, j2k_read_tlm}, + {J2K_MS_PLM, J2K_STATE_MH, j2k_read_plm}, + {J2K_MS_PLT, J2K_STATE_TPH, j2k_read_plt}, + {J2K_MS_PPM, J2K_STATE_MH, j2k_read_ppm}, + {J2K_MS_PPT, J2K_STATE_TPH, j2k_read_ppt}, + {J2K_MS_SOP, 0, 0}, + {J2K_MS_CRG, J2K_STATE_MH, j2k_read_crg}, + {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_com}, + +#ifdef USE_JPWL + {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc}, + {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb}, + {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd}, + {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red}, +#endif /* USE_JPWL */ +#ifdef USE_JPSEC + {J2K_MS_SEC, J2K_STATE_MH, j2k_read_sec}, + {J2K_MS_INSEC, 0, j2k_read_insec}, +#endif /* USE_JPSEC */ + + {0, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_unk} +}; + +static void j2k_read_unk(opj_j2k_t *j2k) { + opj_event_msg(j2k->cinfo, EVT_WARNING, "Unknown marker\n"); + +#ifdef USE_JPWL + if (j2k->cp->correct) { + int m = 0, id, i; + int min_id = 0, min_dist = 17, cur_dist = 0, tmp_id; + cio_seek(j2k->cio, cio_tell(j2k->cio) - 2); + id = cio_read(j2k->cio, 2); + opj_event_msg(j2k->cinfo, EVT_ERROR, + "JPWL: really don't know this marker %x\n", + id); + if (!JPWL_ASSUME) { + opj_event_msg(j2k->cinfo, EVT_ERROR, + "- possible synch loss due to uncorrectable codestream errors => giving up\n"); + return; + } + /* OK, activate this at your own risk!!! */ + /* we look for the marker at the minimum hamming distance from this */ + while (j2k_dec_mstab[m].id) { + + /* 1's where they differ */ + tmp_id = j2k_dec_mstab[m].id ^ id; + + /* compute the hamming distance between our id and the current */ + cur_dist = 0; + for (i = 0; i < 16; i++) { + if ((tmp_id >> i) & 0x0001) { + cur_dist++; + } + } + + /* if current distance is smaller, set the minimum */ + if (cur_dist < min_dist) { + min_dist = cur_dist; + min_id = j2k_dec_mstab[m].id; + } + + /* jump to the next marker */ + m++; + } + + /* do we substitute the marker? */ + if (min_dist < JPWL_MAXIMUM_HAMMING) { + opj_event_msg(j2k->cinfo, EVT_ERROR, + "- marker %x is at distance %d from the read %x\n", + min_id, min_dist, id); + opj_event_msg(j2k->cinfo, EVT_ERROR, + "- trying to substitute in place and crossing fingers!\n"); + cio_seek(j2k->cio, cio_tell(j2k->cio) - 2); + cio_write(j2k->cio, min_id, 2); + + /* rewind */ + cio_seek(j2k->cio, cio_tell(j2k->cio) - 2); + + } + + }; +#endif /* USE_JPWL */ + +} + +/** +Read the lookup table containing all the marker, status and action +@param id Marker value +*/ +static opj_dec_mstabent_t *j2k_dec_mstab_lookup(int id) { + opj_dec_mstabent_t *e; + for (e = j2k_dec_mstab; e->id != 0; e++) { + if (e->id == id) { + break; + } + } + return e; +} + +/* ----------------------------------------------------------------------- */ +/* J2K / JPT decoder interface */ +/* ----------------------------------------------------------------------- */ + +opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo) { + opj_j2k_t *j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t)); + if(!j2k) + return NULL; + + j2k->default_tcp = (opj_tcp_t*) opj_calloc(1, sizeof(opj_tcp_t)); + if(!j2k->default_tcp) { + opj_free(j2k); + return NULL; + } + + j2k->cinfo = cinfo; + j2k->tile_data = NULL; + + return j2k; +} + +void j2k_destroy_decompress(opj_j2k_t *j2k) { + int i = 0; + + if(j2k->tile_len != NULL) { + opj_free(j2k->tile_len); + } + if(j2k->tile_data != NULL) { + opj_free(j2k->tile_data); + } + if(j2k->default_tcp != NULL) { + opj_tcp_t *default_tcp = j2k->default_tcp; + if(default_tcp->ppt_data_first != NULL) { + opj_free(default_tcp->ppt_data_first); + } + if(j2k->default_tcp->tccps != NULL) { + opj_free(j2k->default_tcp->tccps); + } + opj_free(j2k->default_tcp); + } + if(j2k->cp != NULL) { + opj_cp_t *cp = j2k->cp; + if(cp->tcps != NULL) { + for(i = 0; i < cp->tw * cp->th; i++) { + if(cp->tcps[i].ppt_data_first != NULL) { + opj_free(cp->tcps[i].ppt_data_first); + } + if(cp->tcps[i].tccps != NULL) { + opj_free(cp->tcps[i].tccps); + } + } + opj_free(cp->tcps); + } + if(cp->ppm_data_first != NULL) { + opj_free(cp->ppm_data_first); + } + if(cp->tileno != NULL) { + opj_free(cp->tileno); + } + if(cp->comment != NULL) { + opj_free(cp->comment); + } + + opj_free(cp); + } + opj_free(j2k); +} + +void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters) { + if(j2k && parameters) { + /* create and initialize the coding parameters structure */ + opj_cp_t *cp = (opj_cp_t*) opj_calloc(1, sizeof(opj_cp_t)); + cp->reduce = parameters->cp_reduce; + cp->layer = parameters->cp_layer; + cp->limit_decoding = parameters->cp_limit_decoding; + +#ifdef USE_JPWL + cp->correct = parameters->jpwl_correct; + cp->exp_comps = parameters->jpwl_exp_comps; + cp->max_tiles = parameters->jpwl_max_tiles; +#endif /* USE_JPWL */ + + + /* keep a link to cp so that we can destroy it later in j2k_destroy_decompress */ + j2k->cp = cp; + } +} + +opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info) { + opj_image_t *image = NULL; + + opj_common_ptr cinfo = j2k->cinfo; + + j2k->cio = cio; + j2k->cstr_info = cstr_info; + if (cstr_info) + memset(cstr_info, 0, sizeof(opj_codestream_info_t)); + + /* create an empty image */ + image = opj_image_create0(); + j2k->image = image; + + j2k->state = J2K_STATE_MHSOC; + + for (;;) { + opj_dec_mstabent_t *e; + int id = cio_read(cio, 2); + +#ifdef USE_JPWL + /* we try to honor JPWL correction power */ + if (j2k->cp->correct) { + + int orig_pos = cio_tell(cio); + bool status; + + /* call the corrector */ + status = jpwl_correct(j2k); + + /* go back to where you were */ + cio_seek(cio, orig_pos - 2); + + /* re-read the marker */ + id = cio_read(cio, 2); + + /* check whether it begins with ff */ + if (id >> 8 != 0xff) { + opj_event_msg(cinfo, EVT_ERROR, + "JPWL: possible bad marker %x at %d\n", + id, cio_tell(cio) - 2); + if (!JPWL_ASSUME) { + opj_image_destroy(image); + opj_event_msg(cinfo, EVT_ERROR, "JPWL: giving up\n"); + return 0; + } + /* we try to correct */ + id = id | 0xff00; + cio_seek(cio, cio_tell(cio) - 2); + cio_write(cio, id, 2); + opj_event_msg(cinfo, EVT_WARNING, "- trying to adjust this\n" + "- setting marker to %x\n", + id); + } + + } +#endif /* USE_JPWL */ + + if (id >> 8 != 0xff) { + opj_image_destroy(image); + opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id); + return 0; + } + e = j2k_dec_mstab_lookup(id); + // Check if the marker is known + if (!(j2k->state & e->states)) { + opj_image_destroy(image); + opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id); + return 0; + } + // Check if the decoding is limited to the main header + if (e->id == J2K_MS_SOT && j2k->cp->limit_decoding == LIMIT_TO_MAIN_HEADER) { + opj_event_msg(cinfo, EVT_INFO, "Main Header decoded.\n"); + return image; + } + + if (e->handler) { + (*e->handler)(j2k); + } + if (j2k->state & J2K_STATE_ERR) + return NULL; + + if (j2k->state == J2K_STATE_MT) { + break; + } + if (j2k->state == J2K_STATE_NEOC) { + break; + } + } + if (j2k->state == J2K_STATE_NEOC) { + j2k_read_eoc(j2k); + } + + if (j2k->state != J2K_STATE_MT) { + opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n"); + } + + return image; +} + +/* +* Read a JPT-stream and decode file +* +*/ +opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info) { + opj_image_t *image = NULL; + opj_jpt_msg_header_t header; + int position; + + opj_common_ptr cinfo = j2k->cinfo; + + j2k->cio = cio; + + /* create an empty image */ + image = opj_image_create0(); + j2k->image = image; + + j2k->state = J2K_STATE_MHSOC; + + /* Initialize the header */ + jpt_init_msg_header(&header); + /* Read the first header of the message */ + jpt_read_msg_header(cinfo, cio, &header); + + position = cio_tell(cio); + if (header.Class_Id != 6) { /* 6 : Main header data-bin message */ + opj_image_destroy(image); + opj_event_msg(cinfo, EVT_ERROR, "[JPT-stream] : Expecting Main header first [class_Id %d] !\n", header.Class_Id); + return 0; + } + + for (;;) { + opj_dec_mstabent_t *e = NULL; + int id; + + if (!cio_numbytesleft(cio)) { + j2k_read_eoc(j2k); + return image; + } + /* data-bin read -> need to read a new header */ + if ((unsigned int) (cio_tell(cio) - position) == header.Msg_length) { + jpt_read_msg_header(cinfo, cio, &header); + position = cio_tell(cio); + if (header.Class_Id != 4) { /* 4 : Tile data-bin message */ + opj_image_destroy(image); + opj_event_msg(cinfo, EVT_ERROR, "[JPT-stream] : Expecting Tile info !\n"); + return 0; + } + } + + id = cio_read(cio, 2); + if (id >> 8 != 0xff) { + opj_image_destroy(image); + opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id); + return 0; + } + e = j2k_dec_mstab_lookup(id); + if (!(j2k->state & e->states)) { + opj_image_destroy(image); + opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id); + return 0; + } + if (e->handler) { + (*e->handler)(j2k); + } + if (j2k->state == J2K_STATE_MT) { + break; + } + if (j2k->state == J2K_STATE_NEOC) { + break; + } + } + if (j2k->state == J2K_STATE_NEOC) { + j2k_read_eoc(j2k); + } + + if (j2k->state != J2K_STATE_MT) { + opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n"); + } + + return image; +} + +/* ----------------------------------------------------------------------- */ +/* J2K encoder interface */ +/* ----------------------------------------------------------------------- */ + +opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo) { + opj_j2k_t *j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t)); + if(j2k) { + j2k->cinfo = cinfo; + } + return j2k; +} + +void j2k_destroy_compress(opj_j2k_t *j2k) { + int tileno; + + if(!j2k) return; + if(j2k->cp != NULL) { + opj_cp_t *cp = j2k->cp; + + if(cp->comment) { + opj_free(cp->comment); + } + if(cp->matrice) { + opj_free(cp->matrice); + } + for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { + opj_free(cp->tcps[tileno].tccps); + } + opj_free(cp->tcps); + opj_free(cp); + } + + opj_free(j2k); +} + +void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image) { + int i, j, tileno, numpocs_tile; + opj_cp_t *cp = NULL; + + if(!j2k || !parameters || ! image) { + return; + } + + /* create and initialize the coding parameters structure */ + cp = (opj_cp_t*) opj_calloc(1, sizeof(opj_cp_t)); + + /* keep a link to cp so that we can destroy it later in j2k_destroy_compress */ + j2k->cp = cp; + + /* set default values for cp */ + cp->tw = 1; + cp->th = 1; + + /* + copy user encoding parameters + */ + cp->cinema = parameters->cp_cinema; + cp->max_comp_size = parameters->max_comp_size; + cp->rsiz = parameters->cp_rsiz; + cp->disto_alloc = parameters->cp_disto_alloc; + cp->fixed_alloc = parameters->cp_fixed_alloc; + cp->fixed_quality = parameters->cp_fixed_quality; + + /* mod fixed_quality */ + if(parameters->cp_matrice) { + size_t array_size = parameters->tcp_numlayers * parameters->numresolution * 3 * sizeof(int); + cp->matrice = (int *) opj_malloc(array_size); + memcpy(cp->matrice, parameters->cp_matrice, array_size); + } + + /* tiles */ + cp->tdx = parameters->cp_tdx; + cp->tdy = parameters->cp_tdy; + + /* tile offset */ + cp->tx0 = parameters->cp_tx0; + cp->ty0 = parameters->cp_ty0; + + /* comment string */ + if(parameters->cp_comment) { + cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1); + if(cp->comment) { + strcpy(cp->comment, parameters->cp_comment); + } + } + + /* + calculate other encoding parameters + */ + + if (parameters->tile_size_on) { + cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx); + cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy); + } else { + cp->tdx = image->x1 - cp->tx0; + cp->tdy = image->y1 - cp->ty0; + } + + if(parameters->tp_on){ + cp->tp_flag = parameters->tp_flag; + cp->tp_on = 1; + } + + cp->img_size = 0; + for(i=0;inumcomps ;i++){ + cp->img_size += (image->comps[i].w *image->comps[i].h * image->comps[i].prec); + } + + +#ifdef USE_JPWL + /* + calculate JPWL encoding parameters + */ + + if (parameters->jpwl_epc_on) { + int i; + + /* set JPWL on */ + cp->epc_on = true; + cp->info_on = false; /* no informative technique */ + + /* set EPB on */ + if ((parameters->jpwl_hprot_MH > 0) || (parameters->jpwl_hprot_TPH[0] > 0)) { + cp->epb_on = true; + + cp->hprot_MH = parameters->jpwl_hprot_MH; + for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { + cp->hprot_TPH_tileno[i] = parameters->jpwl_hprot_TPH_tileno[i]; + cp->hprot_TPH[i] = parameters->jpwl_hprot_TPH[i]; + } + /* if tile specs are not specified, copy MH specs */ + if (cp->hprot_TPH[0] == -1) { + cp->hprot_TPH_tileno[0] = 0; + cp->hprot_TPH[0] = parameters->jpwl_hprot_MH; + } + for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) { + cp->pprot_tileno[i] = parameters->jpwl_pprot_tileno[i]; + cp->pprot_packno[i] = parameters->jpwl_pprot_packno[i]; + cp->pprot[i] = parameters->jpwl_pprot[i]; + } + } + + /* set ESD writing */ + if ((parameters->jpwl_sens_size == 1) || (parameters->jpwl_sens_size == 2)) { + cp->esd_on = true; + + cp->sens_size = parameters->jpwl_sens_size; + cp->sens_addr = parameters->jpwl_sens_addr; + cp->sens_range = parameters->jpwl_sens_range; + + cp->sens_MH = parameters->jpwl_sens_MH; + for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { + cp->sens_TPH_tileno[i] = parameters->jpwl_sens_TPH_tileno[i]; + cp->sens_TPH[i] = parameters->jpwl_sens_TPH[i]; + } + } + + /* always set RED writing to false: we are at the encoder */ + cp->red_on = false; + + } else { + cp->epc_on = false; + } +#endif /* USE_JPWL */ + + + /* initialize the mutiple tiles */ + /* ---------------------------- */ + cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t)); + + for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { + opj_tcp_t *tcp = &cp->tcps[tileno]; + tcp->numlayers = parameters->tcp_numlayers; + for (j = 0; j < tcp->numlayers; j++) { + if(cp->cinema){ + if (cp->fixed_quality) { + tcp->distoratio[j] = parameters->tcp_distoratio[j]; + } + tcp->rates[j] = parameters->tcp_rates[j]; + }else{ + if (cp->fixed_quality) { /* add fixed_quality */ + tcp->distoratio[j] = parameters->tcp_distoratio[j]; + } else { + tcp->rates[j] = parameters->tcp_rates[j]; + } + } + } + tcp->csty = parameters->csty; + tcp->prg = parameters->prog_order; + tcp->mct = parameters->tcp_mct; + + numpocs_tile = 0; + tcp->POC = 0; + if (parameters->numpocs) { + /* initialisation of POC */ + tcp->POC = 1; + for (i = 0; i < parameters->numpocs; i++) { + if((tileno == parameters->POC[i].tile - 1) || (parameters->POC[i].tile == -1)) { + opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile]; + tcp_poc->resno0 = parameters->POC[numpocs_tile].resno0; + tcp_poc->compno0 = parameters->POC[numpocs_tile].compno0; + tcp_poc->layno1 = parameters->POC[numpocs_tile].layno1; + tcp_poc->resno1 = parameters->POC[numpocs_tile].resno1; + tcp_poc->compno1 = parameters->POC[numpocs_tile].compno1; + tcp_poc->prg1 = parameters->POC[numpocs_tile].prg1; + tcp_poc->tile = parameters->POC[numpocs_tile].tile; + numpocs_tile++; + } + } + tcp->numpocs = numpocs_tile -1 ; + }else{ + tcp->numpocs = 0; + } + + tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps, sizeof(opj_tccp_t)); + + for (i = 0; i < image->numcomps; i++) { + opj_tccp_t *tccp = &tcp->tccps[i]; + tccp->csty = parameters->csty & 0x01; /* 0 => one precinct || 1 => custom precinct */ + tccp->numresolutions = parameters->numresolution; + tccp->cblkw = int_floorlog2(parameters->cblockw_init); + tccp->cblkh = int_floorlog2(parameters->cblockh_init); + tccp->cblksty = parameters->mode; + tccp->qmfbid = parameters->irreversible ? 0 : 1; + tccp->qntsty = parameters->irreversible ? J2K_CCP_QNTSTY_SEQNT : J2K_CCP_QNTSTY_NOQNT; + tccp->numgbits = 2; + if (i == parameters->roi_compno) { + tccp->roishift = parameters->roi_shift; + } else { + tccp->roishift = 0; + } + + if(parameters->cp_cinema) + { + //Precinct size for lowest frequency subband=128 + tccp->prcw[0] = 7; + tccp->prch[0] = 7; + //Precinct size at all other resolutions = 256 + for (j = 1; j < tccp->numresolutions; j++) { + tccp->prcw[j] = 8; + tccp->prch[j] = 8; + } + }else{ + if (parameters->csty & J2K_CCP_CSTY_PRT) { + int p = 0; + for (j = tccp->numresolutions - 1; j >= 0; j--) { + if (p < parameters->res_spec) { + + if (parameters->prcw_init[p] < 1) { + tccp->prcw[j] = 1; + } else { + tccp->prcw[j] = int_floorlog2(parameters->prcw_init[p]); + } + + if (parameters->prch_init[p] < 1) { + tccp->prch[j] = 1; + }else { + tccp->prch[j] = int_floorlog2(parameters->prch_init[p]); + } + + } else { + int res_spec = parameters->res_spec; + int size_prcw = parameters->prcw_init[res_spec - 1] >> (p - (res_spec - 1)); + int size_prch = parameters->prch_init[res_spec - 1] >> (p - (res_spec - 1)); + + if (size_prcw < 1) { + tccp->prcw[j] = 1; + } else { + tccp->prcw[j] = int_floorlog2(size_prcw); + } + + if (size_prch < 1) { + tccp->prch[j] = 1; + } else { + tccp->prch[j] = int_floorlog2(size_prch); + } + } + p++; + /*printf("\nsize precinct for level %d : %d,%d\n", j,tccp->prcw[j], tccp->prch[j]); */ + } //end for + } else { + for (j = 0; j < tccp->numresolutions; j++) { + tccp->prcw[j] = 15; + tccp->prch[j] = 15; + } + } + } + + dwt_calc_explicit_stepsizes(tccp, image->comps[i].prec); + } + } +} + +bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) { + int tileno, compno; + opj_cp_t *cp = NULL; + + opj_tcd_t *tcd = NULL; /* TCD component */ + + j2k->cio = cio; + j2k->image = image; + + cp = j2k->cp; + + /* INDEX >> */ + j2k->cstr_info = cstr_info; + if (cstr_info) { + int compno; + cstr_info->tile = (opj_tile_info_t *) opj_malloc(cp->tw * cp->th * sizeof(opj_tile_info_t)); + cstr_info->image_w = image->x1 - image->x0; + cstr_info->image_h = image->y1 - image->y0; + cstr_info->prog = (&cp->tcps[0])->prg; + cstr_info->tw = cp->tw; + cstr_info->th = cp->th; + cstr_info->tile_x = cp->tdx; /* new version parser */ + cstr_info->tile_y = cp->tdy; /* new version parser */ + cstr_info->tile_Ox = cp->tx0; /* new version parser */ + cstr_info->tile_Oy = cp->ty0; /* new version parser */ + cstr_info->numcomps = image->numcomps; + cstr_info->numlayers = (&cp->tcps[0])->numlayers; + cstr_info->numdecompos = (int*) opj_malloc(image->numcomps * sizeof(int)); + for (compno=0; compno < image->numcomps; compno++) { + cstr_info->numdecompos[compno] = (&cp->tcps[0])->tccps->numresolutions - 1; + } + cstr_info->D_max = 0.0; /* ADD Marcela */ + cstr_info->main_head_start = cio_tell(cio); /* position of SOC */ + cstr_info->maxmarknum = 100; + cstr_info->marker = (opj_marker_info_t *) opj_malloc(cstr_info->maxmarknum * sizeof(opj_marker_info_t)); + cstr_info->marknum = 0; + } + /* << INDEX */ + + j2k_write_soc(j2k); + j2k_write_siz(j2k); + j2k_write_cod(j2k); + j2k_write_qcd(j2k); + + if(cp->cinema){ + for (compno = 1; compno < image->numcomps; compno++) { + j2k_write_coc(j2k, compno); + j2k_write_qcc(j2k, compno); + } + } + + for (compno = 0; compno < image->numcomps; compno++) { + opj_tcp_t *tcp = &cp->tcps[0]; + if (tcp->tccps[compno].roishift) + j2k_write_rgn(j2k, compno, 0); + } + if (cp->comment != NULL) { + j2k_write_com(j2k); + } + + j2k->totnum_tp = j2k_calculate_tp(cp,image->numcomps,image,j2k); + /* TLM Marker*/ + if(cp->cinema){ + j2k_write_tlm(j2k); + if (cp->cinema == CINEMA4K_24) { + j2k_write_poc(j2k); + } + } + + /* uncomment only for testing JPSEC marker writing */ + /* j2k_write_sec(j2k); */ + + /* INDEX >> */ + if(cstr_info) { + cstr_info->main_head_end = cio_tell(cio) - 1; + } + /* << INDEX */ + /**** Main Header ENDS here ***/ + + /* create the tile encoder */ + tcd = tcd_create(j2k->cinfo); + + /* encode each tile */ + for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { + int pino; + int tilepartno=0; + /* UniPG>> */ + int acc_pack_num = 0; + /* <tcps[tileno]; + opj_event_msg(j2k->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1, cp->tw * cp->th); + + j2k->curtileno = tileno; + j2k->cur_tp_num = 0; + tcd->cur_totnum_tp = j2k->cur_totnum_tp[j2k->curtileno]; + /* initialisation before tile encoding */ + if (tileno == 0) { + tcd_malloc_encode(tcd, image, cp, j2k->curtileno); + } else { + tcd_init_encode(tcd, image, cp, j2k->curtileno); + } + + /* INDEX >> */ + if(cstr_info) { + cstr_info->tile[j2k->curtileno].start_pos = cio_tell(cio) + j2k->pos_correction; + } + /* << INDEX */ + + for(pino = 0; pino <= tcp->numpocs; pino++) { + int tot_num_tp; + tcd->cur_pino=pino; + + /*Get number of tile parts*/ + tot_num_tp = j2k_get_num_tp(cp,pino,tileno); + tcd->tp_pos = cp->tp_pos; + + for(tilepartno = 0; tilepartno < tot_num_tp ; tilepartno++){ + j2k->tp_num = tilepartno; + /* INDEX >> */ + if(cstr_info) + cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pos = + cio_tell(cio) + j2k->pos_correction; + /* << INDEX */ + j2k_write_sot(j2k); + + if(j2k->cur_tp_num == 0 && cp->cinema == 0){ + for (compno = 1; compno < image->numcomps; compno++) { + j2k_write_coc(j2k, compno); + j2k_write_qcc(j2k, compno); + } + if (cp->tcps[tileno].numpocs) { + j2k_write_poc(j2k); + } + } + + /* INDEX >> */ + if(cstr_info) + cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_header = + cio_tell(cio) + j2k->pos_correction + 1; + /* << INDEX */ + + j2k_write_sod(j2k, tcd); + + /* INDEX >> */ + if(cstr_info) { + cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_pos = + cio_tell(cio) + j2k->pos_correction - 1; + cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pack = + acc_pack_num; + cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_numpacks = + cstr_info->packno - acc_pack_num; + acc_pack_num = cstr_info->packno; + } + /* << INDEX */ + + j2k->cur_tp_num++; + } + } + if(cstr_info) { + cstr_info->tile[j2k->curtileno].end_pos = cio_tell(cio) + j2k->pos_correction - 1; + } + + + /* + if (tile->PPT) { // BAD PPT !!! + FILE *PPT_file; + int i; + PPT_file=fopen("PPT","rb"); + fprintf(stderr,"%c%c%c%c",255,97,tile->len_ppt/256,tile->len_ppt%256); + for (i=0;ilen_ppt;i++) { + unsigned char elmt; + fread(&elmt, 1, 1, PPT_file); + fwrite(&elmt,1,1,f); + } + fclose(PPT_file); + unlink("PPT"); + } + */ + + } + + /* destroy the tile encoder */ + tcd_free_encode(tcd); + tcd_destroy(tcd); + + opj_free(j2k->cur_totnum_tp); + + j2k_write_eoc(j2k); + + if(cstr_info) { + cstr_info->codestream_size = cio_tell(cio) + j2k->pos_correction; + /* UniPG>> */ + /* The following adjustment is done to adjust the codestream size */ + /* if SOD is not at 0 in the buffer. Useful in case of JP2, where */ + /* the first bunch of bytes is not in the codestream */ + cstr_info->codestream_size -= cstr_info->main_head_start; + /* <epc_on) { + + /* encode according to JPWL */ + jpwl_encode(j2k, cio, image); + + } +#endif /* USE_JPWL */ + + return true; +} + + + + + + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/j2k.h b/contrib/menuetlibc/openjpeg/libopenjpeg/j2k.h new file mode 100644 index 0000000000..8fc8e6dce2 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/j2k.h @@ -0,0 +1,446 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2006-2007, Parvatha Elangovan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __J2K_H +#define __J2K_H +/** +@file j2k.h +@brief The JPEG-2000 Codestream Reader/Writer (J2K) + +The functions in J2K.C have for goal to read/write the several parts of the codestream: markers and data. +*/ + +/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */ +/*@{*/ + +#define J2K_CP_CSTY_PRT 0x01 +#define J2K_CP_CSTY_SOP 0x02 +#define J2K_CP_CSTY_EPH 0x04 +#define J2K_CCP_CSTY_PRT 0x01 +#define J2K_CCP_CBLKSTY_LAZY 0x01 /**< Selective arithmetic coding bypass */ +#define J2K_CCP_CBLKSTY_RESET 0x02 /**< Reset context probabilities on coding pass boundaries */ +#define J2K_CCP_CBLKSTY_TERMALL 0x04 /**< Termination on each coding pass */ +#define J2K_CCP_CBLKSTY_VSC 0x08 /**< Vertically stripe causal context */ +#define J2K_CCP_CBLKSTY_PTERM 0x10 /**< Predictable termination */ +#define J2K_CCP_CBLKSTY_SEGSYM 0x20 /**< Segmentation symbols are used */ +#define J2K_CCP_QNTSTY_NOQNT 0 +#define J2K_CCP_QNTSTY_SIQNT 1 +#define J2K_CCP_QNTSTY_SEQNT 2 + +/* ----------------------------------------------------------------------- */ + +#define J2K_MS_SOC 0xff4f /**< SOC marker value */ +#define J2K_MS_SOT 0xff90 /**< SOT marker value */ +#define J2K_MS_SOD 0xff93 /**< SOD marker value */ +#define J2K_MS_EOC 0xffd9 /**< EOC marker value */ +#define J2K_MS_SIZ 0xff51 /**< SIZ marker value */ +#define J2K_MS_COD 0xff52 /**< COD marker value */ +#define J2K_MS_COC 0xff53 /**< COC marker value */ +#define J2K_MS_RGN 0xff5e /**< RGN marker value */ +#define J2K_MS_QCD 0xff5c /**< QCD marker value */ +#define J2K_MS_QCC 0xff5d /**< QCC marker value */ +#define J2K_MS_POC 0xff5f /**< POC marker value */ +#define J2K_MS_TLM 0xff55 /**< TLM marker value */ +#define J2K_MS_PLM 0xff57 /**< PLM marker value */ +#define J2K_MS_PLT 0xff58 /**< PLT marker value */ +#define J2K_MS_PPM 0xff60 /**< PPM marker value */ +#define J2K_MS_PPT 0xff61 /**< PPT marker value */ +#define J2K_MS_SOP 0xff91 /**< SOP marker value */ +#define J2K_MS_EPH 0xff92 /**< EPH marker value */ +#define J2K_MS_CRG 0xff63 /**< CRG marker value */ +#define J2K_MS_COM 0xff64 /**< COM marker value */ +/* UniPG>> */ +#ifdef USE_JPWL +#define J2K_MS_EPC 0xff68 /**< EPC marker value (Part 11: JPEG 2000 for Wireless) */ +#define J2K_MS_EPB 0xff66 /**< EPB marker value (Part 11: JPEG 2000 for Wireless) */ +#define J2K_MS_ESD 0xff67 /**< ESD marker value (Part 11: JPEG 2000 for Wireless) */ +#define J2K_MS_RED 0xff69 /**< RED marker value (Part 11: JPEG 2000 for Wireless) */ +#endif /* USE_JPWL */ +#ifdef USE_JPSEC +#define J2K_MS_SEC 0xff65 /**< SEC marker value (Part 8: Secure JPEG 2000) */ +#define J2K_MS_INSEC 0xff94 /**< INSEC marker value (Part 8: Secure JPEG 2000) */ +#endif /* USE_JPSEC */ +/* < there was a PPT marker for the present tile */ + int ppt; + /** used in case of multiple marker PPT (number of info already stored) */ + int ppt_store; + /** ppmbug1 */ + int ppt_len; + /** add fixed_quality */ + float distoratio[100]; + /** tile-component coding parameters */ + opj_tccp_t *tccps; +} opj_tcp_t; + +/** +Coding parameters +*/ +typedef struct opj_cp { + /** Digital cinema profile*/ + OPJ_CINEMA_MODE cinema; + /** Maximum rate for each component. If == 0, component size limitation is not considered */ + int max_comp_size; + /** Size of the image in bits*/ + int img_size; + /** Rsiz*/ + OPJ_RSIZ_CAPABILITIES rsiz; + /** Enabling Tile part generation*/ + char tp_on; + /** Flag determining tile part generation*/ + char tp_flag; + /** Position of tile part flag in progression order*/ + int tp_pos; + /** allocation by rate/distortion */ + int disto_alloc; + /** allocation by fixed layer */ + int fixed_alloc; + /** add fixed_quality */ + int fixed_quality; + /** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */ + int reduce; + /** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */ + int layer; + /** if == NO_LIMITATION, decode entire codestream; if == LIMIT_TO_MAIN_HEADER then only decode the main header */ + OPJ_LIMIT_DECODING limit_decoding; + /** XTOsiz */ + int tx0; + /** YTOsiz */ + int ty0; + /** XTsiz */ + int tdx; + /** YTsiz */ + int tdy; + /** comment for coding */ + char *comment; + /** number of tiles in width */ + int tw; + /** number of tiles in heigth */ + int th; + /** ID number of the tiles present in the codestream */ + int *tileno; + /** size of the vector tileno */ + int tileno_size; + /** packet header store there for futur use in t2_decode_packet */ + unsigned char *ppm_data; + /** pointer remaining on the first byte of the first header if ppm is used */ + unsigned char *ppm_data_first; + /** if ppm == 1 --> there was a PPM marker for the present tile */ + int ppm; + /** use in case of multiple marker PPM (number of info already store) */ + int ppm_store; + /** use in case of multiple marker PPM (case on non-finished previous info) */ + int ppm_previous; + /** ppmbug1 */ + int ppm_len; + /** tile coding parameters */ + opj_tcp_t *tcps; + /** fixed layer */ + int *matrice; +/* UniPG>> */ +#ifdef USE_JPWL + /** enables writing of EPC in MH, thus activating JPWL */ + bool epc_on; + /** enables writing of EPB, in case of activated JPWL */ + bool epb_on; + /** enables writing of ESD, in case of activated JPWL */ + bool esd_on; + /** enables writing of informative techniques of ESD, in case of activated JPWL */ + bool info_on; + /** enables writing of RED, in case of activated JPWL */ + bool red_on; + /** error protection method for MH (0,1,16,32,37-128) */ + int hprot_MH; + /** tile number of header protection specification (>=0) */ + int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; + /** error protection methods for TPHs (0,1,16,32,37-128) */ + int hprot_TPH[JPWL_MAX_NO_TILESPECS]; + /** tile number of packet protection specification (>=0) */ + int pprot_tileno[JPWL_MAX_NO_PACKSPECS]; + /** packet number of packet protection specification (>=0) */ + int pprot_packno[JPWL_MAX_NO_PACKSPECS]; + /** error protection methods for packets (0,1,16,32,37-128) */ + int pprot[JPWL_MAX_NO_PACKSPECS]; + /** enables writing of ESD, (0/2/4 bytes) */ + int sens_size; + /** sensitivity addressing size (0=auto/2/4 bytes) */ + int sens_addr; + /** sensitivity range (0-3) */ + int sens_range; + /** sensitivity method for MH (-1,0-7) */ + int sens_MH; + /** tile number of sensitivity specification (>=0) */ + int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS]; + /** sensitivity methods for TPHs (-1,0-7) */ + int sens_TPH[JPWL_MAX_NO_TILESPECS]; + /** enables JPWL correction at the decoder */ + bool correct; + /** expected number of components at the decoder */ + int exp_comps; + /** maximum number of tiles at the decoder */ + int max_tiles; +#endif /* USE_JPWL */ +/* <cp. +@param j2k J2K decompressor handle +@param parameters decompression parameters +*/ +void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters); +/** +Decode an image from a JPEG-2000 codestream +@param j2k J2K decompressor handle +@param cio Input buffer stream +@param cstr_info Codestream information structure if required, NULL otherwise +@return Returns a decoded image if successful, returns NULL otherwise +*/ +opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info); +/** +Decode an image form a JPT-stream (JPEG 2000, JPIP) +@param j2k J2K decompressor handle +@param cio Input buffer stream +@param cstr_info Codestream information structure if required, NULL otherwise +@return Returns a decoded image if successful, returns NULL otherwise +*/ +opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info); +/** +Creates a J2K compression structure +@param cinfo Codec context info +@return Returns a handle to a J2K compressor if successful, returns NULL otherwise +*/ +opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo); +/** +Destroy a J2K compressor handle +@param j2k J2K compressor handle to destroy +*/ +void j2k_destroy_compress(opj_j2k_t *j2k); +/** +Setup the encoder parameters using the current image and using user parameters. +Coding parameters are returned in j2k->cp. +@param j2k J2K compressor handle +@param parameters compression parameters +@param image input filled image +*/ +void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image); +/** +Converts an enum type progression order to string type +*/ +char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order); +/** +Encode an image into a JPEG-2000 codestream +@param j2k J2K compressor handle +@param cio Output buffer stream +@param image Image to encode +@param cstr_info Codestream information structure if required, NULL otherwise +@return Returns true if successful, returns false otherwise +*/ +bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __J2K_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/j2k_lib.c b/contrib/menuetlibc/openjpeg/libopenjpeg/j2k_lib.c new file mode 100644 index 0000000000..d815f166dd --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/j2k_lib.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef _WIN32 +#include +#else +#include +#include +#include +#endif /* _WIN32 */ +#include "opj_includes.h" + +double opj_clock(void) { +#ifdef _WIN32 + /* _WIN32: use QueryPerformance (very accurate) */ + LARGE_INTEGER freq , t ; + /* freq is the clock speed of the CPU */ + QueryPerformanceFrequency(&freq) ; + /* cout << "freq = " << ((double) freq.QuadPart) << endl; */ + /* t is the high resolution performance counter (see MSDN) */ + QueryPerformanceCounter ( & t ) ; + return ( t.QuadPart /(double) freq.QuadPart ) ; +#else + /* Unix or Linux: use resource usage */ + struct rusage t; + double procTime; + /* (1) Get the rusage data structure at this moment (man getrusage) */ + getrusage(0,&t); + /* (2) What is the elapsed time ? - CPU time = User time + System time */ + /* (2a) Get the seconds */ + procTime = t.ru_utime.tv_sec + t.ru_stime.tv_sec; + /* (2b) More precisely! Get the microseconds part ! */ + return ( procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ; +#endif +} + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/j2k_lib.h b/contrib/menuetlibc/openjpeg/libopenjpeg/j2k_lib.h new file mode 100644 index 0000000000..7df4d36775 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/j2k_lib.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __J2K_LIB_H +#define __J2K_LIB_H +/** +@file j2k_lib.h +@brief Internal functions + +The functions in J2K_LIB.C are internal utilities mainly used for timing. +*/ + +/** @defgroup MISC MISC - Miscellaneous internal functions */ +/*@{*/ + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ + +/** +Difference in successive opj_clock() calls tells you the elapsed time +@return Returns time in seconds +*/ +double opj_clock(void); + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __J2K_LIB_H */ + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/jp2.c b/contrib/menuetlibc/openjpeg/libopenjpeg/jp2.c new file mode 100644 index 0000000000..20cf2e678a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/jp2.c @@ -0,0 +1,1089 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#include "opj_includes.h" + +/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +/** +Read box headers +@param cinfo Codec context info +@param cio Input stream +@param box +@return Returns true if successful, returns false otherwise +*/ +static bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio, opj_jp2_box_t *box); +/*static void jp2_write_url(opj_cio_t *cio, char *Idx_file);*/ +/** +Read the IHDR box - Image Header box +@param jp2 JP2 handle +@param cio Input buffer stream +@return Returns true if successful, returns false otherwise +*/ +static bool jp2_read_ihdr(opj_jp2_t *jp2, opj_cio_t *cio); +static void jp2_write_ihdr(opj_jp2_t *jp2, opj_cio_t *cio); +static void jp2_write_bpcc(opj_jp2_t *jp2, opj_cio_t *cio); +static bool jp2_read_bpcc(opj_jp2_t *jp2, opj_cio_t *cio); +static void jp2_write_colr(opj_jp2_t *jp2, opj_cio_t *cio); +/** +Write the FTYP box - File type box +@param jp2 JP2 handle +@param cio Output buffer stream +*/ +static void jp2_write_ftyp(opj_jp2_t *jp2, opj_cio_t *cio); +/** +Read the FTYP box - File type box +@param jp2 JP2 handle +@param cio Input buffer stream +@return Returns true if successful, returns false otherwise +*/ +static bool jp2_read_ftyp(opj_jp2_t *jp2, opj_cio_t *cio); +static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); +static bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset); +static void jp2_write_jp(opj_cio_t *cio); +/** +Read the JP box - JPEG 2000 signature +@param jp2 JP2 handle +@param cio Input buffer stream +@return Returns true if successful, returns false otherwise +*/ +static bool jp2_read_jp(opj_jp2_t *jp2, opj_cio_t *cio); +/** +Decode the structure of a JP2 file +@param jp2 JP2 handle +@param cio Input buffer stream +@param color Collector for profile, cdef and pclr data +@return Returns true if successful, returns false otherwise +*/ +static bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio, + opj_jp2_color_t *color); +/** +Apply collected palette data +@param color Collector for profile, cdef and pclr data +@param image +*/ +static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image); +/** +Collect palette data +@param jp2 JP2 handle +@param cio Input buffer stream +@param box +@param color Collector for profile, cdef and pclr data +@return Returns true if successful, returns false otherwise +*/ +static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio, + opj_jp2_box_t *box, opj_jp2_color_t *color); +/** +Collect component mapping data +@param jp2 JP2 handle +@param cio Input buffer stream +@param box +@param color Collector for profile, cdef and pclr data +@return Returns true if successful, returns false otherwise +*/ +static bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio, + opj_jp2_box_t *box, opj_jp2_color_t *color); +/** +Collect colour specification data +@param jp2 JP2 handle +@param cio Input buffer stream +@param box +@param color Collector for profile, cdef and pclr data +@return Returns true if successful, returns false otherwise +*/ +static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio, + opj_jp2_box_t *box, opj_jp2_color_t *color); +/*@}*/ + +/*@}*/ + +/* ----------------------------------------------------------------------- */ + +static bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio, opj_jp2_box_t *box) { + box->init_pos = cio_tell(cio); + box->length = cio_read(cio, 4); + box->type = cio_read(cio, 4); + if (box->length == 1) { + if (cio_read(cio, 4) != 0) { + opj_event_msg(cinfo, EVT_ERROR, "Cannot handle box sizes higher than 2^32\n"); + return false; + } + box->length = cio_read(cio, 4); + if (box->length == 0) + box->length = cio_numbytesleft(cio) + 12; + } + else if (box->length == 0) { + box->length = cio_numbytesleft(cio) + 8; + } + + return true; +} + +#if 0 +static void jp2_write_url(opj_cio_t *cio, char *Idx_file) { + unsigned int i; + opj_jp2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio, 4); + cio_write(cio, JP2_URL, 4); /* DBTL */ + cio_write(cio, 0, 1); /* VERS */ + cio_write(cio, 0, 3); /* FLAG */ + + if(Idx_file) { + for (i = 0; i < strlen(Idx_file); i++) { + cio_write(cio, Idx_file[i], 1); + } + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} +#endif + +static bool jp2_read_ihdr(opj_jp2_t *jp2, opj_cio_t *cio) { + opj_jp2_box_t box; + + opj_common_ptr cinfo = jp2->cinfo; + + jp2_read_boxhdr(cinfo, cio, &box); + if (JP2_IHDR != box.type) { + opj_event_msg(cinfo, EVT_ERROR, "Expected IHDR Marker\n"); + return false; + } + + jp2->h = cio_read(cio, 4); /* HEIGHT */ + jp2->w = cio_read(cio, 4); /* WIDTH */ + jp2->numcomps = cio_read(cio, 2); /* NC */ + jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(opj_jp2_comps_t)); + + jp2->bpc = cio_read(cio, 1); /* BPC */ + + jp2->C = cio_read(cio, 1); /* C */ + jp2->UnkC = cio_read(cio, 1); /* UnkC */ + jp2->IPR = cio_read(cio, 1); /* IPR */ + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cinfo, EVT_ERROR, "Error with IHDR Box\n"); + return false; + } + + return true; +} + +static void jp2_write_ihdr(opj_jp2_t *jp2, opj_cio_t *cio) { + opj_jp2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio, 4); + cio_write(cio, JP2_IHDR, 4); /* IHDR */ + + cio_write(cio, jp2->h, 4); /* HEIGHT */ + cio_write(cio, jp2->w, 4); /* WIDTH */ + cio_write(cio, jp2->numcomps, 2); /* NC */ + + cio_write(cio, jp2->bpc, 1); /* BPC */ + + cio_write(cio, jp2->C, 1); /* C : Always 7 */ + cio_write(cio, jp2->UnkC, 1); /* UnkC, colorspace unknown */ + cio_write(cio, jp2->IPR, 1); /* IPR, no intellectual property */ + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +static void jp2_write_bpcc(opj_jp2_t *jp2, opj_cio_t *cio) { + unsigned int i; + opj_jp2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio, 4); + cio_write(cio, JP2_BPCC, 4); /* BPCC */ + + for (i = 0; i < jp2->numcomps; i++) { + cio_write(cio, jp2->comps[i].bpcc, 1); + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + + +static bool jp2_read_bpcc(opj_jp2_t *jp2, opj_cio_t *cio) { + unsigned int i; + opj_jp2_box_t box; + + opj_common_ptr cinfo = jp2->cinfo; + + jp2_read_boxhdr(cinfo, cio, &box); + if (JP2_BPCC != box.type) { + opj_event_msg(cinfo, EVT_ERROR, "Expected BPCC Marker\n"); + return false; + } + + for (i = 0; i < jp2->numcomps; i++) { + jp2->comps[i].bpcc = cio_read(cio, 1); + } + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cinfo, EVT_ERROR, "Error with BPCC Box\n"); + return false; + } + + return true; +} + +static void jp2_write_colr(opj_jp2_t *jp2, opj_cio_t *cio) { + opj_jp2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio, 4); + cio_write(cio, JP2_COLR, 4); /* COLR */ + + cio_write(cio, jp2->meth, 1); /* METH */ + cio_write(cio, jp2->precedence, 1); /* PRECEDENCE */ + cio_write(cio, jp2->approx, 1); /* APPROX */ + + if (jp2->meth == 1) { + cio_write(cio, jp2->enumcs, 4); /* EnumCS */ + } else { + cio_write(cio, 0, 1); /* PROFILE (??) */ + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +static void jp2_free_pclr(opj_jp2_color_t *color) +{ + opj_free(color->jp2_pclr->channel_sign); + opj_free(color->jp2_pclr->channel_size); + opj_free(color->jp2_pclr->entries); + + if(color->jp2_pclr->cmap) opj_free(color->jp2_pclr->cmap); + + opj_free(color->jp2_pclr); color->jp2_pclr = NULL; +} + +static void free_color_data(opj_jp2_color_t *color) +{ + if(color->jp2_pclr) + { + jp2_free_pclr(color); + } + if(color->jp2_cdef) + { + if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info); + opj_free(color->jp2_cdef); + } + if(color->icc_profile_buf) opj_free(color->icc_profile_buf); +} + +static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image) +{ + opj_image_comp_t *old_comps, *new_comps; + unsigned char *channel_size, *channel_sign; + unsigned int *entries; + opj_jp2_cmap_comp_t *cmap; + int *src, *dst; + unsigned int j, max; + unsigned short i, nr_channels, cmp, pcol; + int k, top_k; + + channel_size = color->jp2_pclr->channel_size; + channel_sign = color->jp2_pclr->channel_sign; + entries = color->jp2_pclr->entries; + cmap = color->jp2_pclr->cmap; + nr_channels = color->jp2_pclr->nr_channels; + + old_comps = image->comps; + new_comps = (opj_image_comp_t*) + opj_malloc(nr_channels * sizeof(opj_image_comp_t)); + + for(i = 0; i < nr_channels; ++i) + { + pcol = cmap[i].pcol; cmp = cmap[i].cmp; + + new_comps[pcol] = old_comps[cmp]; + + if(cmap[i].mtyp == 0) /* Direct use */ + { + old_comps[cmp].data = NULL; continue; + } +/* Palette mapping: */ + new_comps[pcol].data = (int*) + opj_malloc(old_comps[cmp].w * old_comps[cmp].h * sizeof(int)); + new_comps[pcol].prec = channel_size[i]; + new_comps[pcol].sgnd = channel_sign[i]; + } + top_k = color->jp2_pclr->nr_entries - 1; + + for(i = 0; i < nr_channels; ++i) + { +/* Direct use: */ + if(cmap[i].mtyp == 0) continue; + +/* Palette mapping: */ + cmp = cmap[i].cmp; pcol = cmap[i].pcol; + src = old_comps[cmp].data; + dst = new_comps[pcol].data; + max = new_comps[pcol].w * new_comps[pcol].h; + + for(j = 0; j < max; ++j) + { +/* The index */ + if((k = src[j]) < 0) k = 0; else if(k > top_k) k = top_k; +/* The colour */ + dst[j] = entries[k * nr_channels + pcol]; + } + } + max = image->numcomps; + for(i = 0; i < max; ++i) + { + if(old_comps[i].data) opj_free(old_comps[i].data); + } + opj_free(old_comps); + image->comps = new_comps; + image->numcomps = nr_channels; + + jp2_free_pclr(color); + +}/* apply_pclr() */ + +static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio, + opj_jp2_box_t *box, opj_jp2_color_t *color) +{ + opj_jp2_pclr_t *jp2_pclr; + unsigned char *channel_size, *channel_sign; + unsigned int *entries; + unsigned short nr_entries, nr_channels; + unsigned short i, j; + unsigned char uc; + +/* Part 1, I.5.3.4: 'There shall be at most one Palette box inside + * a JP2 Header box' : +*/ + if(color->jp2_pclr) return false; + + nr_entries = cio_read(cio, 2); /* NE */ + nr_channels = cio_read(cio, 1);/* NPC */ + + entries = (unsigned int*) + opj_malloc(nr_channels * nr_entries * sizeof(unsigned int)); + channel_size = (unsigned char*)opj_malloc(nr_channels); + channel_sign = (unsigned char*)opj_malloc(nr_channels); + + jp2_pclr = (opj_jp2_pclr_t*)opj_malloc(sizeof(opj_jp2_pclr_t)); + jp2_pclr->channel_sign = channel_sign; + jp2_pclr->channel_size = channel_size; + jp2_pclr->entries = entries; + jp2_pclr->nr_entries = nr_entries; + jp2_pclr->nr_channels = nr_channels; + jp2_pclr->cmap = NULL; + + color->jp2_pclr = jp2_pclr; + + for(i = 0; i < nr_channels; ++i) + { + uc = cio_read(cio, 1); /* Bi */ + channel_size[i] = (uc & 0x7f) + 1; + channel_sign[i] = (uc & 0x80)?1:0; + } + + for(j = 0; j < nr_entries; ++j) + { + for(i = 0; i < nr_channels; ++i) + { +/* Cji */ + *entries++ = cio_read(cio, channel_size[i]>>3); + } + } + + return true; +}/* jp2_read_pclr() */ + +static bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio, + opj_jp2_box_t *box, opj_jp2_color_t *color) +{ + opj_jp2_cmap_comp_t *cmap; + unsigned short i, nr_channels; + +/* Need nr_channels: */ + if(color->jp2_pclr == NULL) return false; + +/* Part 1, I.5.3.5: 'There shall be at most one Component Mapping box + * inside a JP2 Header box' : +*/ + if(color->jp2_pclr->cmap) return false; + + nr_channels = color->jp2_pclr->nr_channels; + cmap = (opj_jp2_cmap_comp_t*) + opj_malloc(nr_channels * sizeof(opj_jp2_cmap_comp_t)); + + for(i = 0; i < nr_channels; ++i) + { + cmap[i].cmp = cio_read(cio, 2); + cmap[i].mtyp = cio_read(cio, 1); + cmap[i].pcol = cio_read(cio, 1); + + } + color->jp2_pclr->cmap = cmap; + + return true; +}/* jp2_read_cmap() */ + +static void jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color) +{ + opj_jp2_cdef_info_t *info; + int color_space; + unsigned short i, n, cn, typ, asoc, acn; + + color_space = image->color_space; + info = color->jp2_cdef->info; + n = color->jp2_cdef->n; + + for(i = 0; i < n; ++i) + { +/* WATCH: acn = asoc - 1 ! */ + if((asoc = info[i].asoc) == 0) continue; + + cn = info[i].cn; typ = info[i].typ; acn = asoc - 1; + + if(cn != acn) + { + opj_image_comp_t saved; + + memcpy(&saved, &image->comps[cn], sizeof(opj_image_comp_t)); + memcpy(&image->comps[cn], &image->comps[acn], sizeof(opj_image_comp_t)); + memcpy(&image->comps[acn], &saved, sizeof(opj_image_comp_t)); + + info[i].asoc = cn + 1; + info[acn].asoc = info[acn].cn + 1; + } + } + if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info); + + opj_free(color->jp2_cdef); color->jp2_cdef = NULL; + +}/* jp2_apply_cdef() */ + +static bool jp2_read_cdef(opj_jp2_t *jp2, opj_cio_t *cio, + opj_jp2_box_t *box, opj_jp2_color_t *color) +{ + opj_jp2_cdef_info_t *info; + unsigned short i, n; + +/* Part 1, I.5.3.6: 'The shall be at most one Channel Definition box + * inside a JP2 Header box.' +*/ + if(color->jp2_cdef) return false; + + if((n = cio_read(cio, 2)) == 0) return false; /* szukw000: FIXME */ + + info = (opj_jp2_cdef_info_t*) + opj_malloc(n * sizeof(opj_jp2_cdef_info_t)); + + color->jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t)); + color->jp2_cdef->info = info; + color->jp2_cdef->n = n; + + for(i = 0; i < n; ++i) + { + info[i].cn = cio_read(cio, 2); + info[i].typ = cio_read(cio, 2); + info[i].asoc = cio_read(cio, 2); + + } + return true; +}/* jp2_read_cdef() */ + +static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio, + opj_jp2_box_t *box, opj_jp2_color_t *color) +{ + int skip_len; + opj_common_ptr cinfo; + +/* Part 1, I.5.3.3 : 'A conforming JP2 reader shall ignore all Colour + * Specification boxes after the first.' +*/ + if(color->jp2_has_colr) return false; + + cinfo = jp2->cinfo; + + jp2->meth = cio_read(cio, 1); /* METH */ + jp2->precedence = cio_read(cio, 1); /* PRECEDENCE */ + jp2->approx = cio_read(cio, 1); /* APPROX */ + + if (jp2->meth == 1) + { + jp2->enumcs = cio_read(cio, 4); /* EnumCS */ + } + else + { +/* skip PROFILE */ + skip_len = box->init_pos + box->length - cio_tell(cio); + if (skip_len < 0) + { + opj_event_msg(cinfo, EVT_ERROR, "Error with COLR box size\n"); + return false; + } + if(skip_len > 0) + { + unsigned char *start; + + start = cio_getbp(cio); + color->icc_profile_buf = (unsigned char*)opj_malloc(skip_len); + color->icc_profile_len = skip_len; + + cio_skip(cio, box->init_pos + box->length - cio_tell(cio)); + + memcpy(color->icc_profile_buf, start, skip_len); + } + } + + if (cio_tell(cio) - box->init_pos != box->length) + { + opj_event_msg(cinfo, EVT_ERROR, "Error with COLR Box\n"); + return false; + } + color->jp2_has_colr = 1; + + return true; +}/* jp2_read_colr() */ + +bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color) +{ + opj_jp2_box_t box; + unsigned int jp2h_end; + + opj_common_ptr cinfo = jp2->cinfo; + + jp2_read_boxhdr(cinfo, cio, &box); + do + { + if (JP2_JP2H != box.type) + { + if (box.type == JP2_JP2C) + { + opj_event_msg(cinfo, EVT_ERROR, "Expected JP2H Marker\n"); + return false; + } + cio_skip(cio, box.length - 8); + + if(cio->bp >= cio->end) return false; + + jp2_read_boxhdr(cinfo, cio, &box); + } + } while(JP2_JP2H != box.type); + + if (!jp2_read_ihdr(jp2, cio)) + return false; + jp2h_end = box.init_pos + box.length; + + if (jp2->bpc == 255) + { + if (!jp2_read_bpcc(jp2, cio)) + return false; + } + jp2_read_boxhdr(cinfo, cio, &box); + + while(cio_tell(cio) < jp2h_end) + { + if(box.type == JP2_COLR) + { + if( !jp2_read_colr(jp2, cio, &box, color)) + { + cio_seek(cio, box.init_pos + 8); + cio_skip(cio, box.length - 8); + } + jp2_read_boxhdr(cinfo, cio, &box); + continue; + } + if(box.type == JP2_CDEF) + { + if( !jp2_read_cdef(jp2, cio, &box, color)) + { + cio_seek(cio, box.init_pos + 8); + cio_skip(cio, box.length - 8); + } + jp2_read_boxhdr(cinfo, cio, &box); + continue; + } + if(box.type == JP2_PCLR) + { + if( !jp2_read_pclr(jp2, cio, &box, color)) + { + cio_seek(cio, box.init_pos + 8); + cio_skip(cio, box.length - 8); + } + jp2_read_boxhdr(cinfo, cio, &box); + continue; + } + if(box.type == JP2_CMAP) + { + if( !jp2_read_cmap(jp2, cio, &box, color)) + { + cio_seek(cio, box.init_pos + 8); + cio_skip(cio, box.length - 8); + } + jp2_read_boxhdr(cinfo, cio, &box); + continue; + } + cio_seek(cio, box.init_pos + 8); + cio_skip(cio, box.length - 8); + jp2_read_boxhdr(cinfo, cio, &box); + + }/* while(cio_tell(cio) < box_end) */ + + cio_seek(cio, jp2h_end); + +/* Part 1, I.5.3.3 : 'must contain at least one' */ + return (color->jp2_has_colr == 1); + +}/* jp2_read_jp2h() */ + +opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, + opj_codestream_info_t *cstr_info) +{ + opj_common_ptr cinfo; + opj_image_t *image = NULL; + opj_jp2_color_t color; + + if(!jp2 || !cio) + { + return NULL; + } + memset(&color, 0, sizeof(opj_jp2_color_t)); + cinfo = jp2->cinfo; + +/* JP2 decoding */ + if(!jp2_read_struct(jp2, cio, &color)) + { + free_color_data(&color); + opj_event_msg(cinfo, EVT_ERROR, "Failed to decode jp2 structure\n"); + return NULL; + } + +/* J2K decoding */ + image = j2k_decode(jp2->j2k, cio, cstr_info); + + if(!image) + { + free_color_data(&color); + opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n"); + return NULL; + } + +/* Set Image Color Space */ + if (jp2->enumcs == 16) + image->color_space = CLRSPC_SRGB; + else if (jp2->enumcs == 17) + image->color_space = CLRSPC_GRAY; + else if (jp2->enumcs == 18) + image->color_space = CLRSPC_SYCC; + else + image->color_space = CLRSPC_UNKNOWN; + + if(color.jp2_cdef) + { + jp2_apply_cdef(image, &color); + } + if(color.jp2_pclr) + { +/* Part 1, I.5.3.4: Either both or none : */ + if( !color.jp2_pclr->cmap) + jp2_free_pclr(&color); + else + jp2_apply_pclr(&color, image); + } + if(color.icc_profile_buf) + { + image->icc_profile_buf = color.icc_profile_buf; + color.icc_profile_buf = NULL; + image->icc_profile_len = color.icc_profile_len; + } + return image; + +}/* jp2_decode() */ + + +void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio) { + opj_jp2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio, 4); + cio_write(cio, JP2_JP2H, 4); /* JP2H */ + + jp2_write_ihdr(jp2, cio); + + if (jp2->bpc == 255) { + jp2_write_bpcc(jp2, cio); + } + jp2_write_colr(jp2, cio); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +static void jp2_write_ftyp(opj_jp2_t *jp2, opj_cio_t *cio) { + unsigned int i; + opj_jp2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio, 4); + cio_write(cio, JP2_FTYP, 4); /* FTYP */ + + cio_write(cio, jp2->brand, 4); /* BR */ + cio_write(cio, jp2->minversion, 4); /* MinV */ + + for (i = 0; i < jp2->numcl; i++) { + cio_write(cio, jp2->cl[i], 4); /* CL */ + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +static bool jp2_read_ftyp(opj_jp2_t *jp2, opj_cio_t *cio) { + int i; + opj_jp2_box_t box; + + opj_common_ptr cinfo = jp2->cinfo; + + jp2_read_boxhdr(cinfo, cio, &box); + + if (JP2_FTYP != box.type) { + opj_event_msg(cinfo, EVT_ERROR, "Expected FTYP Marker\n"); + return false; + } + + jp2->brand = cio_read(cio, 4); /* BR */ + jp2->minversion = cio_read(cio, 4); /* MinV */ + jp2->numcl = (box.length - 16) / 4; + jp2->cl = (unsigned int *) opj_malloc(jp2->numcl * sizeof(unsigned int)); + + for (i = 0; i < (int)jp2->numcl; i++) { + jp2->cl[i] = cio_read(cio, 4); /* CLi */ + } + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cinfo, EVT_ERROR, "Error with FTYP Box\n"); + return false; + } + + return true; +} + +static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) { + unsigned int j2k_codestream_offset, j2k_codestream_length; + opj_jp2_box_t box; + + opj_j2k_t *j2k = jp2->j2k; + + box.init_pos = cio_tell(cio); + cio_skip(cio, 4); + cio_write(cio, JP2_JP2C, 4); /* JP2C */ + + /* J2K encoding */ + j2k_codestream_offset = cio_tell(cio); + if(!j2k_encode(j2k, cio, image, cstr_info)) { + opj_event_msg(j2k->cinfo, EVT_ERROR, "Failed to encode image\n"); + return 0; + } + j2k_codestream_length = cio_tell(cio) - j2k_codestream_offset; + + jp2->j2k_codestream_offset = j2k_codestream_offset; + jp2->j2k_codestream_length = j2k_codestream_length; + + box.length = 8 + jp2->j2k_codestream_length; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); + + return box.length; +} + +static bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset) { + opj_jp2_box_t box; + + opj_common_ptr cinfo = jp2->cinfo; + + jp2_read_boxhdr(cinfo, cio, &box); + do { + if(JP2_JP2C != box.type) { + cio_skip(cio, box.length - 8); + jp2_read_boxhdr(cinfo, cio, &box); + } + } while(JP2_JP2C != box.type); + + *j2k_codestream_offset = cio_tell(cio); + *j2k_codestream_length = box.length - 8; + + return true; +} + +static void jp2_write_jp(opj_cio_t *cio) { + opj_jp2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio, 4); + cio_write(cio, JP2_JP, 4); /* JP2 signature */ + cio_write(cio, 0x0d0a870a, 4); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +static bool jp2_read_jp(opj_jp2_t *jp2, opj_cio_t *cio) { + opj_jp2_box_t box; + + opj_common_ptr cinfo = jp2->cinfo; + + jp2_read_boxhdr(cinfo, cio, &box); + if (JP2_JP != box.type) { + opj_event_msg(cinfo, EVT_ERROR, "Expected JP Marker\n"); + return false; + } + if (0x0d0a870a != cio_read(cio, 4)) { + opj_event_msg(cinfo, EVT_ERROR, "Error with JP Marker\n"); + return false; + } + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cinfo, EVT_ERROR, "Error with JP Box size\n"); + return false; + } + + return true; +} + + +static bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio, + opj_jp2_color_t *color) { + if (!jp2_read_jp(jp2, cio)) + return false; + if (!jp2_read_ftyp(jp2, cio)) + return false; + if (!jp2_read_jp2h(jp2, cio, color)) + return false; + if (!jp2_read_jp2c(jp2, cio, &jp2->j2k_codestream_length, &jp2->j2k_codestream_offset)) + return false; + + return true; +} + +/* ----------------------------------------------------------------------- */ +/* JP2 decoder interface */ +/* ----------------------------------------------------------------------- */ + +opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo) { + opj_jp2_t *jp2 = (opj_jp2_t*) opj_calloc(1, sizeof(opj_jp2_t)); + if(jp2) { + jp2->cinfo = cinfo; + /* create the J2K codec */ + jp2->j2k = j2k_create_decompress(cinfo); + if(jp2->j2k == NULL) { + jp2_destroy_decompress(jp2); + return NULL; + } + } + return jp2; +} + +void jp2_destroy_decompress(opj_jp2_t *jp2) { + if(jp2) { + /* destroy the J2K codec */ + j2k_destroy_decompress(jp2->j2k); + + if(jp2->comps) { + opj_free(jp2->comps); + } + if(jp2->cl) { + opj_free(jp2->cl); + } + opj_free(jp2); + } +} + +void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters) { + /* setup the J2K codec */ + j2k_setup_decoder(jp2->j2k, parameters); + /* further JP2 initializations go here */ +} + +/* ----------------------------------------------------------------------- */ +/* JP2 encoder interface */ +/* ----------------------------------------------------------------------- */ + +opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo) { + opj_jp2_t *jp2 = (opj_jp2_t*)opj_malloc(sizeof(opj_jp2_t)); + if(jp2) { + jp2->cinfo = cinfo; + /* create the J2K codec */ + jp2->j2k = j2k_create_compress(cinfo); + if(jp2->j2k == NULL) { + jp2_destroy_compress(jp2); + return NULL; + } + } + return jp2; +} + +void jp2_destroy_compress(opj_jp2_t *jp2) { + if(jp2) { + /* destroy the J2K codec */ + j2k_destroy_compress(jp2->j2k); + + if(jp2->comps) { + opj_free(jp2->comps); + } + if(jp2->cl) { + opj_free(jp2->cl); + } + opj_free(jp2); + } +} + +void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters, opj_image_t *image) { + int i; + int depth_0, sign; + + if(!jp2 || !parameters || !image) + return; + + /* setup the J2K codec */ + /* ------------------- */ + + /* Check if number of components respects standard */ + if (image->numcomps < 1 || image->numcomps > 16384) { + opj_event_msg(jp2->cinfo, EVT_ERROR, "Invalid number of components specified while setting up JP2 encoder\n"); + return; + } + + j2k_setup_encoder(jp2->j2k, parameters, image); + + /* setup the JP2 codec */ + /* ------------------- */ + + /* Profile box */ + + jp2->brand = JP2_JP2; /* BR */ + jp2->minversion = 0; /* MinV */ + jp2->numcl = 1; + jp2->cl = (unsigned int*) opj_malloc(jp2->numcl * sizeof(unsigned int)); + jp2->cl[0] = JP2_JP2; /* CL0 : JP2 */ + + /* Image Header box */ + + jp2->numcomps = image->numcomps; /* NC */ + jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(opj_jp2_comps_t)); + jp2->h = image->y1 - image->y0; /* HEIGHT */ + jp2->w = image->x1 - image->x0; /* WIDTH */ + /* BPC */ + depth_0 = image->comps[0].prec - 1; + sign = image->comps[0].sgnd; + jp2->bpc = depth_0 + (sign << 7); + for (i = 1; i < image->numcomps; i++) { + int depth = image->comps[i].prec - 1; + sign = image->comps[i].sgnd; + if (depth_0 != depth) + jp2->bpc = 255; + } + jp2->C = 7; /* C : Always 7 */ + jp2->UnkC = 0; /* UnkC, colorspace specified in colr box */ + jp2->IPR = 0; /* IPR, no intellectual property */ + + /* BitsPerComponent box */ + + for (i = 0; i < image->numcomps; i++) { + jp2->comps[i].bpcc = image->comps[i].prec - 1 + (image->comps[i].sgnd << 7); + } + + /* Colour Specification box */ + + if ((image->numcomps == 1 || image->numcomps == 3) && (jp2->bpc != 255)) { + jp2->meth = 1; /* METH: Enumerated colourspace */ + } else { + jp2->meth = 2; /* METH: Restricted ICC profile */ + } + if (jp2->meth == 1) { + if (image->color_space == 1) + jp2->enumcs = 16; /* sRGB as defined by IEC 61966–2–1 */ + else if (image->color_space == 2) + jp2->enumcs = 17; /* greyscale */ + else if (image->color_space == 3) + jp2->enumcs = 18; /* YUV */ + } else { + jp2->enumcs = 0; /* PROFILE (??) */ + } + jp2->precedence = 0; /* PRECEDENCE */ + jp2->approx = 0; /* APPROX */ + +} + +bool jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) { + + /* JP2 encoding */ + + /* JPEG 2000 Signature box */ + jp2_write_jp(cio); + /* File Type box */ + jp2_write_ftyp(jp2, cio); + /* JP2 Header box */ + jp2_write_jp2h(jp2, cio); + + /* J2K encoding */ + + if(!jp2_write_jp2c(jp2, cio, image, cstr_info)) { + opj_event_msg(jp2->cinfo, EVT_ERROR, "Failed to encode image\n"); + return false; + } + + return true; +} + + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/jp2.h b/contrib/menuetlibc/openjpeg/libopenjpeg/jp2.h new file mode 100644 index 0000000000..9ad662cb97 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/jp2.h @@ -0,0 +1,231 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __JP2_H +#define __JP2_H +/** +@file jp2.h +@brief The JPEG-2000 file format Reader/Writer (JP2) + +*/ + +/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */ +/*@{*/ + +#define JPIP_JPIP 0x6a706970 + +#define JP2_JP 0x6a502020 /**< JPEG 2000 signature box */ +#define JP2_FTYP 0x66747970 /**< File type box */ +#define JP2_JP2H 0x6a703268 /**< JP2 header box */ +#define JP2_IHDR 0x69686472 /**< Image header box */ +#define JP2_COLR 0x636f6c72 /**< Colour specification box */ +#define JP2_JP2C 0x6a703263 /**< Contiguous codestream box */ +#define JP2_URL 0x75726c20 /**< URL box */ +#define JP2_DTBL 0x6474626c /**< Data Reference box */ +#define JP2_BPCC 0x62706363 /**< Bits per component box */ +#define JP2_JP2 0x6a703220 /**< File type fields */ +#define JP2_PCLR 0x70636c72 /**< Palette box */ +#define JP2_CMAP 0x636d6170 /**< Component Mapping box */ +#define JP2_CDEF 0x63646566 /**< Channel Definition box */ + +/* ----------------------------------------------------------------------- */ +/** +Channel description: channel index, type, assocation +*/ +typedef struct opj_jp2_cdef_info +{ + unsigned short cn, typ, asoc; +} opj_jp2_cdef_info_t; + +/** +Channel descriptions and number of descriptions +*/ +typedef struct opj_jp2_cdef +{ + opj_jp2_cdef_info_t *info; + unsigned short n; +} opj_jp2_cdef_t; + +/** +Component mappings: channel index, mapping type, palette index +*/ +typedef struct opj_jp2_cmap_comp +{ + unsigned short cmp; + unsigned char mtyp, pcol; +} opj_jp2_cmap_comp_t; + +/** +Palette data: table entries, palette columns +*/ +typedef struct opj_jp2_pclr +{ + unsigned int *entries; + unsigned char *channel_sign; + unsigned char *channel_size; + opj_jp2_cmap_comp_t *cmap; + unsigned short nr_entries, nr_channels; +} opj_jp2_pclr_t; + +/** +Collector for ICC profile, palette, component mapping, channel description +*/ +typedef struct opj_jp2_color +{ + unsigned char *icc_profile_buf; + int icc_profile_len; + + opj_jp2_cdef_t *jp2_cdef; + opj_jp2_pclr_t *jp2_pclr; + unsigned char jp2_has_colr; +} opj_jp2_color_t; + +/** +JP2 component +*/ +typedef struct opj_jp2_comps { + int depth; + int sgnd; + int bpcc; +} opj_jp2_comps_t; + +/** +JPEG-2000 file format reader/writer +*/ +typedef struct opj_jp2 { + /** codec context */ + opj_common_ptr cinfo; + /** handle to the J2K codec */ + opj_j2k_t *j2k; + unsigned int w; + unsigned int h; + unsigned int numcomps; + unsigned int bpc; + unsigned int C; + unsigned int UnkC; + unsigned int IPR; + unsigned int meth; + unsigned int approx; + unsigned int enumcs; + unsigned int precedence; + unsigned int brand; + unsigned int minversion; + unsigned int numcl; + unsigned int *cl; + opj_jp2_comps_t *comps; + unsigned int j2k_codestream_offset; + unsigned int j2k_codestream_length; +} opj_jp2_t; + +/** +JP2 Box +*/ +typedef struct opj_jp2_box { + int length; + int type; + int init_pos; +} opj_jp2_box_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Write the JP2H box - JP2 Header box (used in MJ2) +@param jp2 JP2 handle +@param cio Output buffer stream +*/ +void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio); +/** +Read the JP2H box - JP2 Header box (used in MJ2) +@param jp2 JP2 handle +@param cio Input buffer stream +@param ext Collector for profile, cdef and pclr data +@return Returns true if successful, returns false otherwise +*/ +bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color); +/** +Creates a JP2 decompression structure +@param cinfo Codec context info +@return Returns a handle to a JP2 decompressor if successful, returns NULL otherwise +*/ +opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo); +/** +Destroy a JP2 decompressor handle +@param jp2 JP2 decompressor handle to destroy +*/ +void jp2_destroy_decompress(opj_jp2_t *jp2); +/** +Setup the decoder decoding parameters using user parameters. +Decoding parameters are returned in jp2->j2k->cp. +@param jp2 JP2 decompressor handle +@param parameters decompression parameters +*/ +void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters); +/** +Decode an image from a JPEG-2000 file stream +@param jp2 JP2 decompressor handle +@param cio Input buffer stream +@param cstr_info Codestream information structure if required, NULL otherwise +@return Returns a decoded image if successful, returns NULL otherwise +*/ +opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, opj_codestream_info_t *cstr_info); +/** +Creates a JP2 compression structure +@param cinfo Codec context info +@return Returns a handle to a JP2 compressor if successful, returns NULL otherwise +*/ +opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo); +/** +Destroy a JP2 compressor handle +@param jp2 JP2 compressor handle to destroy +*/ +void jp2_destroy_compress(opj_jp2_t *jp2); +/** +Setup the encoder parameters using the current image and using user parameters. +Coding parameters are returned in jp2->j2k->cp. +@param jp2 JP2 compressor handle +@param parameters compression parameters +@param image input filled image +*/ +void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters, opj_image_t *image); +/** +Encode an image into a JPEG-2000 file stream +@param jp2 JP2 compressor handle +@param cio Output buffer stream +@param image Image to encode +@param cstr_info Codestream information structure if required, NULL otherwise +@return Returns true if successful, returns false otherwise +*/ +bool jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __JP2_H */ + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/jpt.c b/contrib/menuetlibc/openjpeg/libopenjpeg/jpt.c new file mode 100644 index 0000000000..a2566ea887 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/jpt.c @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/* + * Read the information contains in VBAS [JPP/JPT stream message header] + * Store information (7 bits) in value + * + */ +unsigned int jpt_read_VBAS_info(opj_cio_t *cio, unsigned int value) { + unsigned char elmt; + + elmt = cio_read(cio, 1); + while ((elmt >> 7) == 1) { + value = (value << 7); + value |= (elmt & 0x7f); + elmt = cio_read(cio, 1); + } + value = (value << 7); + value |= (elmt & 0x7f); + + return value; +} + +/* + * Initialize the value of the message header structure + * + */ +void jpt_init_msg_header(opj_jpt_msg_header_t * header) { + header->Id = 0; /* In-class Identifier */ + header->last_byte = 0; /* Last byte information */ + header->Class_Id = 0; /* Class Identifier */ + header->CSn_Id = 0; /* CSn : index identifier */ + header->Msg_offset = 0; /* Message offset */ + header->Msg_length = 0; /* Message length */ + header->Layer_nb = 0; /* Auxiliary for JPP case */ +} + +/* + * Re-initialize the value of the message header structure + * + * Only parameters always present in message header + * + */ +void jpt_reinit_msg_header(opj_jpt_msg_header_t * header) { + header->Id = 0; /* In-class Identifier */ + header->last_byte = 0; /* Last byte information */ + header->Msg_offset = 0; /* Message offset */ + header->Msg_length = 0; /* Message length */ +} + +/* + * Read the message header for a JPP/JPT - stream + * + */ +void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio, opj_jpt_msg_header_t *header) { + unsigned char elmt, Class = 0, CSn = 0; + jpt_reinit_msg_header(header); + + /* ------------- */ + /* VBAS : Bin-ID */ + /* ------------- */ + elmt = cio_read(cio, 1); + + /* See for Class and CSn */ + switch ((elmt >> 5) & 0x03) { + case 0: + opj_event_msg(cinfo, EVT_ERROR, "Forbidden value encounter in message header !!\n"); + break; + case 1: + Class = 0; + CSn = 0; + break; + case 2: + Class = 1; + CSn = 0; + break; + case 3: + Class = 1; + CSn = 1; + break; + default: + break; + } + + /* see information on bits 'c' [p 10 : A.2.1 general, ISO/IEC FCD 15444-9] */ + if (((elmt >> 4) & 0x01) == 1) + header->last_byte = 1; + + /* In-class identifier */ + header->Id |= (elmt & 0x0f); + if ((elmt >> 7) == 1) + header->Id = jpt_read_VBAS_info(cio, header->Id); + + /* ------------ */ + /* VBAS : Class */ + /* ------------ */ + if (Class == 1) { + header->Class_Id = 0; + header->Class_Id = jpt_read_VBAS_info(cio, header->Class_Id); + } + + /* ---------- */ + /* VBAS : CSn */ + /* ---------- */ + if (CSn == 1) { + header->CSn_Id = 0; + header->CSn_Id = jpt_read_VBAS_info(cio, header->CSn_Id); + } + + /* ----------------- */ + /* VBAS : Msg_offset */ + /* ----------------- */ + header->Msg_offset = jpt_read_VBAS_info(cio, header->Msg_offset); + + /* ----------------- */ + /* VBAS : Msg_length */ + /* ----------------- */ + header->Msg_length = jpt_read_VBAS_info(cio, header->Msg_length); + + /* ---------- */ + /* VBAS : Aux */ + /* ---------- */ + if ((header->Class_Id & 0x01) == 1) { + header->Layer_nb = 0; + header->Layer_nb = jpt_read_VBAS_info(cio, header->Layer_nb); + } +} diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/jpt.h b/contrib/menuetlibc/openjpeg/libopenjpeg/jpt.h new file mode 100644 index 0000000000..eb01f98eb8 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/jpt.h @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __JPT_H +#define __JPT_H +/** +@file jpt.h +@brief JPT-stream reader (JPEG 2000, JPIP) + +JPT-stream functions are implemented in J2K.C. +*/ + +/** +Message Header JPT stream structure +*/ +typedef struct opj_jpt_msg_header { + /** In-class Identifier */ + unsigned int Id; + /** Last byte information */ + unsigned int last_byte; + /** Class Identifier */ + unsigned int Class_Id; + /** CSn : index identifier */ + unsigned int CSn_Id; + /** Message offset */ + unsigned int Msg_offset; + /** Message length */ + unsigned int Msg_length; + /** Auxiliary for JPP case */ + unsigned int Layer_nb; +} opj_jpt_msg_header_t; + +/* ----------------------------------------------------------------------- */ + +/** +Initialize the value of the message header structure +@param header Message header structure +*/ +void jpt_init_msg_header(opj_jpt_msg_header_t * header); + +/** +Read the message header for a JPP/JPT - stream +@param cinfo Codec context info +@param cio CIO handle +@param header Message header structure +*/ +void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio, opj_jpt_msg_header_t *header); + +#endif diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/lrintf.c b/contrib/menuetlibc/openjpeg/libopenjpeg/lrintf.c new file mode 100644 index 0000000000..be089dc8db --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/lrintf.c @@ -0,0 +1,5 @@ +#include + +long long int lrintf(float x) { + return floor(x); +} diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/mct.c b/contrib/menuetlibc/openjpeg/libopenjpeg/mct.c new file mode 100644 index 0000000000..870993b06d --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/mct.c @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef __SSE__ +#include +#endif + +#include "opj_includes.h" + +/* */ +/* This table contains the norms of the basis function of the reversible MCT. */ +/* */ +static const double mct_norms[3] = { 1.732, .8292, .8292 }; + +/* */ +/* This table contains the norms of the basis function of the irreversible MCT. */ +/* */ +static const double mct_norms_real[3] = { 1.732, 1.805, 1.573 }; + +/* */ +/* Foward reversible MCT. */ +/* */ +void mct_encode( + int* restrict c0, + int* restrict c1, + int* restrict c2, + int n) +{ + int i; + for(i = 0; i < n; ++i) { + int r = c0[i]; + int g = c1[i]; + int b = c2[i]; + int y = (r + (g * 2) + b) >> 2; + int u = b - g; + int v = r - g; + c0[i] = y; + c1[i] = u; + c2[i] = v; + } +} + +/* */ +/* Inverse reversible MCT. */ +/* */ +void mct_decode( + int* restrict c0, + int* restrict c1, + int* restrict c2, + int n) +{ + int i; + for (i = 0; i < n; ++i) { + int y = c0[i]; + int u = c1[i]; + int v = c2[i]; + int g = y - ((u + v) >> 2); + int r = v + g; + int b = u + g; + c0[i] = r; + c1[i] = g; + c2[i] = b; + } +} + +/* */ +/* Get norm of basis function of reversible MCT. */ +/* */ +double mct_getnorm(int compno) { + return mct_norms[compno]; +} + +/* */ +/* Foward irreversible MCT. */ +/* */ +void mct_encode_real( + int* restrict c0, + int* restrict c1, + int* restrict c2, + int n) +{ + int i; + for(i = 0; i < n; ++i) { + int r = c0[i]; + int g = c1[i]; + int b = c2[i]; + int y = fix_mul(r, 2449) + fix_mul(g, 4809) + fix_mul(b, 934); + int u = -fix_mul(r, 1382) - fix_mul(g, 2714) + fix_mul(b, 4096); + int v = fix_mul(r, 4096) - fix_mul(g, 3430) - fix_mul(b, 666); + c0[i] = y; + c1[i] = u; + c2[i] = v; + } +} + +/* */ +/* Inverse irreversible MCT. */ +/* */ +void mct_decode_real( + float* restrict c0, + float* restrict c1, + float* restrict c2, + int n) +{ + int i; +#ifdef __SSE__ + __m128 vrv, vgu, vgv, vbu; + vrv = _mm_set1_ps(1.402f); + vgu = _mm_set1_ps(0.34413f); + vgv = _mm_set1_ps(0.71414f); + vbu = _mm_set1_ps(1.772f); + for (i = 0; i < (n >> 3); ++i) { + __m128 vy, vu, vv; + __m128 vr, vg, vb; + + vy = _mm_load_ps(c0); + vu = _mm_load_ps(c1); + vv = _mm_load_ps(c2); + vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv)); + vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv)); + vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu)); + _mm_store_ps(c0, vr); + _mm_store_ps(c1, vg); + _mm_store_ps(c2, vb); + c0 += 4; + c1 += 4; + c2 += 4; + + vy = _mm_load_ps(c0); + vu = _mm_load_ps(c1); + vv = _mm_load_ps(c2); + vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv)); + vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv)); + vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu)); + _mm_store_ps(c0, vr); + _mm_store_ps(c1, vg); + _mm_store_ps(c2, vb); + c0 += 4; + c1 += 4; + c2 += 4; + } + n &= 7; +#endif + for(i = 0; i < n; ++i) { + float y = c0[i]; + float u = c1[i]; + float v = c2[i]; + float r = y + (v * 1.402f); + float g = y - (u * 0.34413f) - (v * (0.71414f)); + float b = y + (u * 1.772f); + c0[i] = r; + c1[i] = g; + c2[i] = b; + } +} + +/* */ +/* Get norm of basis function of irreversible MCT. */ +/* */ +double mct_getnorm_real(int compno) { + return mct_norms_real[compno]; +} diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/mct.h b/contrib/menuetlibc/openjpeg/libopenjpeg/mct.h new file mode 100644 index 0000000000..84e3f8add1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/mct.h @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __MCT_H +#define __MCT_H +/** +@file mct.h +@brief Implementation of a multi-component transforms (MCT) + +The functions in MCT.C have for goal to realize reversible and irreversible multicomponent +transform. The functions in MCT.C are used by some function in TCD.C. +*/ + +/** @defgroup MCT MCT - Implementation of a multi-component transform */ +/*@{*/ + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Apply a reversible multi-component transform to an image +@param c0 Samples for red component +@param c1 Samples for green component +@param c2 Samples blue component +@param n Number of samples for each component +*/ +void mct_encode(int *c0, int *c1, int *c2, int n); +/** +Apply a reversible multi-component inverse transform to an image +@param c0 Samples for luminance component +@param c1 Samples for red chrominance component +@param c2 Samples for blue chrominance component +@param n Number of samples for each component +*/ +void mct_decode(int *c0, int *c1, int *c2, int n); +/** +Get norm of the basis function used for the reversible multi-component transform +@param compno Number of the component (0->Y, 1->U, 2->V) +@return +*/ +double mct_getnorm(int compno); + +/** +Apply an irreversible multi-component transform to an image +@param c0 Samples for red component +@param c1 Samples for green component +@param c2 Samples blue component +@param n Number of samples for each component +*/ +void mct_encode_real(int *c0, int *c1, int *c2, int n); +/** +Apply an irreversible multi-component inverse transform to an image +@param c0 Samples for luminance component +@param c1 Samples for red chrominance component +@param c2 Samples for blue chrominance component +@param n Number of samples for each component +*/ +void mct_decode_real(float* c0, float* c1, float* c2, int n); +/** +Get norm of the basis function used for the irreversible multi-component transform +@param compno Number of the component (0->Y, 1->U, 2->V) +@return +*/ +double mct_getnorm_real(int compno); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __MCT_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/mqc.c b/contrib/menuetlibc/openjpeg/libopenjpeg/mqc.c new file mode 100644 index 0000000000..5d25238ee6 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/mqc.c @@ -0,0 +1,593 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup MQC MQC - Implementation of an MQ-Coder */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +/** +Output a byte, doing bit-stuffing if necessary. +After a 0xff byte, the next byte must be smaller than 0x90. +@param mqc MQC handle +*/ +static void mqc_byteout(opj_mqc_t *mqc); +/** +Renormalize mqc->a and mqc->c while encoding, so that mqc->a stays between 0x8000 and 0x10000 +@param mqc MQC handle +*/ +static void mqc_renorme(opj_mqc_t *mqc); +/** +Encode the most probable symbol +@param mqc MQC handle +*/ +static void mqc_codemps(opj_mqc_t *mqc); +/** +Encode the most least symbol +@param mqc MQC handle +*/ +static void mqc_codelps(opj_mqc_t *mqc); +/** +Fill mqc->c with 1's for flushing +@param mqc MQC handle +*/ +static void mqc_setbits(opj_mqc_t *mqc); +/** +FIXME: documentation ??? +@param mqc MQC handle +@return +*/ +static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc); +/** +FIXME: documentation ??? +@param mqc MQC handle +@return +*/ +static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc); +/** +Input a byte +@param mqc MQC handle +*/ +static INLINE void mqc_bytein(opj_mqc_t *const mqc); +/** +Renormalize mqc->a and mqc->c while decoding +@param mqc MQC handle +*/ +static INLINE void mqc_renormd(opj_mqc_t *const mqc); +/*@}*/ + +/*@}*/ + +/* */ +/* This array defines all the possible states for a context. */ +/* */ +static opj_mqc_state_t mqc_states[47 * 2] = { + {0x5601, 0, &mqc_states[2], &mqc_states[3]}, + {0x5601, 1, &mqc_states[3], &mqc_states[2]}, + {0x3401, 0, &mqc_states[4], &mqc_states[12]}, + {0x3401, 1, &mqc_states[5], &mqc_states[13]}, + {0x1801, 0, &mqc_states[6], &mqc_states[18]}, + {0x1801, 1, &mqc_states[7], &mqc_states[19]}, + {0x0ac1, 0, &mqc_states[8], &mqc_states[24]}, + {0x0ac1, 1, &mqc_states[9], &mqc_states[25]}, + {0x0521, 0, &mqc_states[10], &mqc_states[58]}, + {0x0521, 1, &mqc_states[11], &mqc_states[59]}, + {0x0221, 0, &mqc_states[76], &mqc_states[66]}, + {0x0221, 1, &mqc_states[77], &mqc_states[67]}, + {0x5601, 0, &mqc_states[14], &mqc_states[13]}, + {0x5601, 1, &mqc_states[15], &mqc_states[12]}, + {0x5401, 0, &mqc_states[16], &mqc_states[28]}, + {0x5401, 1, &mqc_states[17], &mqc_states[29]}, + {0x4801, 0, &mqc_states[18], &mqc_states[28]}, + {0x4801, 1, &mqc_states[19], &mqc_states[29]}, + {0x3801, 0, &mqc_states[20], &mqc_states[28]}, + {0x3801, 1, &mqc_states[21], &mqc_states[29]}, + {0x3001, 0, &mqc_states[22], &mqc_states[34]}, + {0x3001, 1, &mqc_states[23], &mqc_states[35]}, + {0x2401, 0, &mqc_states[24], &mqc_states[36]}, + {0x2401, 1, &mqc_states[25], &mqc_states[37]}, + {0x1c01, 0, &mqc_states[26], &mqc_states[40]}, + {0x1c01, 1, &mqc_states[27], &mqc_states[41]}, + {0x1601, 0, &mqc_states[58], &mqc_states[42]}, + {0x1601, 1, &mqc_states[59], &mqc_states[43]}, + {0x5601, 0, &mqc_states[30], &mqc_states[29]}, + {0x5601, 1, &mqc_states[31], &mqc_states[28]}, + {0x5401, 0, &mqc_states[32], &mqc_states[28]}, + {0x5401, 1, &mqc_states[33], &mqc_states[29]}, + {0x5101, 0, &mqc_states[34], &mqc_states[30]}, + {0x5101, 1, &mqc_states[35], &mqc_states[31]}, + {0x4801, 0, &mqc_states[36], &mqc_states[32]}, + {0x4801, 1, &mqc_states[37], &mqc_states[33]}, + {0x3801, 0, &mqc_states[38], &mqc_states[34]}, + {0x3801, 1, &mqc_states[39], &mqc_states[35]}, + {0x3401, 0, &mqc_states[40], &mqc_states[36]}, + {0x3401, 1, &mqc_states[41], &mqc_states[37]}, + {0x3001, 0, &mqc_states[42], &mqc_states[38]}, + {0x3001, 1, &mqc_states[43], &mqc_states[39]}, + {0x2801, 0, &mqc_states[44], &mqc_states[38]}, + {0x2801, 1, &mqc_states[45], &mqc_states[39]}, + {0x2401, 0, &mqc_states[46], &mqc_states[40]}, + {0x2401, 1, &mqc_states[47], &mqc_states[41]}, + {0x2201, 0, &mqc_states[48], &mqc_states[42]}, + {0x2201, 1, &mqc_states[49], &mqc_states[43]}, + {0x1c01, 0, &mqc_states[50], &mqc_states[44]}, + {0x1c01, 1, &mqc_states[51], &mqc_states[45]}, + {0x1801, 0, &mqc_states[52], &mqc_states[46]}, + {0x1801, 1, &mqc_states[53], &mqc_states[47]}, + {0x1601, 0, &mqc_states[54], &mqc_states[48]}, + {0x1601, 1, &mqc_states[55], &mqc_states[49]}, + {0x1401, 0, &mqc_states[56], &mqc_states[50]}, + {0x1401, 1, &mqc_states[57], &mqc_states[51]}, + {0x1201, 0, &mqc_states[58], &mqc_states[52]}, + {0x1201, 1, &mqc_states[59], &mqc_states[53]}, + {0x1101, 0, &mqc_states[60], &mqc_states[54]}, + {0x1101, 1, &mqc_states[61], &mqc_states[55]}, + {0x0ac1, 0, &mqc_states[62], &mqc_states[56]}, + {0x0ac1, 1, &mqc_states[63], &mqc_states[57]}, + {0x09c1, 0, &mqc_states[64], &mqc_states[58]}, + {0x09c1, 1, &mqc_states[65], &mqc_states[59]}, + {0x08a1, 0, &mqc_states[66], &mqc_states[60]}, + {0x08a1, 1, &mqc_states[67], &mqc_states[61]}, + {0x0521, 0, &mqc_states[68], &mqc_states[62]}, + {0x0521, 1, &mqc_states[69], &mqc_states[63]}, + {0x0441, 0, &mqc_states[70], &mqc_states[64]}, + {0x0441, 1, &mqc_states[71], &mqc_states[65]}, + {0x02a1, 0, &mqc_states[72], &mqc_states[66]}, + {0x02a1, 1, &mqc_states[73], &mqc_states[67]}, + {0x0221, 0, &mqc_states[74], &mqc_states[68]}, + {0x0221, 1, &mqc_states[75], &mqc_states[69]}, + {0x0141, 0, &mqc_states[76], &mqc_states[70]}, + {0x0141, 1, &mqc_states[77], &mqc_states[71]}, + {0x0111, 0, &mqc_states[78], &mqc_states[72]}, + {0x0111, 1, &mqc_states[79], &mqc_states[73]}, + {0x0085, 0, &mqc_states[80], &mqc_states[74]}, + {0x0085, 1, &mqc_states[81], &mqc_states[75]}, + {0x0049, 0, &mqc_states[82], &mqc_states[76]}, + {0x0049, 1, &mqc_states[83], &mqc_states[77]}, + {0x0025, 0, &mqc_states[84], &mqc_states[78]}, + {0x0025, 1, &mqc_states[85], &mqc_states[79]}, + {0x0015, 0, &mqc_states[86], &mqc_states[80]}, + {0x0015, 1, &mqc_states[87], &mqc_states[81]}, + {0x0009, 0, &mqc_states[88], &mqc_states[82]}, + {0x0009, 1, &mqc_states[89], &mqc_states[83]}, + {0x0005, 0, &mqc_states[90], &mqc_states[84]}, + {0x0005, 1, &mqc_states[91], &mqc_states[85]}, + {0x0001, 0, &mqc_states[90], &mqc_states[86]}, + {0x0001, 1, &mqc_states[91], &mqc_states[87]}, + {0x5601, 0, &mqc_states[92], &mqc_states[92]}, + {0x5601, 1, &mqc_states[93], &mqc_states[93]}, +}; + +/* +========================================================== + local functions +========================================================== +*/ + +static void mqc_byteout(opj_mqc_t *mqc) { + if (*mqc->bp == 0xff) { + mqc->bp++; + *mqc->bp = mqc->c >> 20; + mqc->c &= 0xfffff; + mqc->ct = 7; + } else { + if ((mqc->c & 0x8000000) == 0) { /* ((mqc->c&0x8000000)==0) CHANGE */ + mqc->bp++; + *mqc->bp = mqc->c >> 19; + mqc->c &= 0x7ffff; + mqc->ct = 8; + } else { + (*mqc->bp)++; + if (*mqc->bp == 0xff) { + mqc->c &= 0x7ffffff; + mqc->bp++; + *mqc->bp = mqc->c >> 20; + mqc->c &= 0xfffff; + mqc->ct = 7; + } else { + mqc->bp++; + *mqc->bp = mqc->c >> 19; + mqc->c &= 0x7ffff; + mqc->ct = 8; + } + } + } +} + +static void mqc_renorme(opj_mqc_t *mqc) { + do { + mqc->a <<= 1; + mqc->c <<= 1; + mqc->ct--; + if (mqc->ct == 0) { + mqc_byteout(mqc); + } + } while ((mqc->a & 0x8000) == 0); +} + +static void mqc_codemps(opj_mqc_t *mqc) { + mqc->a -= (*mqc->curctx)->qeval; + if ((mqc->a & 0x8000) == 0) { + if (mqc->a < (*mqc->curctx)->qeval) { + mqc->a = (*mqc->curctx)->qeval; + } else { + mqc->c += (*mqc->curctx)->qeval; + } + *mqc->curctx = (*mqc->curctx)->nmps; + mqc_renorme(mqc); + } else { + mqc->c += (*mqc->curctx)->qeval; + } +} + +static void mqc_codelps(opj_mqc_t *mqc) { + mqc->a -= (*mqc->curctx)->qeval; + if (mqc->a < (*mqc->curctx)->qeval) { + mqc->c += (*mqc->curctx)->qeval; + } else { + mqc->a = (*mqc->curctx)->qeval; + } + *mqc->curctx = (*mqc->curctx)->nlps; + mqc_renorme(mqc); +} + +static void mqc_setbits(opj_mqc_t *mqc) { + unsigned int tempc = mqc->c + mqc->a; + mqc->c |= 0xffff; + if (mqc->c >= tempc) { + mqc->c -= 0x8000; + } +} + +static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc) { + int d; + if (mqc->a < (*mqc->curctx)->qeval) { + d = 1 - (*mqc->curctx)->mps; + *mqc->curctx = (*mqc->curctx)->nlps; + } else { + d = (*mqc->curctx)->mps; + *mqc->curctx = (*mqc->curctx)->nmps; + } + + return d; +} + +static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc) { + int d; + if (mqc->a < (*mqc->curctx)->qeval) { + mqc->a = (*mqc->curctx)->qeval; + d = (*mqc->curctx)->mps; + *mqc->curctx = (*mqc->curctx)->nmps; + } else { + mqc->a = (*mqc->curctx)->qeval; + d = 1 - (*mqc->curctx)->mps; + *mqc->curctx = (*mqc->curctx)->nlps; + } + + return d; +} + +#ifdef MQC_PERF_OPT +static INLINE void mqc_bytein(opj_mqc_t *const mqc) { + unsigned int i = *((unsigned int *) mqc->bp); + mqc->c += i & 0xffff00; + mqc->ct = i & 0x0f; + mqc->bp += (i >> 2) & 0x04; +} +#else +static void mqc_bytein(opj_mqc_t *const mqc) { + if (mqc->bp != mqc->end) { + unsigned int c; + if (mqc->bp + 1 != mqc->end) { + c = *(mqc->bp + 1); + } else { + c = 0xff; + } + if (*mqc->bp == 0xff) { + if (c > 0x8f) { + mqc->c += 0xff00; + mqc->ct = 8; + } else { + mqc->bp++; + mqc->c += c << 9; + mqc->ct = 7; + } + } else { + mqc->bp++; + mqc->c += c << 8; + mqc->ct = 8; + } + } else { + mqc->c += 0xff00; + mqc->ct = 8; + } +} +#endif + +static INLINE void mqc_renormd(opj_mqc_t *const mqc) { + do { + if (mqc->ct == 0) { + mqc_bytein(mqc); + } + mqc->a <<= 1; + mqc->c <<= 1; + mqc->ct--; + } while (mqc->a < 0x8000); +} + +/* +========================================================== + MQ-Coder interface +========================================================== +*/ + +opj_mqc_t* mqc_create(void) { + opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t)); +#ifdef MQC_PERF_OPT + mqc->buffer = NULL; +#endif + return mqc; +} + +void mqc_destroy(opj_mqc_t *mqc) { + if(mqc) { +#ifdef MQC_PERF_OPT + if (mqc->buffer) { + opj_free(mqc->buffer); + } +#endif + opj_free(mqc); + } +} + +int mqc_numbytes(opj_mqc_t *mqc) { + return mqc->bp - mqc->start; +} + +void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp) { + mqc_setcurctx(mqc, 0); + mqc->a = 0x8000; + mqc->c = 0; + mqc->bp = bp - 1; + mqc->ct = 12; + if (*mqc->bp == 0xff) { + mqc->ct = 13; + } + mqc->start = bp; +} + +void mqc_encode(opj_mqc_t *mqc, int d) { + if ((*mqc->curctx)->mps == d) { + mqc_codemps(mqc); + } else { + mqc_codelps(mqc); + } +} + +void mqc_flush(opj_mqc_t *mqc) { + mqc_setbits(mqc); + mqc->c <<= mqc->ct; + mqc_byteout(mqc); + mqc->c <<= mqc->ct; + mqc_byteout(mqc); + + if (*mqc->bp != 0xff) { + mqc->bp++; + } +} + +void mqc_bypass_init_enc(opj_mqc_t *mqc) { + mqc->c = 0; + mqc->ct = 8; + /*if (*mqc->bp == 0xff) { + mqc->ct = 7; + } */ +} + +void mqc_bypass_enc(opj_mqc_t *mqc, int d) { + mqc->ct--; + mqc->c = mqc->c + (d << mqc->ct); + if (mqc->ct == 0) { + mqc->bp++; + *mqc->bp = mqc->c; + mqc->ct = 8; + if (*mqc->bp == 0xff) { + mqc->ct = 7; + } + mqc->c = 0; + } +} + +int mqc_bypass_flush_enc(opj_mqc_t *mqc) { + unsigned char bit_padding; + + bit_padding = 0; + + if (mqc->ct != 0) { + while (mqc->ct > 0) { + mqc->ct--; + mqc->c += bit_padding << mqc->ct; + bit_padding = (bit_padding + 1) & 0x01; + } + mqc->bp++; + *mqc->bp = mqc->c; + mqc->ct = 8; + mqc->c = 0; + } + + return 1; +} + +void mqc_reset_enc(opj_mqc_t *mqc) { + mqc_resetstates(mqc); + mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46); + mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3); + mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4); +} + +int mqc_restart_enc(opj_mqc_t *mqc) { + int correction = 1; + + /* */ + int n = 27 - 15 - mqc->ct; + mqc->c <<= mqc->ct; + while (n > 0) { + mqc_byteout(mqc); + n -= mqc->ct; + mqc->c <<= mqc->ct; + } + mqc_byteout(mqc); + + return correction; +} + +void mqc_restart_init_enc(opj_mqc_t *mqc) { + /* */ + mqc_setcurctx(mqc, 0); + mqc->a = 0x8000; + mqc->c = 0; + mqc->ct = 12; + mqc->bp--; + if (*mqc->bp == 0xff) { + mqc->ct = 13; + } +} + +void mqc_erterm_enc(opj_mqc_t *mqc) { + int k = 11 - mqc->ct + 1; + + while (k > 0) { + mqc->c <<= mqc->ct; + mqc->ct = 0; + mqc_byteout(mqc); + k -= mqc->ct; + } + + if (*mqc->bp != 0xff) { + mqc_byteout(mqc); + } +} + +void mqc_segmark_enc(opj_mqc_t *mqc) { + int i; + mqc_setcurctx(mqc, 18); + + for (i = 1; i < 5; i++) { + mqc_encode(mqc, i % 2); + } +} + +void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len) { + mqc_setcurctx(mqc, 0); + mqc->start = bp; + mqc->end = bp + len; + mqc->bp = bp; + if (len==0) mqc->c = 0xff << 16; + else mqc->c = *mqc->bp << 16; + +#ifdef MQC_PERF_OPT + { + unsigned int c; + unsigned int *ip; + unsigned char *end = mqc->end - 1; + mqc->buffer = opj_realloc(mqc->buffer, (2 * len + 1) * sizeof(unsigned int)); + ip = (unsigned int *) mqc->buffer; + + while (bp != end) { + c = *(bp + 1); + if (*bp == 0xff) { + if (c > 0x8f) { + *ip = 0x0000ff18; + } else { + bp++; + *ip = 0x00000017 | (c << 9); + } + } else { + bp++; + *ip = 0x00000018 | (c << 8); + } + ip++; + } + + /* Handle last byte of data */ + c = 0xff; + if (*bp == 0xff) { + *ip = 0x0000ff18; + } else { + bp++; + *ip = 0x00000018 | (c << 8); + } + ip++; + + *ip = 0x0000ff08; + mqc->bp = mqc->buffer; + } +#endif + mqc_bytein(mqc); + mqc->c <<= 7; + mqc->ct -= 7; + mqc->a = 0x8000; +} + +int mqc_decode(opj_mqc_t *const mqc) { + int d; + mqc->a -= (*mqc->curctx)->qeval; + if ((mqc->c >> 16) < (*mqc->curctx)->qeval) { + d = mqc_lpsexchange(mqc); + mqc_renormd(mqc); + } else { + mqc->c -= (*mqc->curctx)->qeval << 16; + if ((mqc->a & 0x8000) == 0) { + d = mqc_mpsexchange(mqc); + mqc_renormd(mqc); + } else { + d = (*mqc->curctx)->mps; + } + } + + return d; +} + +void mqc_resetstates(opj_mqc_t *mqc) { + int i; + for (i = 0; i < MQC_NUMCTXS; i++) { + mqc->ctxs[i] = mqc_states; + } +} + +void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob) { + mqc->ctxs[ctxno] = &mqc_states[msb + (prob << 1)]; +} + + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/mqc.h b/contrib/menuetlibc/openjpeg/libopenjpeg/mqc.h new file mode 100644 index 0000000000..d00cd1067d --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/mqc.h @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __MQC_H +#define __MQC_H +/** +@file mqc.h +@brief Implementation of an MQ-Coder (MQC) + +The functions in MQC.C have for goal to realize the MQ-coder operations. The functions +in MQC.C are used by some function in T1.C. +*/ + +/** @defgroup MQC MQC - Implementation of an MQ-Coder */ +/*@{*/ + +/** +This struct defines the state of a context. +*/ +typedef struct opj_mqc_state { + /** the probability of the Least Probable Symbol (0.75->0x8000, 1.5->0xffff) */ + unsigned int qeval; + /** the Most Probable Symbol (0 or 1) */ + int mps; + /** next state if the next encoded symbol is the MPS */ + struct opj_mqc_state *nmps; + /** next state if the next encoded symbol is the LPS */ + struct opj_mqc_state *nlps; +} opj_mqc_state_t; + +#define MQC_NUMCTXS 19 + +/** +MQ coder +*/ +typedef struct opj_mqc { + unsigned int c; + unsigned int a; + unsigned int ct; + unsigned char *bp; + unsigned char *start; + unsigned char *end; + opj_mqc_state_t *ctxs[MQC_NUMCTXS]; + opj_mqc_state_t **curctx; +#ifdef MQC_PERF_OPT + unsigned char *buffer; +#endif +} opj_mqc_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a new MQC handle +@return Returns a new MQC handle if successful, returns NULL otherwise +*/ +opj_mqc_t* mqc_create(void); +/** +Destroy a previously created MQC handle +@param mqc MQC handle to destroy +*/ +void mqc_destroy(opj_mqc_t *mqc); +/** +Return the number of bytes written/read since initialisation +@param mqc MQC handle +@return Returns the number of bytes already encoded +*/ +int mqc_numbytes(opj_mqc_t *mqc); +/** +Reset the states of all the context of the coder/decoder +(each context is set to a state where 0 and 1 are more or less equiprobable) +@param mqc MQC handle +*/ +void mqc_resetstates(opj_mqc_t *mqc); +/** +Set the state of a particular context +@param mqc MQC handle +@param ctxno Number that identifies the context +@param msb The MSB of the new state of the context +@param prob Number that identifies the probability of the symbols for the new state of the context +*/ +void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob); +/** +Initialize the encoder +@param mqc MQC handle +@param bp Pointer to the start of the buffer where the bytes will be written +*/ +void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp); +/** +Set the current context used for coding/decoding +@param mqc MQC handle +@param ctxno Number that identifies the context +*/ +#define mqc_setcurctx(mqc, ctxno) (mqc)->curctx = &(mqc)->ctxs[(int)(ctxno)] +/** +Encode a symbol using the MQ-coder +@param mqc MQC handle +@param d The symbol to be encoded (0 or 1) +*/ +void mqc_encode(opj_mqc_t *mqc, int d); +/** +Flush the encoder, so that all remaining data is written +@param mqc MQC handle +*/ +void mqc_flush(opj_mqc_t *mqc); +/** +BYPASS mode switch, initialization operation. +JPEG 2000 p 505. +

Not fully implemented and tested !!

+@param mqc MQC handle +*/ +void mqc_bypass_init_enc(opj_mqc_t *mqc); +/** +BYPASS mode switch, coding operation. +JPEG 2000 p 505. +

Not fully implemented and tested !!

+@param mqc MQC handle +@param d The symbol to be encoded (0 or 1) +*/ +void mqc_bypass_enc(opj_mqc_t *mqc, int d); +/** +BYPASS mode switch, flush operation +

Not fully implemented and tested !!

+@param mqc MQC handle +@return Returns 1 (always) +*/ +int mqc_bypass_flush_enc(opj_mqc_t *mqc); +/** +RESET mode switch +@param mqc MQC handle +*/ +void mqc_reset_enc(opj_mqc_t *mqc); +/** +RESTART mode switch (TERMALL) +@param mqc MQC handle +@return Returns 1 (always) +*/ +int mqc_restart_enc(opj_mqc_t *mqc); +/** +RESTART mode switch (TERMALL) reinitialisation +@param mqc MQC handle +*/ +void mqc_restart_init_enc(opj_mqc_t *mqc); +/** +ERTERM mode switch (PTERM) +@param mqc MQC handle +*/ +void mqc_erterm_enc(opj_mqc_t *mqc); +/** +SEGMARK mode switch (SEGSYM) +@param mqc MQC handle +*/ +void mqc_segmark_enc(opj_mqc_t *mqc); +/** +Initialize the decoder +@param mqc MQC handle +@param bp Pointer to the start of the buffer from which the bytes will be read +@param len Length of the input buffer +*/ +void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len); +/** +Decode a symbol +@param mqc MQC handle +@return Returns the decoded symbol (0 or 1) +*/ +int mqc_decode(opj_mqc_t *const mqc); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __MQC_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/openjpeg.c b/contrib/menuetlibc/openjpeg/libopenjpeg/openjpeg.c new file mode 100644 index 0000000000..d95cfc91b9 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/openjpeg.c @@ -0,0 +1,337 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifdef _WIN32 +#include +#endif /* _WIN32 */ + +#include "../opj_config.h" +#include "opj_includes.h" + +/* ---------------------------------------------------------------------- */ +#ifdef _WIN32 +#ifndef OPJ_STATIC +BOOL APIENTRY +DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { + switch (ul_reason_for_call) { + case DLL_PROCESS_ATTACH : + break; + case DLL_PROCESS_DETACH : + break; + case DLL_THREAD_ATTACH : + case DLL_THREAD_DETACH : + break; + } + + return TRUE; +} +#endif /* OPJ_STATIC */ +#endif /* _WIN32 */ + +/* ---------------------------------------------------------------------- */ + + +const char* OPJ_CALLCONV opj_version(void) { + return PACKAGE_VERSION; +} + +opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format) { + opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_calloc(1, sizeof(opj_dinfo_t)); + if(!dinfo) return NULL; + dinfo->is_decompressor = true; + switch(format) { + case CODEC_J2K: + case CODEC_JPT: + /* get a J2K decoder handle */ + dinfo->j2k_handle = (void*)j2k_create_decompress((opj_common_ptr)dinfo); + if(!dinfo->j2k_handle) { + opj_free(dinfo); + return NULL; + } + break; + case CODEC_JP2: + /* get a JP2 decoder handle */ + dinfo->jp2_handle = (void*)jp2_create_decompress((opj_common_ptr)dinfo); + if(!dinfo->jp2_handle) { + opj_free(dinfo); + return NULL; + } + break; + case CODEC_UNKNOWN: + default: + opj_free(dinfo); + return NULL; + } + + dinfo->codec_format = format; + + return dinfo; +} + +void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo) { + if(dinfo) { + /* destroy the codec */ + switch(dinfo->codec_format) { + case CODEC_J2K: + case CODEC_JPT: + j2k_destroy_decompress((opj_j2k_t*)dinfo->j2k_handle); + break; + case CODEC_JP2: + jp2_destroy_decompress((opj_jp2_t*)dinfo->jp2_handle); + break; + case CODEC_UNKNOWN: + default: + break; + } + /* destroy the decompressor */ + opj_free(dinfo); + } +} + +void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters) { + if(parameters) { + memset(parameters, 0, sizeof(opj_dparameters_t)); + /* default decoding parameters */ + parameters->cp_layer = 0; + parameters->cp_reduce = 0; + parameters->cp_limit_decoding = NO_LIMITATION; + + parameters->decod_format = -1; + parameters->cod_format = -1; +/* UniPG>> */ +#ifdef USE_JPWL + parameters->jpwl_correct = false; + parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS; + parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES; +#endif /* USE_JPWL */ +/* <codec_format) { + case CODEC_J2K: + case CODEC_JPT: + j2k_setup_decoder((opj_j2k_t*)dinfo->j2k_handle, parameters); + break; + case CODEC_JP2: + jp2_setup_decoder((opj_jp2_t*)dinfo->jp2_handle, parameters); + break; + case CODEC_UNKNOWN: + default: + break; + } + } +} + +opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio) { + return opj_decode_with_info(dinfo, cio, NULL); +} + +opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info) { + if(dinfo && cio) { + switch(dinfo->codec_format) { + case CODEC_J2K: + return j2k_decode((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info); + case CODEC_JPT: + return j2k_decode_jpt_stream((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info); + case CODEC_JP2: + return jp2_decode((opj_jp2_t*)dinfo->jp2_handle, cio, cstr_info); + case CODEC_UNKNOWN: + default: + break; + } + } + return NULL; +} + +opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format) { + opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_calloc(1, sizeof(opj_cinfo_t)); + if(!cinfo) return NULL; + cinfo->is_decompressor = false; + switch(format) { + case CODEC_J2K: + /* get a J2K coder handle */ + cinfo->j2k_handle = (void*)j2k_create_compress((opj_common_ptr)cinfo); + if(!cinfo->j2k_handle) { + opj_free(cinfo); + return NULL; + } + break; + case CODEC_JP2: + /* get a JP2 coder handle */ + cinfo->jp2_handle = (void*)jp2_create_compress((opj_common_ptr)cinfo); + if(!cinfo->jp2_handle) { + opj_free(cinfo); + return NULL; + } + break; + case CODEC_JPT: + case CODEC_UNKNOWN: + default: + opj_free(cinfo); + return NULL; + } + + cinfo->codec_format = format; + + return cinfo; +} + +void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo) { + if(cinfo) { + /* destroy the codec */ + switch(cinfo->codec_format) { + case CODEC_J2K: + j2k_destroy_compress((opj_j2k_t*)cinfo->j2k_handle); + break; + case CODEC_JP2: + jp2_destroy_compress((opj_jp2_t*)cinfo->jp2_handle); + break; + case CODEC_JPT: + case CODEC_UNKNOWN: + default: + break; + } + /* destroy the decompressor */ + opj_free(cinfo); + } +} + +void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters) { + if(parameters) { + memset(parameters, 0, sizeof(opj_cparameters_t)); + /* default coding parameters */ + parameters->cp_cinema = OFF; + parameters->max_comp_size = 0; + parameters->numresolution = 6; + parameters->cp_rsiz = STD_RSIZ; + parameters->cblockw_init = 64; + parameters->cblockh_init = 64; + parameters->prog_order = LRCP; + parameters->roi_compno = -1; /* no ROI */ + parameters->subsampling_dx = 1; + parameters->subsampling_dy = 1; + parameters->tp_on = 0; + parameters->decod_format = -1; + parameters->cod_format = -1; + parameters->tcp_rates[0] = 0; + parameters->tcp_numlayers = 0; + parameters->cp_disto_alloc = 0; + parameters->cp_fixed_alloc = 0; + parameters->cp_fixed_quality = 0; + +/* UniPG>> */ +#ifdef USE_JPWL + parameters->jpwl_epc_on = false; + parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */ + { + int i; + for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { + parameters->jpwl_hprot_TPH_tileno[i] = -1; /* unassigned */ + parameters->jpwl_hprot_TPH[i] = 0; /* absent */ + } + }; + { + int i; + for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) { + parameters->jpwl_pprot_tileno[i] = -1; /* unassigned */ + parameters->jpwl_pprot_packno[i] = -1; /* unassigned */ + parameters->jpwl_pprot[i] = 0; /* absent */ + } + }; + parameters->jpwl_sens_size = 0; /* 0 means no ESD */ + parameters->jpwl_sens_addr = 0; /* 0 means auto */ + parameters->jpwl_sens_range = 0; /* 0 means packet */ + parameters->jpwl_sens_MH = -1; /* -1 means unassigned */ + { + int i; + for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { + parameters->jpwl_sens_TPH_tileno[i] = -1; /* unassigned */ + parameters->jpwl_sens_TPH[i] = -1; /* absent */ + } + }; +#endif /* USE_JPWL */ +/* <codec_format) { + case CODEC_J2K: + j2k_setup_encoder((opj_j2k_t*)cinfo->j2k_handle, parameters, image); + break; + case CODEC_JP2: + jp2_setup_encoder((opj_jp2_t*)cinfo->jp2_handle, parameters, image); + break; + case CODEC_JPT: + case CODEC_UNKNOWN: + default: + break; + } + } +} + +bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index) { + if (index != NULL) + opj_event_msg((opj_common_ptr)cinfo, EVT_WARNING, "Set index to NULL when calling the opj_encode function.\n" + "To extract the index, use the opj_encode_with_info() function.\n" + "No index will be generated during this encoding\n"); + return opj_encode_with_info(cinfo, cio, image, NULL); +} + +bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) { + if(cinfo && cio && image) { + switch(cinfo->codec_format) { + case CODEC_J2K: + return j2k_encode((opj_j2k_t*)cinfo->j2k_handle, cio, image, cstr_info); + case CODEC_JP2: + return jp2_encode((opj_jp2_t*)cinfo->jp2_handle, cio, image, cstr_info); + case CODEC_JPT: + case CODEC_UNKNOWN: + default: + break; + } + } + return false; +} + +void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info) { + if (cstr_info) { + int tileno; + for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) { + opj_tile_info_t *tile_info = &cstr_info->tile[tileno]; + opj_free(tile_info->thresh); + opj_free(tile_info->packet); + opj_free(tile_info->tp); + } + opj_free(cstr_info->tile); + opj_free(cstr_info->marker); + opj_free(cstr_info->numdecompos); + } +} diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/openjpeg.h b/contrib/menuetlibc/openjpeg/libopenjpeg/openjpeg.h new file mode 100644 index 0000000000..7ad62bf6dc --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/openjpeg.h @@ -0,0 +1,915 @@ + /* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2006-2007, Parvatha Elangovan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef OPENJPEG_H +#define OPENJPEG_H + + +/* +========================================================== + Compiler directives +========================================================== +*/ + +#if defined(OPJ_STATIC) || !defined(_WIN32) +#define OPJ_API +#define OPJ_CALLCONV +#else +#define OPJ_CALLCONV __stdcall +/* +The following ifdef block is the standard way of creating macros which make exporting +from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS +symbol defined on the command line. this symbol should not be defined on any project +that uses this DLL. This way any other project whose source files include this file see +OPJ_API functions as being imported from a DLL, wheras this DLL sees symbols +defined with this macro as being exported. +*/ +#if defined(OPJ_EXPORTS) || defined(DLL_EXPORT) +#define OPJ_API __declspec(dllexport) +#else +#define OPJ_API __declspec(dllimport) +#endif /* OPJ_EXPORTS */ +#endif /* !OPJ_STATIC || !_WIN32 */ + +#ifndef __cplusplus +#if defined(HAVE_STDBOOL_H) +/* +The C language implementation does correctly provide the standard header +file "stdbool.h". + */ +#include +#else +/* +The C language implementation does not provide the standard header file +"stdbool.h" as required by ISO/IEC 9899:1999. Try to compensate for this +braindamage below. +*/ +#if !defined(bool) +#define bool int +#endif +#if !defined(true) +#define true 1 +#endif +#if !defined(false) +#define false 0 +#endif +#endif +#endif /* __cplusplus */ + +/* +========================================================== + Useful constant definitions +========================================================== +*/ + +#define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */ + +#define J2K_MAXRLVLS 33 /**< Number of maximum resolution level authorized */ +#define J2K_MAXBANDS (3*J2K_MAXRLVLS-2) /**< Number of maximum sub-band linked to number of resolution level */ + +/* UniPG>> */ +#define JPWL_MAX_NO_TILESPECS 16 /**< Maximum number of tile parts expected by JPWL: increase at your will */ +#define JPWL_MAX_NO_PACKSPECS 16 /**< Maximum number of packet parts expected by JPWL: increase at your will */ +#define JPWL_MAX_NO_MARKERS 512 /**< Maximum number of JPWL markers: increase at your will */ +#define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename" /**< index file name used when JPWL is on */ +#define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, so you'll find better the first EPB */ +#define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, to avoid some crashes */ +#define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit errors in marker id's */ +#define JPWL_MAXIMUM_EPB_ROOM 65450 /**< Expect this maximum number of bytes for composition of EPBs */ +/* < +
  • Error messages +
  • Warning messages +
  • Debugging messages + +*/ +typedef struct opj_event_mgr { + /** Error message callback if available, NULL otherwise */ + opj_msg_callback error_handler; + /** Warning message callback if available, NULL otherwise */ + opj_msg_callback warning_handler; + /** Debug message callback if available, NULL otherwise */ + opj_msg_callback info_handler; +} opj_event_mgr_t; + + +/* +========================================================== + codec typedef definitions +========================================================== +*/ + +/** +Progression order changes +*/ +typedef struct opj_poc { + /** Resolution num start, Component num start, given by POC */ + int resno0, compno0; + /** Layer num end,Resolution num end, Component num end, given by POC */ + int layno1, resno1, compno1; + /** Layer num start,Precinct num start, Precinct num end */ + int layno0, precno0, precno1; + /** Progression order enum*/ + OPJ_PROG_ORDER prg1,prg; + /** Progression order string*/ + char progorder[5]; + /** Tile number */ + int tile; + /** Start and end values for Tile width and height*/ + int tx0,tx1,ty0,ty1; + /** Start value, initialised in pi_initialise_encode*/ + int layS, resS, compS, prcS; + /** End value, initialised in pi_initialise_encode */ + int layE, resE, compE, prcE; + /** Start and end values of Tile width and height, initialised in pi_initialise_encode*/ + int txS,txE,tyS,tyE,dx,dy; + /** Temporary values for Tile parts, initialised in pi_create_encode */ + int lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t; +} opj_poc_t; + +/** +Compression parameters +*/ +typedef struct opj_cparameters { + /** size of tile: tile_size_on = false (not in argument) or = true (in argument) */ + bool tile_size_on; + /** XTOsiz */ + int cp_tx0; + /** YTOsiz */ + int cp_ty0; + /** XTsiz */ + int cp_tdx; + /** YTsiz */ + int cp_tdy; + /** allocation by rate/distortion */ + int cp_disto_alloc; + /** allocation by fixed layer */ + int cp_fixed_alloc; + /** add fixed_quality */ + int cp_fixed_quality; + /** fixed layer */ + int *cp_matrice; + /** comment for coding */ + char *cp_comment; + /** csty : coding style */ + int csty; + /** progression order (default LRCP) */ + OPJ_PROG_ORDER prog_order; + /** progression order changes */ + opj_poc_t POC[32]; + /** number of progression order changes (POC), default to 0 */ + int numpocs; + /** number of layers */ + int tcp_numlayers; + /** rates of layers */ + float tcp_rates[100]; + /** different psnr for successive layers */ + float tcp_distoratio[100]; + /** number of resolutions */ + int numresolution; + /** initial code block width, default to 64 */ + int cblockw_init; + /** initial code block height, default to 64 */ + int cblockh_init; + /** mode switch (cblk_style) */ + int mode; + /** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */ + int irreversible; + /** region of interest: affected component in [0..3], -1 means no ROI */ + int roi_compno; + /** region of interest: upshift value */ + int roi_shift; + /* number of precinct size specifications */ + int res_spec; + /** initial precinct width */ + int prcw_init[J2K_MAXRLVLS]; + /** initial precinct height */ + int prch_init[J2K_MAXRLVLS]; + + /**@name command line encoder parameters (not used inside the library) */ + /*@{*/ + /** input file name */ + char infile[OPJ_PATH_LEN]; + /** output file name */ + char outfile[OPJ_PATH_LEN]; + /** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */ + int index_on; + /** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */ + char index[OPJ_PATH_LEN]; + /** subimage encoding: origin image offset in x direction */ + int image_offset_x0; + /** subimage encoding: origin image offset in y direction */ + int image_offset_y0; + /** subsampling value for dx */ + int subsampling_dx; + /** subsampling value for dy */ + int subsampling_dy; + /** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/ + int decod_format; + /** output file format 0: J2K, 1: JP2, 2: JPT */ + int cod_format; + /*@}*/ + +/* UniPG>> */ + /**@name JPWL encoding parameters */ + /*@{*/ + /** enables writing of EPC in MH, thus activating JPWL */ + bool jpwl_epc_on; + /** error protection method for MH (0,1,16,32,37-128) */ + int jpwl_hprot_MH; + /** tile number of header protection specification (>=0) */ + int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; + /** error protection methods for TPHs (0,1,16,32,37-128) */ + int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS]; + /** tile number of packet protection specification (>=0) */ + int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS]; + /** packet number of packet protection specification (>=0) */ + int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS]; + /** error protection methods for packets (0,1,16,32,37-128) */ + int jpwl_pprot[JPWL_MAX_NO_PACKSPECS]; + /** enables writing of ESD, (0=no/1/2 bytes) */ + int jpwl_sens_size; + /** sensitivity addressing size (0=auto/2/4 bytes) */ + int jpwl_sens_addr; + /** sensitivity range (0-3) */ + int jpwl_sens_range; + /** sensitivity method for MH (-1=no,0-7) */ + int jpwl_sens_MH; + /** tile number of sensitivity specification (>=0) */ + int jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS]; + /** sensitivity methods for TPHs (-1=no,0-7) */ + int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS]; + /*@}*/ +/* <> */ + /**@name JPWL decoding parameters */ + /*@{*/ + /** activates the JPWL correction capabilities */ + bool jpwl_correct; + /** expected number of components */ + int jpwl_exp_comps; + /** maximum number of tiles */ + int jpwl_max_tiles; + /*@}*/ +/* <> */ +/** +Marker structure +*/ +typedef struct opj_marker_info_t { + /** marker type */ + unsigned short int type; + /** position in codestream */ + int pos; + /** length, marker val included */ + int len; +} opj_marker_info_t; +/* <> */ + /** number of markers */ + int marknum; + /** list of markers */ + opj_marker_info_t *marker; + /** actual size of markers array */ + int maxmarknum; +/* <cp. +@param dinfo decompressor handle +@param parameters decompression parameters +*/ +OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters); +/** +Decode an image from a JPEG-2000 codestream +@param dinfo decompressor handle +@param cio Input buffer stream +@return Returns a decoded image if successful, returns NULL otherwise +*/ +OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio); + +/** +Decode an image from a JPEG-2000 codestream and extract the codestream information +@param dinfo decompressor handle +@param cio Input buffer stream +@param cstr_info Codestream information structure if needed afterwards, NULL otherwise +@return Returns a decoded image if successful, returns NULL otherwise +*/ +OPJ_API opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info); +/** +Creates a J2K/JP2 compression structure +@param format Coder to select +@return Returns a handle to a compressor if successful, returns NULL otherwise +*/ +OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format); +/** +Destroy a compressor handle +@param cinfo compressor handle to destroy +*/ +OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo); +/** +Set encoding parameters to default values, that means : +
      +
    • Lossless +
    • 1 tile +
    • Size of precinct : 2^15 x 2^15 (means 1 precinct) +
    • Size of code-block : 64 x 64 +
    • Number of resolutions: 6 +
    • No SOP marker in the codestream +
    • No EPH marker in the codestream +
    • No sub-sampling in x or y direction +
    • No mode switch activated +
    • Progression order: LRCP +
    • No index file +
    • No ROI upshifted +
    • No offset of the origin of the image +
    • No offset of the origin of the tiles +
    • Reversible DWT 5-3 +
    +@param parameters Compression parameters +*/ +OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters); +/** +Setup the encoder parameters using the current image and using user parameters. +@param cinfo Compressor handle +@param parameters Compression parameters +@param image Input filled image +*/ +OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image); +/** +Encode an image into a JPEG-2000 codestream +@param cinfo compressor handle +@param cio Output buffer stream +@param image Image to encode +@param index Depreacted -> Set to NULL. To extract index, used opj_encode_wci() +@return Returns true if successful, returns false otherwise +*/ +OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index); +/** +Encode an image into a JPEG-2000 codestream and extract the codestream information +@param cinfo compressor handle +@param cio Output buffer stream +@param image Image to encode +@param cstr_info Codestream information structure if needed afterwards, NULL otherwise +@return Returns true if successful, returns false otherwise +*/ +OPJ_API bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); +/** +Destroy Codestream information after compression or decompression +@param cstr_info Codestream information structure +*/ +OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info); + +#ifdef __cplusplus +} +#endif + +#endif /* OPENJPEG_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/opj_includes.h b/contrib/menuetlibc/openjpeg/libopenjpeg/opj_includes.h new file mode 100644 index 0000000000..53739abf81 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/opj_includes.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef OPJ_INCLUDES_H +#define OPJ_INCLUDES_H + +/* + ========================================================== + Standard includes used by the library + ========================================================== +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + ========================================================== + OpenJPEG interface + ========================================================== + */ +#include "openjpeg.h" + +/* + ========================================================== + OpenJPEG modules + ========================================================== +*/ + +/* Ignore GCC attributes if this is not GCC */ +#ifndef __GNUC__ + #define __attribute__(x) /* __attribute__(x) */ +#endif + +/* +The inline keyword is supported by C99 but not by C90. +Most compilers implement their own version of this keyword ... +*/ +#ifndef INLINE + #if defined(_MSC_VER) + #define INLINE __forceinline + #elif defined(__GNUC__) + #define INLINE __inline__ + #elif defined(__MWERKS__) + #define INLINE inline + #else + /* add other compilers here ... */ + #define INLINE + #endif /* defined() */ +#endif /* INLINE */ + +/* Are restricted pointers available? (C99) */ +#if (__STDC_VERSION__ != 199901L) + /* Not a C99 compiler */ + #ifdef __GNUC__ + #define restrict __restrict__ + #else + #define restrict /* restrict */ + #endif +#endif + +/* MSVC and Borland C do not have lrintf */ +#if defined(_MSC_VER) || defined(__BORLANDC__) +static INLINE long lrintf(float f){ +#ifdef _M_X64 + return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f)); +#else + int i; + + _asm{ + fld f + fistp i + }; + + return i; +#endif +} +#endif + +#include "j2k_lib.h" +#include "opj_malloc.h" +#include "event.h" +#include "cio.h" + +#include "image.h" +#include "j2k.h" +#include "jp2.h" +#include "jpt.h" + +#include "mqc.h" +#include "raw.h" +#include "bio.h" +#include "tgt.h" +#include "pi.h" +#include "tcd.h" +#include "t1.h" +#include "dwt.h" +#include "t2.h" +#include "mct.h" +#include "int.h" +#include "fix.h" + +/* JPWL>> */ +#ifdef USE_JPWL +#include "../jpwl/jpwl.h" +#endif /* USE_JPWL */ +/* < + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __OPJ_MALLOC_H +#define __OPJ_MALLOC_H +/** +@file opj_malloc.h +@brief Internal functions + +The functions in opj_malloc.h are internal utilities used for memory management. +*/ + +/** @defgroup MISC MISC - Miscellaneous internal functions */ +/*@{*/ + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ + +/** +Allocate an uninitialized memory block +@param size Bytes to allocate +@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available +*/ +#ifdef ALLOC_PERF_OPT +void * OPJ_CALLCONV opj_malloc(size_t size); +#else +#define opj_malloc(size) malloc(size) +#endif + +/** +Allocate a memory block with elements initialized to 0 +@param num Blocks to allocate +@param size Bytes per block to allocate +@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available +*/ +#ifdef ALLOC_PERF_OPT +void * OPJ_CALLCONV opj_calloc(size_t _NumOfElements, size_t _SizeOfElements); +#else +#define opj_calloc(num, size) calloc(num, size) +#endif + +/** +Allocate memory aligned to a 16 byte boundry +@param size Bytes to allocate +@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available +*/ +/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */ +#ifdef _WIN32 + /* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */ + #ifdef __GNUC__ + #include + #define HAVE_MM_MALLOC + #else /* MSVC, Intel C++ */ + #include + #ifdef _mm_malloc + #define HAVE_MM_MALLOC + #endif + #endif +#else /* Not _WIN32 */ + + #if defined(__sun) + #define HAVE_MEMALIGN + /* Linux x86_64 and OSX always align allocations to 16 bytes */ + #elif !defined(__amd64__) && !defined(__APPLE__) +// #define HAVE_MEMALIGN + #include + #endif +#endif + +#define opj_aligned_malloc(size) malloc(size) +#define opj_aligned_free(m) free(m) + +#ifdef HAVE_MM_MALLOC + #undef opj_aligned_malloc + #define opj_aligned_malloc(size) _mm_malloc(size, 16) + #undef opj_aligned_free + #define opj_aligned_free(m) _mm_free(m) +#endif + +#undef HAVE_MEMALIGN +#ifdef HAVE_MEMALIGN + extern void* memalign(size_t, size_t); + #undef opj_aligned_malloc + #define opj_aligned_malloc(size) memalign(16, (size)) + #undef opj_aligned_free + #define opj_aligned_free(m) free(m) +#endif + +#undef HAVE_POSIX_MEMALIGN +#ifdef HAVE_POSIX_MEMALIGN + #undef opj_aligned_malloc + extern int posix_memalign(void**, size_t, size_t); + + static INLINE void* __attribute__ ((malloc)) opj_aligned_malloc(size_t size){ + void* mem = NULL; + posix_memalign(&mem, 16, size); + return mem; + } + #undef opj_aligned_free + #define opj_aligned_free(m) free(m) +#endif + +#ifdef ALLOC_PERF_OPT + #undef opj_aligned_malloc + #define opj_aligned_malloc(size) opj_malloc(size) + #undef opj_aligned_free + #define opj_aligned_free(m) opj_free(m) +#endif + +/** +Reallocate memory blocks. +@param m Pointer to previously allocated memory block +@param s New size in bytes +@return Returns a void pointer to the reallocated (and possibly moved) memory block +*/ +#ifdef ALLOC_PERF_OPT +void * OPJ_CALLCONV opj_realloc(void * m, size_t s); +#else +#define opj_realloc(m, s) realloc(m, s) +#endif + +/** +Deallocates or frees a memory block. +@param m Previously allocated memory block to be freed +*/ +#ifdef ALLOC_PERF_OPT +void OPJ_CALLCONV opj_free(void * m); +#else +#define opj_free(m) free(m) +#endif + +#ifdef __GNUC__ +#pragma GCC poison malloc calloc realloc free +#endif + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __OPJ_MALLOC_H */ + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/pi.c b/contrib/menuetlibc/openjpeg/libopenjpeg/pi.c new file mode 100644 index 0000000000..06e76af765 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/pi.c @@ -0,0 +1,963 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2006-2007, Parvatha Elangovan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup PI PI - Implementation of a packet iterator */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +/** +Get next packet in layer-resolution-component-precinct order. +@param pi packet iterator to modify +@return returns false if pi pointed to the last packet or else returns true +*/ +static bool pi_next_lrcp(opj_pi_iterator_t * pi); +/** +Get next packet in resolution-layer-component-precinct order. +@param pi packet iterator to modify +@return returns false if pi pointed to the last packet or else returns true +*/ +static bool pi_next_rlcp(opj_pi_iterator_t * pi); +/** +Get next packet in resolution-precinct-component-layer order. +@param pi packet iterator to modify +@return returns false if pi pointed to the last packet or else returns true +*/ +static bool pi_next_rpcl(opj_pi_iterator_t * pi); +/** +Get next packet in precinct-component-resolution-layer order. +@param pi packet iterator to modify +@return returns false if pi pointed to the last packet or else returns true +*/ +static bool pi_next_pcrl(opj_pi_iterator_t * pi); +/** +Get next packet in component-precinct-resolution-layer order. +@param pi packet iterator to modify +@return returns false if pi pointed to the last packet or else returns true +*/ +static bool pi_next_cprl(opj_pi_iterator_t * pi); + +/*@}*/ + +/*@}*/ + +/* +========================================================== + local functions +========================================================== +*/ + +static bool pi_next_lrcp(opj_pi_iterator_t * pi) { + opj_pi_comp_t *comp = NULL; + opj_pi_resolution_t *res = NULL; + long index = 0; + + if (!pi->first) { + comp = &pi->comps[pi->compno]; + res = &comp->resolutions[pi->resno]; + goto LABEL_SKIP; + } else { + pi->first = 0; + } + + for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { + for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; + pi->resno++) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolutions) { + continue; + } + res = &comp->resolutions[pi->resno]; + if (!pi->tp_on){ + pi->poc.precno1 = res->pw * res->ph; + } + for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) { + index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; + if (!pi->include[index]) { + pi->include[index] = 1; + return true; + } +LABEL_SKIP:; + } + } + } + } + + return false; +} + +static bool pi_next_rlcp(opj_pi_iterator_t * pi) { + opj_pi_comp_t *comp = NULL; + opj_pi_resolution_t *res = NULL; + long index = 0; + + if (!pi->first) { + comp = &pi->comps[pi->compno]; + res = &comp->resolutions[pi->resno]; + goto LABEL_SKIP; + } else { + pi->first = 0; + } + + for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { + for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolutions) { + continue; + } + res = &comp->resolutions[pi->resno]; + if(!pi->tp_on){ + pi->poc.precno1 = res->pw * res->ph; + } + for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) { + index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; + if (!pi->include[index]) { + pi->include[index] = 1; + return true; + } +LABEL_SKIP:; + } + } + } + } + + return false; +} + +static bool pi_next_rpcl(opj_pi_iterator_t * pi) { + opj_pi_comp_t *comp = NULL; + opj_pi_resolution_t *res = NULL; + long index = 0; + + if (!pi->first) { + goto LABEL_SKIP; + } else { + int compno, resno; + pi->first = 0; + pi->dx = 0; + pi->dy = 0; + for (compno = 0; compno < pi->numcomps; compno++) { + comp = &pi->comps[compno]; + for (resno = 0; resno < comp->numresolutions; resno++) { + int dx, dy; + res = &comp->resolutions[resno]; + dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); + dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); + pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); + pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); + } + } + } +if (!pi->tp_on){ + pi->poc.ty0 = pi->ty0; + pi->poc.tx0 = pi->tx0; + pi->poc.ty1 = pi->ty1; + pi->poc.tx1 = pi->tx1; + } + for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { + for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += pi->dy - (pi->y % pi->dy)) { + for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += pi->dx - (pi->x % pi->dx)) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { + int levelno; + int trx0, try0; + int trx1, try1; + int rpx, rpy; + int prci, prcj; + comp = &pi->comps[pi->compno]; + if (pi->resno >= comp->numresolutions) { + continue; + } + res = &comp->resolutions[pi->resno]; + levelno = comp->numresolutions - 1 - pi->resno; + trx0 = int_ceildiv(pi->tx0, comp->dx << levelno); + try0 = int_ceildiv(pi->ty0, comp->dy << levelno); + trx1 = int_ceildiv(pi->tx1, comp->dx << levelno); + try1 = int_ceildiv(pi->ty1, comp->dy << levelno); + rpx = res->pdx + levelno; + rpy = res->pdy + levelno; + if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){ + continue; + } + if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){ + continue; + } + + if ((res->pw==0)||(res->ph==0)) continue; + + if ((trx0==trx1)||(try0==try1)) continue; + + prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx) + - int_floordivpow2(trx0, res->pdx); + prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy) + - int_floordivpow2(try0, res->pdy); + pi->precno = prci + prcj * res->pw; + for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { + index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; + if (!pi->include[index]) { + pi->include[index] = 1; + return true; + } +LABEL_SKIP:; + } + } + } + } + } + + return false; +} + +static bool pi_next_pcrl(opj_pi_iterator_t * pi) { + opj_pi_comp_t *comp = NULL; + opj_pi_resolution_t *res = NULL; + long index = 0; + + if (!pi->first) { + comp = &pi->comps[pi->compno]; + goto LABEL_SKIP; + } else { + int compno, resno; + pi->first = 0; + pi->dx = 0; + pi->dy = 0; + for (compno = 0; compno < pi->numcomps; compno++) { + comp = &pi->comps[compno]; + for (resno = 0; resno < comp->numresolutions; resno++) { + int dx, dy; + res = &comp->resolutions[resno]; + dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); + dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); + pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); + pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); + } + } + } + if (!pi->tp_on){ + pi->poc.ty0 = pi->ty0; + pi->poc.tx0 = pi->tx0; + pi->poc.ty1 = pi->ty1; + pi->poc.tx1 = pi->tx1; + } + for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += pi->dy - (pi->y % pi->dy)) { + for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += pi->dx - (pi->x % pi->dx)) { + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { + comp = &pi->comps[pi->compno]; + for (pi->resno = pi->poc.resno0; pi->resno < int_min(pi->poc.resno1, comp->numresolutions); pi->resno++) { + int levelno; + int trx0, try0; + int trx1, try1; + int rpx, rpy; + int prci, prcj; + res = &comp->resolutions[pi->resno]; + levelno = comp->numresolutions - 1 - pi->resno; + trx0 = int_ceildiv(pi->tx0, comp->dx << levelno); + try0 = int_ceildiv(pi->ty0, comp->dy << levelno); + trx1 = int_ceildiv(pi->tx1, comp->dx << levelno); + try1 = int_ceildiv(pi->ty1, comp->dy << levelno); + rpx = res->pdx + levelno; + rpy = res->pdy + levelno; + if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){ + continue; + } + if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){ + continue; + } + + if ((res->pw==0)||(res->ph==0)) continue; + + if ((trx0==trx1)||(try0==try1)) continue; + + prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx) + - int_floordivpow2(trx0, res->pdx); + prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy) + - int_floordivpow2(try0, res->pdy); + pi->precno = prci + prcj * res->pw; + for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { + index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; + if (!pi->include[index]) { + pi->include[index] = 1; + return true; + } +LABEL_SKIP:; + } + } + } + } + } + + return false; +} + +static bool pi_next_cprl(opj_pi_iterator_t * pi) { + opj_pi_comp_t *comp = NULL; + opj_pi_resolution_t *res = NULL; + long index = 0; + + if (!pi->first) { + comp = &pi->comps[pi->compno]; + goto LABEL_SKIP; + } else { + pi->first = 0; + } + + for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { + int resno; + comp = &pi->comps[pi->compno]; + pi->dx = 0; + pi->dy = 0; + for (resno = 0; resno < comp->numresolutions; resno++) { + int dx, dy; + res = &comp->resolutions[resno]; + dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); + dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); + pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); + pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); + } + if (!pi->tp_on){ + pi->poc.ty0 = pi->ty0; + pi->poc.tx0 = pi->tx0; + pi->poc.ty1 = pi->ty1; + pi->poc.tx1 = pi->tx1; + } + for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += pi->dy - (pi->y % pi->dy)) { + for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += pi->dx - (pi->x % pi->dx)) { + for (pi->resno = pi->poc.resno0; pi->resno < int_min(pi->poc.resno1, comp->numresolutions); pi->resno++) { + int levelno; + int trx0, try0; + int trx1, try1; + int rpx, rpy; + int prci, prcj; + res = &comp->resolutions[pi->resno]; + levelno = comp->numresolutions - 1 - pi->resno; + trx0 = int_ceildiv(pi->tx0, comp->dx << levelno); + try0 = int_ceildiv(pi->ty0, comp->dy << levelno); + trx1 = int_ceildiv(pi->tx1, comp->dx << levelno); + try1 = int_ceildiv(pi->ty1, comp->dy << levelno); + rpx = res->pdx + levelno; + rpy = res->pdy + levelno; + if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){ + continue; + } + if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){ + continue; + } + + if ((res->pw==0)||(res->ph==0)) continue; + + if ((trx0==trx1)||(try0==try1)) continue; + + prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx) + - int_floordivpow2(trx0, res->pdx); + prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy) + - int_floordivpow2(try0, res->pdy); + pi->precno = prci + prcj * res->pw; + for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { + index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; + if (!pi->include[index]) { + pi->include[index] = 1; + return true; + } +LABEL_SKIP:; + } + } + } + } + } + + return false; +} + +/* +========================================================== + Packet iterator interface +========================================================== +*/ + +opj_pi_iterator_t *pi_create_decode(opj_image_t *image, opj_cp_t *cp, int tileno) { + int p, q; + int compno, resno, pino; + opj_pi_iterator_t *pi = NULL; + opj_tcp_t *tcp = NULL; + opj_tccp_t *tccp = NULL; + + tcp = &cp->tcps[tileno]; + + pi = (opj_pi_iterator_t*) opj_calloc((tcp->numpocs + 1), sizeof(opj_pi_iterator_t)); + if(!pi) { + /* TODO: throw an error */ + return NULL; + } + + for (pino = 0; pino < tcp->numpocs + 1; pino++) { /* change */ + int maxres = 0; + int maxprec = 0; + p = tileno % cp->tw; + q = tileno / cp->tw; + + pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, image->x0); + pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, image->y0); + pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1); + pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1); + pi[pino].numcomps = image->numcomps; + + pi[pino].comps = (opj_pi_comp_t*) opj_calloc(image->numcomps, sizeof(opj_pi_comp_t)); + if(!pi[pino].comps) { + /* TODO: throw an error */ + pi_destroy(pi, cp, tileno); + return NULL; + } + + for (compno = 0; compno < pi->numcomps; compno++) { + int tcx0, tcy0, tcx1, tcy1; + opj_pi_comp_t *comp = &pi[pino].comps[compno]; + tccp = &tcp->tccps[compno]; + comp->dx = image->comps[compno].dx; + comp->dy = image->comps[compno].dy; + comp->numresolutions = tccp->numresolutions; + + comp->resolutions = (opj_pi_resolution_t*) opj_calloc(comp->numresolutions, sizeof(opj_pi_resolution_t)); + if(!comp->resolutions) { + /* TODO: throw an error */ + pi_destroy(pi, cp, tileno); + return NULL; + } + + tcx0 = int_ceildiv(pi->tx0, comp->dx); + tcy0 = int_ceildiv(pi->ty0, comp->dy); + tcx1 = int_ceildiv(pi->tx1, comp->dx); + tcy1 = int_ceildiv(pi->ty1, comp->dy); + if (comp->numresolutions > maxres) { + maxres = comp->numresolutions; + } + + for (resno = 0; resno < comp->numresolutions; resno++) { + int levelno; + int rx0, ry0, rx1, ry1; + int px0, py0, px1, py1; + opj_pi_resolution_t *res = &comp->resolutions[resno]; + if (tccp->csty & J2K_CCP_CSTY_PRT) { + res->pdx = tccp->prcw[resno]; + res->pdy = tccp->prch[resno]; + } else { + res->pdx = 15; + res->pdy = 15; + } + levelno = comp->numresolutions - 1 - resno; + rx0 = int_ceildivpow2(tcx0, levelno); + ry0 = int_ceildivpow2(tcy0, levelno); + rx1 = int_ceildivpow2(tcx1, levelno); + ry1 = int_ceildivpow2(tcy1, levelno); + px0 = int_floordivpow2(rx0, res->pdx) << res->pdx; + py0 = int_floordivpow2(ry0, res->pdy) << res->pdy; + px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx; + py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy; + res->pw = (rx0==rx1)?0:((px1 - px0) >> res->pdx); + res->ph = (ry0==ry1)?0:((py1 - py0) >> res->pdy); + + if (res->pw*res->ph > maxprec) { + maxprec = res->pw*res->ph; + } + + } + } + + tccp = &tcp->tccps[0]; + pi[pino].step_p = 1; + pi[pino].step_c = maxprec * pi[pino].step_p; + pi[pino].step_r = image->numcomps * pi[pino].step_c; + pi[pino].step_l = maxres * pi[pino].step_r; + + if (pino == 0) { + pi[pino].include = (short int*) opj_calloc(image->numcomps * maxres * tcp->numlayers * maxprec, sizeof(short int)); + if(!pi[pino].include) { + /* TODO: throw an error */ + pi_destroy(pi, cp, tileno); + return NULL; + } + } + else { + pi[pino].include = pi[pino - 1].include; + } + + if (tcp->POC == 0) { + pi[pino].first = 1; + pi[pino].poc.resno0 = 0; + pi[pino].poc.compno0 = 0; + pi[pino].poc.layno1 = tcp->numlayers; + pi[pino].poc.resno1 = maxres; + pi[pino].poc.compno1 = image->numcomps; + pi[pino].poc.prg = tcp->prg; + } else { + pi[pino].first = 1; + pi[pino].poc.resno0 = tcp->pocs[pino].resno0; + pi[pino].poc.compno0 = tcp->pocs[pino].compno0; + pi[pino].poc.layno1 = tcp->pocs[pino].layno1; + pi[pino].poc.resno1 = tcp->pocs[pino].resno1; + pi[pino].poc.compno1 = tcp->pocs[pino].compno1; + pi[pino].poc.prg = tcp->pocs[pino].prg; + } + pi[pino].poc.layno0 = 0; + pi[pino].poc.precno0 = 0; + pi[pino].poc.precno1 = maxprec; + + } + + return pi; +} + + +opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp, int tileno, J2K_T2_MODE t2_mode){ + int p, q, pino; + int compno, resno; + int maxres = 0; + int maxprec = 0; + opj_pi_iterator_t *pi = NULL; + opj_tcp_t *tcp = NULL; + opj_tccp_t *tccp = NULL; + + tcp = &cp->tcps[tileno]; + + pi = (opj_pi_iterator_t*) opj_calloc((tcp->numpocs + 1), sizeof(opj_pi_iterator_t)); + if(!pi) { return NULL;} + pi->tp_on = cp->tp_on; + + for(pino = 0;pino < tcp->numpocs+1 ; pino ++){ + p = tileno % cp->tw; + q = tileno / cp->tw; + + pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, image->x0); + pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, image->y0); + pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1); + pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1); + pi[pino].numcomps = image->numcomps; + + pi[pino].comps = (opj_pi_comp_t*) opj_calloc(image->numcomps, sizeof(opj_pi_comp_t)); + if(!pi[pino].comps) { + pi_destroy(pi, cp, tileno); + return NULL; + } + + for (compno = 0; compno < pi[pino].numcomps; compno++) { + int tcx0, tcy0, tcx1, tcy1; + opj_pi_comp_t *comp = &pi[pino].comps[compno]; + tccp = &tcp->tccps[compno]; + comp->dx = image->comps[compno].dx; + comp->dy = image->comps[compno].dy; + comp->numresolutions = tccp->numresolutions; + + comp->resolutions = (opj_pi_resolution_t*) opj_malloc(comp->numresolutions * sizeof(opj_pi_resolution_t)); + if(!comp->resolutions) { + pi_destroy(pi, cp, tileno); + return NULL; + } + + tcx0 = int_ceildiv(pi[pino].tx0, comp->dx); + tcy0 = int_ceildiv(pi[pino].ty0, comp->dy); + tcx1 = int_ceildiv(pi[pino].tx1, comp->dx); + tcy1 = int_ceildiv(pi[pino].ty1, comp->dy); + if (comp->numresolutions > maxres) { + maxres = comp->numresolutions; + } + + for (resno = 0; resno < comp->numresolutions; resno++) { + int levelno; + int rx0, ry0, rx1, ry1; + int px0, py0, px1, py1; + opj_pi_resolution_t *res = &comp->resolutions[resno]; + if (tccp->csty & J2K_CCP_CSTY_PRT) { + res->pdx = tccp->prcw[resno]; + res->pdy = tccp->prch[resno]; + } else { + res->pdx = 15; + res->pdy = 15; + } + levelno = comp->numresolutions - 1 - resno; + rx0 = int_ceildivpow2(tcx0, levelno); + ry0 = int_ceildivpow2(tcy0, levelno); + rx1 = int_ceildivpow2(tcx1, levelno); + ry1 = int_ceildivpow2(tcy1, levelno); + px0 = int_floordivpow2(rx0, res->pdx) << res->pdx; + py0 = int_floordivpow2(ry0, res->pdy) << res->pdy; + px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx; + py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy; + res->pw = (rx0==rx1)?0:((px1 - px0) >> res->pdx); + res->ph = (ry0==ry1)?0:((py1 - py0) >> res->pdy); + + if (res->pw*res->ph > maxprec) { + maxprec = res->pw * res->ph; + } + } + } + + tccp = &tcp->tccps[0]; + pi[pino].step_p = 1; + pi[pino].step_c = maxprec * pi[pino].step_p; + pi[pino].step_r = image->numcomps * pi[pino].step_c; + pi[pino].step_l = maxres * pi[pino].step_r; + + for (compno = 0; compno < pi->numcomps; compno++) { + opj_pi_comp_t *comp = &pi->comps[compno]; + for (resno = 0; resno < comp->numresolutions; resno++) { + int dx, dy; + opj_pi_resolution_t *res = &comp->resolutions[resno]; + dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); + dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); + pi[pino].dx = !pi->dx ? dx : int_min(pi->dx, dx); + pi[pino].dy = !pi->dy ? dy : int_min(pi->dy, dy); + } + } + + if (pino == 0) { + pi[pino].include = (short int*) opj_calloc(tcp->numlayers * pi[pino].step_l, sizeof(short int)); + if(!pi[pino].include) { + pi_destroy(pi, cp, tileno); + return NULL; + } + } + else { + pi[pino].include = pi[pino - 1].include; + } + + /* Generation of boundaries for each prog flag*/ + if(tcp->POC && ( cp->cinema || ((!cp->cinema) && (t2_mode == FINAL_PASS)))){ + tcp->pocs[pino].compS= tcp->pocs[pino].compno0; + tcp->pocs[pino].compE= tcp->pocs[pino].compno1; + tcp->pocs[pino].resS = tcp->pocs[pino].resno0; + tcp->pocs[pino].resE = tcp->pocs[pino].resno1; + tcp->pocs[pino].layE = tcp->pocs[pino].layno1; + tcp->pocs[pino].prg = tcp->pocs[pino].prg1; + if (pino > 0) + tcp->pocs[pino].layS = (tcp->pocs[pino].layE > tcp->pocs[pino - 1].layE) ? tcp->pocs[pino - 1].layE : 0; + }else { + tcp->pocs[pino].compS= 0; + tcp->pocs[pino].compE= image->numcomps; + tcp->pocs[pino].resS = 0; + tcp->pocs[pino].resE = maxres; + tcp->pocs[pino].layS = 0; + tcp->pocs[pino].layE = tcp->numlayers; + tcp->pocs[pino].prg = tcp->prg; + } + tcp->pocs[pino].prcS = 0; + tcp->pocs[pino].prcE = maxprec;; + tcp->pocs[pino].txS = pi[pino].tx0; + tcp->pocs[pino].txE = pi[pino].tx1; + tcp->pocs[pino].tyS = pi[pino].ty0; + tcp->pocs[pino].tyE = pi[pino].ty1; + tcp->pocs[pino].dx = pi[pino].dx; + tcp->pocs[pino].dy = pi[pino].dy; + } + return pi; + } + + + +void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno) { + int compno, pino; + opj_tcp_t *tcp = &cp->tcps[tileno]; + if(pi) { + for (pino = 0; pino < tcp->numpocs + 1; pino++) { + if(pi[pino].comps) { + for (compno = 0; compno < pi->numcomps; compno++) { + opj_pi_comp_t *comp = &pi[pino].comps[compno]; + if(comp->resolutions) { + opj_free(comp->resolutions); + } + } + opj_free(pi[pino].comps); + } + } + if(pi->include) { + opj_free(pi->include); + } + opj_free(pi); + } +} + +bool pi_next(opj_pi_iterator_t * pi) { + switch (pi->poc.prg) { + case LRCP: + return pi_next_lrcp(pi); + case RLCP: + return pi_next_rlcp(pi); + case RPCL: + return pi_next_rpcl(pi); + case PCRL: + return pi_next_pcrl(pi); + case CPRL: + return pi_next_cprl(pi); + case PROG_UNKNOWN: + return false; + } + + return false; +} + +bool pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp){ + char prog[4]; + int i; + int incr_top=1,resetX=0; + opj_tcp_t *tcps =&cp->tcps[tileno]; + opj_poc_t *tcp= &tcps->pocs[pino]; + + pi[pino].first = 1; + pi[pino].poc.prg = tcp->prg; + + switch(tcp->prg){ + case CPRL: strncpy(prog, "CPRL",4); + break; + case LRCP: strncpy(prog, "LRCP",4); + break; + case PCRL: strncpy(prog, "PCRL",4); + break; + case RLCP: strncpy(prog, "RLCP",4); + break; + case RPCL: strncpy(prog, "RPCL",4); + break; + case PROG_UNKNOWN: + return true; + } + + if(!(cp->tp_on && ((!cp->cinema && (t2_mode == FINAL_PASS)) || cp->cinema))){ + pi[pino].poc.resno0 = tcp->resS; + pi[pino].poc.resno1 = tcp->resE; + pi[pino].poc.compno0 = tcp->compS; + pi[pino].poc.compno1 = tcp->compE; + pi[pino].poc.layno0 = tcp->layS; + pi[pino].poc.layno1 = tcp->layE; + pi[pino].poc.precno0 = tcp->prcS; + pi[pino].poc.precno1 = tcp->prcE; + pi[pino].poc.tx0 = tcp->txS; + pi[pino].poc.ty0 = tcp->tyS; + pi[pino].poc.tx1 = tcp->txE; + pi[pino].poc.ty1 = tcp->tyE; + }else { + if( tpnum < cur_totnum_tp){ + for(i=3;i>=0;i--){ + switch(prog[i]){ + case 'C': + if (i > tppos){ + pi[pino].poc.compno0 = tcp->compS; + pi[pino].poc.compno1 = tcp->compE; + }else{ + if (tpnum == 0){ + tcp->comp_t = tcp->compS; + pi[pino].poc.compno0 = tcp->comp_t; + pi[pino].poc.compno1 = tcp->comp_t+1; + tcp->comp_t+=1; + }else{ + if (incr_top == 1){ + if(tcp->comp_t ==tcp->compE){ + tcp->comp_t = tcp->compS; + pi[pino].poc.compno0 = tcp->comp_t; + pi[pino].poc.compno1 = tcp->comp_t+1; + tcp->comp_t+=1; + incr_top=1; + }else{ + pi[pino].poc.compno0 = tcp->comp_t; + pi[pino].poc.compno1 = tcp->comp_t+1; + tcp->comp_t+=1; + incr_top=0; + } + }else{ + pi[pino].poc.compno0 = tcp->comp_t-1; + pi[pino].poc.compno1 = tcp->comp_t; + } + } + } + break; + + case 'R': + if (i > tppos){ + pi[pino].poc.resno0 = tcp->resS; + pi[pino].poc.resno1 = tcp->resE; + }else{ + if (tpnum == 0){ + tcp->res_t = tcp->resS; + pi[pino].poc.resno0 = tcp->res_t; + pi[pino].poc.resno1 = tcp->res_t+1; + tcp->res_t+=1; + }else{ + if (incr_top == 1){ + if(tcp->res_t==tcp->resE){ + tcp->res_t = tcp->resS; + pi[pino].poc.resno0 = tcp->res_t; + pi[pino].poc.resno1 = tcp->res_t+1; + tcp->res_t+=1; + incr_top=1; + }else{ + pi[pino].poc.resno0 = tcp->res_t; + pi[pino].poc.resno1 = tcp->res_t+1; + tcp->res_t+=1; + incr_top=0; + } + }else{ + pi[pino].poc.resno0 = tcp->res_t - 1; + pi[pino].poc.resno1 = tcp->res_t; + } + } + } + break; + + case 'L': + if (i > tppos){ + pi[pino].poc.layno0 = tcp->layS; + pi[pino].poc.layno1 = tcp->layE; + }else{ + if (tpnum == 0){ + tcp->lay_t = tcp->layS; + pi[pino].poc.layno0 = tcp->lay_t; + pi[pino].poc.layno1 = tcp->lay_t+1; + tcp->lay_t+=1; + }else{ + if (incr_top == 1){ + if(tcp->lay_t == tcp->layE){ + tcp->lay_t = tcp->layS; + pi[pino].poc.layno0 = tcp->lay_t; + pi[pino].poc.layno1 = tcp->lay_t+1; + tcp->lay_t+=1; + incr_top=1; + }else{ + pi[pino].poc.layno0 = tcp->lay_t; + pi[pino].poc.layno1 = tcp->lay_t+1; + tcp->lay_t+=1; + incr_top=0; + } + }else{ + pi[pino].poc.layno0 = tcp->lay_t - 1; + pi[pino].poc.layno1 = tcp->lay_t; + } + } + } + break; + + case 'P': + switch(tcp->prg){ + case LRCP: + case RLCP: + if (i > tppos){ + pi[pino].poc.precno0 = tcp->prcS; + pi[pino].poc.precno1 = tcp->prcE; + }else{ + if (tpnum == 0){ + tcp->prc_t = tcp->prcS; + pi[pino].poc.precno0 = tcp->prc_t; + pi[pino].poc.precno1 = tcp->prc_t+1; + tcp->prc_t+=1; + }else{ + if (incr_top == 1){ + if(tcp->prc_t == tcp->prcE){ + tcp->prc_t = tcp->prcS; + pi[pino].poc.precno0 = tcp->prc_t; + pi[pino].poc.precno1 = tcp->prc_t+1; + tcp->prc_t+=1; + incr_top=1; + }else{ + pi[pino].poc.precno0 = tcp->prc_t; + pi[pino].poc.precno1 = tcp->prc_t+1; + tcp->prc_t+=1; + incr_top=0; + } + }else{ + pi[pino].poc.precno0 = tcp->prc_t - 1; + pi[pino].poc.precno1 = tcp->prc_t; + } + } + } + break; + default: + if (i > tppos){ + pi[pino].poc.tx0 = tcp->txS; + pi[pino].poc.ty0 = tcp->tyS; + pi[pino].poc.tx1 = tcp->txE; + pi[pino].poc.ty1 = tcp->tyE; + }else{ + if (tpnum == 0){ + tcp->tx0_t = tcp->txS; + tcp->ty0_t = tcp->tyS; + pi[pino].poc.tx0 = tcp->tx0_t; + pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx); + pi[pino].poc.ty0 = tcp->ty0_t; + pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy); + tcp->tx0_t = pi[pino].poc.tx1; + tcp->ty0_t = pi[pino].poc.ty1; + }else{ + if (incr_top == 1){ + if(tcp->tx0_t >= tcp->txE){ + if(tcp->ty0_t >= tcp->tyE){ + tcp->ty0_t = tcp->tyS; + pi[pino].poc.ty0 = tcp->ty0_t; + pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy); + tcp->ty0_t = pi[pino].poc.ty1; + incr_top=1;resetX=1; + }else{ + pi[pino].poc.ty0 = tcp->ty0_t; + pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy); + tcp->ty0_t = pi[pino].poc.ty1; + incr_top=0;resetX=1; + } + if(resetX==1){ + tcp->tx0_t = tcp->txS; + pi[pino].poc.tx0 = tcp->tx0_t; + pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx- (tcp->tx0_t % tcp->dx); + tcp->tx0_t = pi[pino].poc.tx1; + } + }else{ + pi[pino].poc.tx0 = tcp->tx0_t; + pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx- (tcp->tx0_t % tcp->dx); + tcp->tx0_t = pi[pino].poc.tx1; + pi[pino].poc.ty0 = tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy); + pi[pino].poc.ty1 = tcp->ty0_t ; + incr_top=0; + } + }else{ + pi[pino].poc.tx0 = tcp->tx0_t - tcp->dx - (tcp->tx0_t % tcp->dx); + pi[pino].poc.tx1 = tcp->tx0_t ; + pi[pino].poc.ty0 = tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy); + pi[pino].poc.ty1 = tcp->ty0_t ; + } + } + } + break; + } + break; + } + } + } + } + return false; +} + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/pi.h b/contrib/menuetlibc/openjpeg/libopenjpeg/pi.h new file mode 100644 index 0000000000..80febc5c65 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/pi.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __PI_H +#define __PI_H +/** +@file pi.h +@brief Implementation of a packet iterator (PI) + +The functions in PI.C have for goal to realize a packet iterator that permits to get the next +packet following the progression order and change of it. The functions in PI.C are used +by some function in T2.C. +*/ + +/** @defgroup PI PI - Implementation of a packet iterator */ +/*@{*/ + +/** +FIXME: documentation +*/ +typedef struct opj_pi_resolution { + int pdx, pdy; + int pw, ph; +} opj_pi_resolution_t; + +/** +FIXME: documentation +*/ +typedef struct opj_pi_comp { + int dx, dy; + /** number of resolution levels */ + int numresolutions; + opj_pi_resolution_t *resolutions; +} opj_pi_comp_t; + +/** +Packet iterator +*/ +typedef struct opj_pi_iterator { + /** Enabling Tile part generation*/ + char tp_on; + /** precise if the packet has been already used (usefull for progression order change) */ + short int *include; + /** layer step used to localize the packet in the include vector */ + int step_l; + /** resolution step used to localize the packet in the include vector */ + int step_r; + /** component step used to localize the packet in the include vector */ + int step_c; + /** precinct step used to localize the packet in the include vector */ + int step_p; + /** component that identify the packet */ + int compno; + /** resolution that identify the packet */ + int resno; + /** precinct that identify the packet */ + int precno; + /** layer that identify the packet */ + int layno; + /** 0 if the first packet */ + int first; + /** progression order change information */ + opj_poc_t poc; + /** number of components in the image */ + int numcomps; + /** Components*/ + opj_pi_comp_t *comps; + int tx0, ty0, tx1, ty1; + int x, y, dx, dy; +} opj_pi_iterator_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a packet iterator for Encoder +@param image Raw image for which the packets will be listed +@param cp Coding parameters +@param tileno Number that identifies the tile for which to list the packets +@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass +@return Returns a packet iterator that points to the first packet of the tile +@see pi_destroy +*/ +opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp, int tileno,J2K_T2_MODE t2_mode); +/** +Modify the packet iterator for enabling tile part generation +@param pi Handle to the packet iterator generated in pi_initialise_encode +@param cp Coding parameters +@param tileno Number that identifies the tile for which to list the packets +@param pino Iterator index for pi +@param tpnum Tile part number of the current tile +@param tppos The position of the tile part flag in the progression order +@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass +@param cur_totnum_tp The total number of tile parts in the current tile +@return Returns true if an error is detected +*/ +bool pi_create_encode(opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp); +/** +Create a packet iterator for Decoder +@param image Raw image for which the packets will be listed +@param cp Coding parameters +@param tileno Number that identifies the tile for which to list the packets +@return Returns a packet iterator that points to the first packet of the tile +@see pi_destroy +*/ +opj_pi_iterator_t *pi_create_decode(opj_image_t * image, opj_cp_t * cp, int tileno); + +/** +Destroy a packet iterator +@param pi Previously created packet iterator +@param cp Coding parameters +@param tileno Number that identifies the tile for which the packets were listed +@see pi_create +*/ +void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno); + +/** +Modify the packet iterator to point to the next packet +@param pi Packet iterator to modify +@return Returns false if pi pointed to the last packet or else returns true +*/ +bool pi_next(opj_pi_iterator_t * pi); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __PI_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/raw.c b/contrib/menuetlibc/openjpeg/libopenjpeg/raw.c new file mode 100644 index 0000000000..3d231bfdc6 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/raw.c @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/* +========================================================== + local functions +========================================================== +*/ + + +/* +========================================================== + RAW encoding interface +========================================================== +*/ + +opj_raw_t* raw_create(void) { + opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t)); + return raw; +} + +void raw_destroy(opj_raw_t *raw) { + if(raw) { + opj_free(raw); + } +} + +int raw_numbytes(opj_raw_t *raw) { + return raw->bp - raw->start; +} + +void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len) { + raw->start = bp; + raw->lenmax = len; + raw->len = 0; + raw->c = 0; + raw->ct = 0; +} + +int raw_decode(opj_raw_t *raw) { + int d; + if (raw->ct == 0) { + raw->ct = 8; + if (raw->len == raw->lenmax) { + raw->c = 0xff; + } else { + if (raw->c == 0xff) { + raw->ct = 7; + } + raw->c = *(raw->start + raw->len); + raw->len++; + } + } + raw->ct--; + d = (raw->c >> raw->ct) & 0x01; + + return d; +} + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/raw.h b/contrib/menuetlibc/openjpeg/libopenjpeg/raw.h new file mode 100644 index 0000000000..3c4b372f3f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/raw.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __RAW_H +#define __RAW_H +/** +@file raw.h +@brief Implementation of operations for raw encoding (RAW) + +The functions in RAW.C have for goal to realize the operation of raw encoding linked +with the corresponding mode switch. +*/ + +/** @defgroup RAW RAW - Implementation of operations for raw encoding */ +/*@{*/ + +/** +RAW encoding operations +*/ +typedef struct opj_raw { + /** temporary buffer where bits are coded or decoded */ + unsigned char c; + /** number of bits already read or free to write */ + unsigned int ct; + /** maximum length to decode */ + unsigned int lenmax; + /** length decoded */ + unsigned int len; + /** pointer to the current position in the buffer */ + unsigned char *bp; + /** pointer to the start of the buffer */ + unsigned char *start; + /** pointer to the end of the buffer */ + unsigned char *end; +} opj_raw_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a new RAW handle +@return Returns a new RAW handle if successful, returns NULL otherwise +*/ +opj_raw_t* raw_create(void); +/** +Destroy a previously created RAW handle +@param raw RAW handle to destroy +*/ +void raw_destroy(opj_raw_t *raw); +/** +Return the number of bytes written/read since initialisation +@param raw RAW handle to destroy +@return Returns the number of bytes already encoded +*/ +int raw_numbytes(opj_raw_t *raw); +/** +Initialize the decoder +@param raw RAW handle +@param bp Pointer to the start of the buffer from which the bytes will be read +@param len Length of the input buffer +*/ +void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len); +/** +Decode a symbol using raw-decoder. Cfr p.506 TAUBMAN +@param raw RAW handle +@return Returns the decoded symbol (0 or 1) +*/ +int raw_decode(opj_raw_t *raw); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __RAW_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/t1.c b/contrib/menuetlibc/openjpeg/libopenjpeg/t1.c new file mode 100644 index 0000000000..493007475c --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/t1.c @@ -0,0 +1,1581 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2007, Callum Lerwick + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" +#include "t1_luts.h" + +/** @defgroup T1 T1 - Implementation of the tier-1 coding */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +static INLINE char t1_getctxno_zc(int f, int orient); +static char t1_getctxno_sc(int f); +static INLINE int t1_getctxno_mag(int f); +static char t1_getspb(int f); +static short t1_getnmsedec_sig(int x, int bitpos); +static short t1_getnmsedec_ref(int x, int bitpos); +static void t1_updateflags(flag_t *flagsp, int s, int stride); +/** +Encode significant pass +*/ +static void t1_enc_sigpass_step( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int bpno, + int one, + int *nmsedec, + char type, + int vsc); +/** +Decode significant pass +*/ +static INLINE void t1_dec_sigpass_step_raw( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf, + int vsc); +static INLINE void t1_dec_sigpass_step_mqc( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf); +static INLINE void t1_dec_sigpass_step_mqc_vsc( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf, + int vsc); +/** +Encode significant pass +*/ +static void t1_enc_sigpass( + opj_t1_t *t1, + int bpno, + int orient, + int *nmsedec, + char type, + int cblksty); +/** +Decode significant pass +*/ +static void t1_dec_sigpass_raw( + opj_t1_t *t1, + int bpno, + int orient, + int cblksty); +static void t1_dec_sigpass_mqc( + opj_t1_t *t1, + int bpno, + int orient); +static void t1_dec_sigpass_mqc_vsc( + opj_t1_t *t1, + int bpno, + int orient); +/** +Encode refinement pass +*/ +static void t1_enc_refpass_step( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int bpno, + int one, + int *nmsedec, + char type, + int vsc); +/** +Decode refinement pass +*/ +static void INLINE t1_dec_refpass_step_raw( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int poshalf, + int neghalf, + int vsc); +static void INLINE t1_dec_refpass_step_mqc( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int poshalf, + int neghalf); +static void INLINE t1_dec_refpass_step_mqc_vsc( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int poshalf, + int neghalf, + int vsc); + +/** +Encode refinement pass +*/ +static void t1_enc_refpass( + opj_t1_t *t1, + int bpno, + int *nmsedec, + char type, + int cblksty); +/** +Decode refinement pass +*/ +static void t1_dec_refpass_raw( + opj_t1_t *t1, + int bpno, + int cblksty); +static void t1_dec_refpass_mqc( + opj_t1_t *t1, + int bpno); +static void t1_dec_refpass_mqc_vsc( + opj_t1_t *t1, + int bpno); +/** +Encode clean-up pass +*/ +static void t1_enc_clnpass_step( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int bpno, + int one, + int *nmsedec, + int partial, + int vsc); +/** +Decode clean-up pass +*/ +static void t1_dec_clnpass_step_partial( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf); +static void t1_dec_clnpass_step( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf); +static void t1_dec_clnpass_step_vsc( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf, + int partial, + int vsc); +/** +Encode clean-up pass +*/ +static void t1_enc_clnpass( + opj_t1_t *t1, + int bpno, + int orient, + int *nmsedec, + int cblksty); +/** +Decode clean-up pass +*/ +static void t1_dec_clnpass( + opj_t1_t *t1, + int bpno, + int orient, + int cblksty); +static double t1_getwmsedec( + int nmsedec, + int compno, + int level, + int orient, + int bpno, + int qmfbid, + double stepsize, + int numcomps, + int mct); +/** +Encode 1 code-block +@param t1 T1 handle +@param cblk Code-block coding parameters +@param orient +@param compno Component number +@param level +@param qmfbid +@param stepsize +@param cblksty Code-block style +@param numcomps +@param mct +@param tile +*/ +static void t1_encode_cblk( + opj_t1_t *t1, + opj_tcd_cblk_enc_t* cblk, + int orient, + int compno, + int level, + int qmfbid, + double stepsize, + int cblksty, + int numcomps, + int mct, + opj_tcd_tile_t * tile); +/** +Decode 1 code-block +@param t1 T1 handle +@param cblk Code-block coding parameters +@param orient +@param roishift Region of interest shifting value +@param cblksty Code-block style +*/ +static void t1_decode_cblk( + opj_t1_t *t1, + opj_tcd_cblk_dec_t* cblk, + int orient, + int roishift, + int cblksty); + +/*@}*/ + +/*@}*/ + +/* ----------------------------------------------------------------------- */ + +static char t1_getctxno_zc(int f, int orient) { + return lut_ctxno_zc[(orient << 8) | (f & T1_SIG_OTH)]; +} + +static char t1_getctxno_sc(int f) { + return lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4]; +} + +static int t1_getctxno_mag(int f) { + int tmp1 = (f & T1_SIG_OTH) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG; + int tmp2 = (f & T1_REFINE) ? T1_CTXNO_MAG + 2 : tmp1; + return (tmp2); +} + +static char t1_getspb(int f) { + return lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4]; +} + +static short t1_getnmsedec_sig(int x, int bitpos) { + if (bitpos > T1_NMSEDEC_FRACBITS) { + return lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)]; + } + + return lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)]; +} + +static short t1_getnmsedec_ref(int x, int bitpos) { + if (bitpos > T1_NMSEDEC_FRACBITS) { + return lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)]; + } + + return lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)]; +} + +static void t1_updateflags(flag_t *flagsp, int s, int stride) { + flag_t *np = flagsp - stride; + flag_t *sp = flagsp + stride; + + static const flag_t mod[] = { + T1_SIG_S, T1_SIG_S|T1_SGN_S, + T1_SIG_E, T1_SIG_E|T1_SGN_E, + T1_SIG_W, T1_SIG_W|T1_SGN_W, + T1_SIG_N, T1_SIG_N|T1_SGN_N + }; + + np[-1] |= T1_SIG_SE; + np[0] |= mod[s]; + np[1] |= T1_SIG_SW; + + flagsp[-1] |= mod[s+2]; + flagsp[0] |= T1_SIG; + flagsp[1] |= mod[s+4]; + + sp[-1] |= T1_SIG_NE; + sp[0] |= mod[s+6]; + sp[1] |= T1_SIG_NW; +} + +static void t1_enc_sigpass_step( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int bpno, + int one, + int *nmsedec, + char type, + int vsc) +{ + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); + if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) { + v = int_abs(*datap) & one ? 1 : 0; + mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); /* ESSAI */ + if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ + mqc_bypass_enc(mqc, v); + } else { + mqc_encode(mqc, v); + } + if (v) { + v = *datap < 0 ? 1 : 0; + *nmsedec += t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS); + mqc_setcurctx(mqc, t1_getctxno_sc(flag)); /* ESSAI */ + if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ + mqc_bypass_enc(mqc, v); + } else { + mqc_encode(mqc, v ^ t1_getspb(flag)); + } + t1_updateflags(flagsp, v, t1->flags_stride); + } + *flagsp |= T1_VISIT; + } +} + +static INLINE void t1_dec_sigpass_step_raw( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf, + int vsc) +{ + int v, flag; + + opj_raw_t *raw = t1->raw; /* RAW component */ + + flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); + if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) { + if (raw_decode(raw)) { + v = raw_decode(raw); /* ESSAI */ + *datap = v ? -oneplushalf : oneplushalf; + t1_updateflags(flagsp, v, t1->flags_stride); + } + *flagsp |= T1_VISIT; + } +} /* VSC and BYPASS by Antonin */ + +static INLINE void t1_dec_sigpass_step_mqc( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf) +{ + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = *flagsp; + if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) { + mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); + if (mqc_decode(mqc)) { + mqc_setcurctx(mqc, t1_getctxno_sc(flag)); + v = mqc_decode(mqc) ^ t1_getspb(flag); + *datap = v ? -oneplushalf : oneplushalf; + t1_updateflags(flagsp, v, t1->flags_stride); + } + *flagsp |= T1_VISIT; + } +} /* VSC and BYPASS by Antonin */ + +static INLINE void t1_dec_sigpass_step_mqc_vsc( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf, + int vsc) +{ + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); + if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) { + mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); + if (mqc_decode(mqc)) { + mqc_setcurctx(mqc, t1_getctxno_sc(flag)); + v = mqc_decode(mqc) ^ t1_getspb(flag); + *datap = v ? -oneplushalf : oneplushalf; + t1_updateflags(flagsp, v, t1->flags_stride); + } + *flagsp |= T1_VISIT; + } +} /* VSC and BYPASS by Antonin */ + +static void t1_enc_sigpass( + opj_t1_t *t1, + int bpno, + int orient, + int *nmsedec, + char type, + int cblksty) +{ + int i, j, k, one, vsc; + *nmsedec = 0; + one = 1 << (bpno + T1_NMSEDEC_FRACBITS); + for (k = 0; k < t1->h; k += 4) { + for (i = 0; i < t1->w; ++i) { + for (j = k; j < k + 4 && j < t1->h; ++j) { + vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0; + t1_enc_sigpass_step( + t1, + &t1->flags[((j+1) * t1->flags_stride) + i + 1], + &t1->data[(j * t1->w) + i], + orient, + bpno, + one, + nmsedec, + type, + vsc); + } + } + } +} + +static void t1_dec_sigpass_raw( + opj_t1_t *t1, + int bpno, + int orient, + int cblksty) +{ + int i, j, k, one, half, oneplushalf, vsc; + one = 1 << bpno; + half = one >> 1; + oneplushalf = one | half; + for (k = 0; k < t1->h; k += 4) { + for (i = 0; i < t1->w; ++i) { + for (j = k; j < k + 4 && j < t1->h; ++j) { + vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0; + t1_dec_sigpass_step_raw( + t1, + &t1->flags[((j+1) * t1->flags_stride) + i + 1], + &t1->data[(j * t1->w) + i], + orient, + oneplushalf, + vsc); + } + } + } +} /* VSC and BYPASS by Antonin */ + +static void t1_dec_sigpass_mqc( + opj_t1_t *t1, + int bpno, + int orient) +{ + int i, j, k, one, half, oneplushalf; + int *data1 = t1->data; + flag_t *flags1 = &t1->flags[1]; + one = 1 << bpno; + half = one >> 1; + oneplushalf = one | half; + for (k = 0; k < (t1->h & ~3); k += 4) { + for (i = 0; i < t1->w; ++i) { + int *data2 = data1 + i; + flag_t *flags2 = flags1 + i; + flags2 += t1->flags_stride; + t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf); + data2 += t1->w; + flags2 += t1->flags_stride; + t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf); + data2 += t1->w; + flags2 += t1->flags_stride; + t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf); + data2 += t1->w; + flags2 += t1->flags_stride; + t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf); + data2 += t1->w; + } + data1 += t1->w << 2; + flags1 += t1->flags_stride << 2; + } + for (i = 0; i < t1->w; ++i) { + int *data2 = data1 + i; + flag_t *flags2 = flags1 + i; + for (j = k; j < t1->h; ++j) { + flags2 += t1->flags_stride; + t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf); + data2 += t1->w; + } + } +} /* VSC and BYPASS by Antonin */ + +static void t1_dec_sigpass_mqc_vsc( + opj_t1_t *t1, + int bpno, + int orient) +{ + int i, j, k, one, half, oneplushalf, vsc; + one = 1 << bpno; + half = one >> 1; + oneplushalf = one | half; + for (k = 0; k < t1->h; k += 4) { + for (i = 0; i < t1->w; ++i) { + for (j = k; j < k + 4 && j < t1->h; ++j) { + vsc = (j == k + 3 || j == t1->h - 1) ? 1 : 0; + t1_dec_sigpass_step_mqc_vsc( + t1, + &t1->flags[((j+1) * t1->flags_stride) + i + 1], + &t1->data[(j * t1->w) + i], + orient, + oneplushalf, + vsc); + } + } + } +} /* VSC and BYPASS by Antonin */ + +static void t1_enc_refpass_step( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int bpno, + int one, + int *nmsedec, + char type, + int vsc) +{ + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); + if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) { + *nmsedec += t1_getnmsedec_ref(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS); + v = int_abs(*datap) & one ? 1 : 0; + mqc_setcurctx(mqc, t1_getctxno_mag(flag)); /* ESSAI */ + if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ + mqc_bypass_enc(mqc, v); + } else { + mqc_encode(mqc, v); + } + *flagsp |= T1_REFINE; + } +} + +static INLINE void t1_dec_refpass_step_raw( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int poshalf, + int neghalf, + int vsc) +{ + int v, t, flag; + + opj_raw_t *raw = t1->raw; /* RAW component */ + + flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); + if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) { + v = raw_decode(raw); + t = v ? poshalf : neghalf; + *datap += *datap < 0 ? -t : t; + *flagsp |= T1_REFINE; + } +} /* VSC and BYPASS by Antonin */ + +static INLINE void t1_dec_refpass_step_mqc( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int poshalf, + int neghalf) +{ + int v, t, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = *flagsp; + if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) { + mqc_setcurctx(mqc, t1_getctxno_mag(flag)); /* ESSAI */ + v = mqc_decode(mqc); + t = v ? poshalf : neghalf; + *datap += *datap < 0 ? -t : t; + *flagsp |= T1_REFINE; + } +} /* VSC and BYPASS by Antonin */ + +static INLINE void t1_dec_refpass_step_mqc_vsc( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int poshalf, + int neghalf, + int vsc) +{ + int v, t, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); + if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) { + mqc_setcurctx(mqc, t1_getctxno_mag(flag)); /* ESSAI */ + v = mqc_decode(mqc); + t = v ? poshalf : neghalf; + *datap += *datap < 0 ? -t : t; + *flagsp |= T1_REFINE; + } +} /* VSC and BYPASS by Antonin */ + +static void t1_enc_refpass( + opj_t1_t *t1, + int bpno, + int *nmsedec, + char type, + int cblksty) +{ + int i, j, k, one, vsc; + *nmsedec = 0; + one = 1 << (bpno + T1_NMSEDEC_FRACBITS); + for (k = 0; k < t1->h; k += 4) { + for (i = 0; i < t1->w; ++i) { + for (j = k; j < k + 4 && j < t1->h; ++j) { + vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0; + t1_enc_refpass_step( + t1, + &t1->flags[((j+1) * t1->flags_stride) + i + 1], + &t1->data[(j * t1->w) + i], + bpno, + one, + nmsedec, + type, + vsc); + } + } + } +} + +static void t1_dec_refpass_raw( + opj_t1_t *t1, + int bpno, + int cblksty) +{ + int i, j, k, one, poshalf, neghalf; + int vsc; + one = 1 << bpno; + poshalf = one >> 1; + neghalf = bpno > 0 ? -poshalf : -1; + for (k = 0; k < t1->h; k += 4) { + for (i = 0; i < t1->w; ++i) { + for (j = k; j < k + 4 && j < t1->h; ++j) { + vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0; + t1_dec_refpass_step_raw( + t1, + &t1->flags[((j+1) * t1->flags_stride) + i + 1], + &t1->data[(j * t1->w) + i], + poshalf, + neghalf, + vsc); + } + } + } +} /* VSC and BYPASS by Antonin */ + +static void t1_dec_refpass_mqc( + opj_t1_t *t1, + int bpno) +{ + int i, j, k, one, poshalf, neghalf; + int *data1 = t1->data; + flag_t *flags1 = &t1->flags[1]; + one = 1 << bpno; + poshalf = one >> 1; + neghalf = bpno > 0 ? -poshalf : -1; + for (k = 0; k < (t1->h & ~3); k += 4) { + for (i = 0; i < t1->w; ++i) { + int *data2 = data1 + i; + flag_t *flags2 = flags1 + i; + flags2 += t1->flags_stride; + t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf); + data2 += t1->w; + flags2 += t1->flags_stride; + t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf); + data2 += t1->w; + flags2 += t1->flags_stride; + t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf); + data2 += t1->w; + flags2 += t1->flags_stride; + t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf); + data2 += t1->w; + } + data1 += t1->w << 2; + flags1 += t1->flags_stride << 2; + } + for (i = 0; i < t1->w; ++i) { + int *data2 = data1 + i; + flag_t *flags2 = flags1 + i; + for (j = k; j < t1->h; ++j) { + flags2 += t1->flags_stride; + t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf); + data2 += t1->w; + } + } +} /* VSC and BYPASS by Antonin */ + +static void t1_dec_refpass_mqc_vsc( + opj_t1_t *t1, + int bpno) +{ + int i, j, k, one, poshalf, neghalf; + int vsc; + one = 1 << bpno; + poshalf = one >> 1; + neghalf = bpno > 0 ? -poshalf : -1; + for (k = 0; k < t1->h; k += 4) { + for (i = 0; i < t1->w; ++i) { + for (j = k; j < k + 4 && j < t1->h; ++j) { + vsc = ((j == k + 3 || j == t1->h - 1)) ? 1 : 0; + t1_dec_refpass_step_mqc_vsc( + t1, + &t1->flags[((j+1) * t1->flags_stride) + i + 1], + &t1->data[(j * t1->w) + i], + poshalf, + neghalf, + vsc); + } + } + } +} /* VSC and BYPASS by Antonin */ + +static void t1_enc_clnpass_step( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int bpno, + int one, + int *nmsedec, + int partial, + int vsc) +{ + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); + if (partial) { + goto LABEL_PARTIAL; + } + if (!(*flagsp & (T1_SIG | T1_VISIT))) { + mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); + v = int_abs(*datap) & one ? 1 : 0; + mqc_encode(mqc, v); + if (v) { +LABEL_PARTIAL: + *nmsedec += t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS); + mqc_setcurctx(mqc, t1_getctxno_sc(flag)); + v = *datap < 0 ? 1 : 0; + mqc_encode(mqc, v ^ t1_getspb(flag)); + t1_updateflags(flagsp, v, t1->flags_stride); + } + } + *flagsp &= ~T1_VISIT; +} + +static void t1_dec_clnpass_step_partial( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf) +{ + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = *flagsp; + mqc_setcurctx(mqc, t1_getctxno_sc(flag)); + v = mqc_decode(mqc) ^ t1_getspb(flag); + *datap = v ? -oneplushalf : oneplushalf; + t1_updateflags(flagsp, v, t1->flags_stride); + *flagsp &= ~T1_VISIT; +} /* VSC and BYPASS by Antonin */ + +static void t1_dec_clnpass_step( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf) +{ + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = *flagsp; + if (!(flag & (T1_SIG | T1_VISIT))) { + mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); + if (mqc_decode(mqc)) { + mqc_setcurctx(mqc, t1_getctxno_sc(flag)); + v = mqc_decode(mqc) ^ t1_getspb(flag); + *datap = v ? -oneplushalf : oneplushalf; + t1_updateflags(flagsp, v, t1->flags_stride); + } + } + *flagsp &= ~T1_VISIT; +} /* VSC and BYPASS by Antonin */ + +static void t1_dec_clnpass_step_vsc( + opj_t1_t *t1, + flag_t *flagsp, + int *datap, + int orient, + int oneplushalf, + int partial, + int vsc) +{ + int v, flag; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); + if (partial) { + goto LABEL_PARTIAL; + } + if (!(flag & (T1_SIG | T1_VISIT))) { + mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); + if (mqc_decode(mqc)) { +LABEL_PARTIAL: + mqc_setcurctx(mqc, t1_getctxno_sc(flag)); + v = mqc_decode(mqc) ^ t1_getspb(flag); + *datap = v ? -oneplushalf : oneplushalf; + t1_updateflags(flagsp, v, t1->flags_stride); + } + } + *flagsp &= ~T1_VISIT; +} + +static void t1_enc_clnpass( + opj_t1_t *t1, + int bpno, + int orient, + int *nmsedec, + int cblksty) +{ + int i, j, k, one, agg, runlen, vsc; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + *nmsedec = 0; + one = 1 << (bpno + T1_NMSEDEC_FRACBITS); + for (k = 0; k < t1->h; k += 4) { + for (i = 0; i < t1->w; ++i) { + if (k + 3 < t1->h) { + if (cblksty & J2K_CCP_CBLKSTY_VSC) { + agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || (MACRO_t1_flags(1 + k + 3,1 + i) + & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH)); + } else { + agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || MACRO_t1_flags(1 + k + 3,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)); + } + } else { + agg = 0; + } + if (agg) { + for (runlen = 0; runlen < 4; ++runlen) { + if (int_abs(t1->data[((k + runlen)*t1->w) + i]) & one) + break; + } + mqc_setcurctx(mqc, T1_CTXNO_AGG); + mqc_encode(mqc, runlen != 4); + if (runlen == 4) { + continue; + } + mqc_setcurctx(mqc, T1_CTXNO_UNI); + mqc_encode(mqc, runlen >> 1); + mqc_encode(mqc, runlen & 1); + } else { + runlen = 0; + } + for (j = k + runlen; j < k + 4 && j < t1->h; ++j) { + vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0; + t1_enc_clnpass_step( + t1, + &t1->flags[((j+1) * t1->flags_stride) + i + 1], + &t1->data[(j * t1->w) + i], + orient, + bpno, + one, + nmsedec, + agg && (j == k + runlen), + vsc); + } + } + } +} + +static void t1_dec_clnpass( + opj_t1_t *t1, + int bpno, + int orient, + int cblksty) +{ + int i, j, k, one, half, oneplushalf, agg, runlen, vsc; + int segsym = cblksty & J2K_CCP_CBLKSTY_SEGSYM; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + one = 1 << bpno; + half = one >> 1; + oneplushalf = one | half; + if (cblksty & J2K_CCP_CBLKSTY_VSC) { + for (k = 0; k < t1->h; k += 4) { + for (i = 0; i < t1->w; ++i) { + if (k + 3 < t1->h) { + agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || (MACRO_t1_flags(1 + k + 3,1 + i) + & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH)); + } else { + agg = 0; + } + if (agg) { + mqc_setcurctx(mqc, T1_CTXNO_AGG); + if (!mqc_decode(mqc)) { + continue; + } + mqc_setcurctx(mqc, T1_CTXNO_UNI); + runlen = mqc_decode(mqc); + runlen = (runlen << 1) | mqc_decode(mqc); + } else { + runlen = 0; + } + for (j = k + runlen; j < k + 4 && j < t1->h; ++j) { + vsc = (j == k + 3 || j == t1->h - 1) ? 1 : 0; + t1_dec_clnpass_step_vsc( + t1, + &t1->flags[((j+1) * t1->flags_stride) + i + 1], + &t1->data[(j * t1->w) + i], + orient, + oneplushalf, + agg && (j == k + runlen), + vsc); + } + } + } + } else { + int *data1 = t1->data; + flag_t *flags1 = &t1->flags[1]; + for (k = 0; k < (t1->h & ~3); k += 4) { + for (i = 0; i < t1->w; ++i) { + int *data2 = data1 + i; + flag_t *flags2 = flags1 + i; + agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) + || MACRO_t1_flags(1 + k + 3,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)); + if (agg) { + mqc_setcurctx(mqc, T1_CTXNO_AGG); + if (!mqc_decode(mqc)) { + continue; + } + mqc_setcurctx(mqc, T1_CTXNO_UNI); + runlen = mqc_decode(mqc); + runlen = (runlen << 1) | mqc_decode(mqc); + flags2 += runlen * t1->flags_stride; + data2 += runlen * t1->w; + for (j = k + runlen; j < k + 4 && j < t1->h; ++j) { + flags2 += t1->flags_stride; + if (agg && (j == k + runlen)) { + t1_dec_clnpass_step_partial(t1, flags2, data2, orient, oneplushalf); + } else { + t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); + } + data2 += t1->w; + } + } else { + flags2 += t1->flags_stride; + t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); + data2 += t1->w; + flags2 += t1->flags_stride; + t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); + data2 += t1->w; + flags2 += t1->flags_stride; + t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); + data2 += t1->w; + flags2 += t1->flags_stride; + t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); + data2 += t1->w; + } + } + data1 += t1->w << 2; + flags1 += t1->flags_stride << 2; + } + for (i = 0; i < t1->w; ++i) { + int *data2 = data1 + i; + flag_t *flags2 = flags1 + i; + for (j = k; j < t1->h; ++j) { + flags2 += t1->flags_stride; + t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); + data2 += t1->w; + } + } + } + + if (segsym) { + int v = 0; + mqc_setcurctx(mqc, T1_CTXNO_UNI); + v = mqc_decode(mqc); + v = (v << 1) | mqc_decode(mqc); + v = (v << 1) | mqc_decode(mqc); + v = (v << 1) | mqc_decode(mqc); + /* + if (v!=0xa) { + opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v); + } + */ + } +} /* VSC and BYPASS by Antonin */ + + +/** mod fixed_quality */ +static double t1_getwmsedec( + int nmsedec, + int compno, + int level, + int orient, + int bpno, + int qmfbid, + double stepsize, + int numcomps, + int mct) +{ + double w1, w2, wmsedec; + if (qmfbid == 1) { + w1 = (mct && numcomps==3) ? mct_getnorm(compno) : 1.0; + w2 = dwt_getnorm(level, orient); + } else { /* if (qmfbid == 0) */ + w1 = (mct && numcomps==3) ? mct_getnorm_real(compno) : 1.0; + w2 = dwt_getnorm_real(level, orient); + } + wmsedec = w1 * w2 * stepsize * (1 << bpno); + wmsedec *= wmsedec * nmsedec / 8192.0; + + return wmsedec; +} + +static bool allocate_buffers( + opj_t1_t *t1, + int w, + int h) +{ + int datasize=w * h; + int flagssize; + + if(datasize > t1->datasize){ + opj_aligned_free(t1->data); + t1->data = (int*) opj_aligned_malloc(datasize * sizeof(int)); + if(!t1->data){ + return false; + } + t1->datasize=datasize; + } + memset(t1->data,0,datasize * sizeof(int)); + + t1->flags_stride=w+2; + flagssize=t1->flags_stride * (h+2); + + if(flagssize > t1->flagssize){ + opj_aligned_free(t1->flags); + t1->flags = (flag_t*) opj_aligned_malloc(flagssize * sizeof(flag_t)); + if(!t1->flags){ + return false; + } + t1->flagssize=flagssize; + } + memset(t1->flags,0,flagssize * sizeof(flag_t)); + + t1->w=w; + t1->h=h; + + return true; +} + +/** mod fixed_quality */ +static void t1_encode_cblk( + opj_t1_t *t1, + opj_tcd_cblk_enc_t* cblk, + int orient, + int compno, + int level, + int qmfbid, + double stepsize, + int cblksty, + int numcomps, + int mct, + opj_tcd_tile_t * tile) +{ + double cumwmsedec = 0.0; + + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + int passno, bpno, passtype; + int nmsedec = 0; + int i, max; + char type = T1_TYPE_MQ; + double tempwmsedec; + + max = 0; + for (i = 0; i < t1->w * t1->h; ++i) { + int tmp = abs(t1->data[i]); + max = int_max(max, tmp); + } + + cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0; + + bpno = cblk->numbps - 1; + passtype = 2; + + mqc_resetstates(mqc); + mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46); + mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3); + mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4); + mqc_init_enc(mqc, cblk->data); + + for (passno = 0; bpno >= 0; ++passno) { + opj_tcd_pass_t *pass = &cblk->passes[passno]; + int correction = 3; + type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; + + switch (passtype) { + case 0: + t1_enc_sigpass(t1, bpno, orient, &nmsedec, type, cblksty); + break; + case 1: + t1_enc_refpass(t1, bpno, &nmsedec, type, cblksty); + break; + case 2: + t1_enc_clnpass(t1, bpno, orient, &nmsedec, cblksty); + /* code switch SEGMARK (i.e. SEGSYM) */ + if (cblksty & J2K_CCP_CBLKSTY_SEGSYM) + mqc_segmark_enc(mqc); + break; + } + + /* fixed_quality */ + tempwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, qmfbid, stepsize, numcomps, mct); + cumwmsedec += tempwmsedec; + tile->distotile += tempwmsedec; + + /* Code switch "RESTART" (i.e. TERMALL) */ + if ((cblksty & J2K_CCP_CBLKSTY_TERMALL) && !((passtype == 2) && (bpno - 1 < 0))) { + if (type == T1_TYPE_RAW) { + mqc_flush(mqc); + correction = 1; + /* correction = mqc_bypass_flush_enc(); */ + } else { /* correction = mqc_restart_enc(); */ + mqc_flush(mqc); + correction = 1; + } + pass->term = 1; + } else { + if (((bpno < (cblk->numbps - 4) && (passtype > 0)) + || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) { + if (type == T1_TYPE_RAW) { + mqc_flush(mqc); + correction = 1; + /* correction = mqc_bypass_flush_enc(); */ + } else { /* correction = mqc_restart_enc(); */ + mqc_flush(mqc); + correction = 1; + } + pass->term = 1; + } else { + pass->term = 0; + } + } + + if (++passtype == 3) { + passtype = 0; + bpno--; + } + + if (pass->term && bpno > 0) { + type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; + if (type == T1_TYPE_RAW) + mqc_bypass_init_enc(mqc); + else + mqc_restart_init_enc(mqc); + } + + pass->distortiondec = cumwmsedec; + pass->rate = mqc_numbytes(mqc) + correction; /* FIXME */ + + /* Code-switch "RESET" */ + if (cblksty & J2K_CCP_CBLKSTY_RESET) + mqc_reset_enc(mqc); + } + + /* Code switch "ERTERM" (i.e. PTERM) */ + if (cblksty & J2K_CCP_CBLKSTY_PTERM) + mqc_erterm_enc(mqc); + else /* Default coding */ if (!(cblksty & J2K_CCP_CBLKSTY_LAZY)) + mqc_flush(mqc); + + cblk->totalpasses = passno; + + for (passno = 0; passnototalpasses; passno++) { + opj_tcd_pass_t *pass = &cblk->passes[passno]; + if (pass->rate > mqc_numbytes(mqc)) + pass->rate = mqc_numbytes(mqc); + /*Preventing generation of FF as last data byte of a pass*/ + if((pass->rate>1) && (cblk->data[pass->rate - 1] == 0xFF)){ + pass->rate--; + } + pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate); + } +} + +static void t1_decode_cblk( + opj_t1_t *t1, + opj_tcd_cblk_dec_t* cblk, + int orient, + int roishift, + int cblksty) +{ + opj_raw_t *raw = t1->raw; /* RAW component */ + opj_mqc_t *mqc = t1->mqc; /* MQC component */ + + int bpno, passtype; + int segno, passno; + char type = T1_TYPE_MQ; /* BYPASS mode */ + + if(!allocate_buffers( + t1, + cblk->x1 - cblk->x0, + cblk->y1 - cblk->y0)) + { + return; + } + + bpno = roishift + cblk->numbps - 1; + passtype = 2; + + mqc_resetstates(mqc); + mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46); + mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3); + mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4); + + for (segno = 0; segno < cblk->numsegs; ++segno) { + opj_tcd_seg_t *seg = &cblk->segs[segno]; + + /* BYPASS mode */ + type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; + /* FIXME: slviewer gets here with a null pointer. Why? Partially downloaded and/or corrupt textures? */ + if(seg->data == NULL){ + continue; + } + if (type == T1_TYPE_RAW) { + raw_init_dec(raw, (*seg->data) + seg->dataindex, seg->len); + } else { + mqc_init_dec(mqc, (*seg->data) + seg->dataindex, seg->len); + } + + for (passno = 0; passno < seg->numpasses; ++passno) { + switch (passtype) { + case 0: + if (type == T1_TYPE_RAW) { + t1_dec_sigpass_raw(t1, bpno+1, orient, cblksty); + } else { + if (cblksty & J2K_CCP_CBLKSTY_VSC) { + t1_dec_sigpass_mqc_vsc(t1, bpno+1, orient); + } else { + t1_dec_sigpass_mqc(t1, bpno+1, orient); + } + } + break; + case 1: + if (type == T1_TYPE_RAW) { + t1_dec_refpass_raw(t1, bpno+1, cblksty); + } else { + if (cblksty & J2K_CCP_CBLKSTY_VSC) { + t1_dec_refpass_mqc_vsc(t1, bpno+1); + } else { + t1_dec_refpass_mqc(t1, bpno+1); + } + } + break; + case 2: + t1_dec_clnpass(t1, bpno+1, orient, cblksty); + break; + } + + if ((cblksty & J2K_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) { + mqc_resetstates(mqc); + mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46); + mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3); + mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4); + } + if (++passtype == 3) { + passtype = 0; + bpno--; + } + } + } +} + +/* ----------------------------------------------------------------------- */ + +opj_t1_t* t1_create(opj_common_ptr cinfo) { + opj_t1_t *t1 = (opj_t1_t*) opj_malloc(sizeof(opj_t1_t)); + if(!t1) + return NULL; + + t1->cinfo = cinfo; + /* create MQC and RAW handles */ + t1->mqc = mqc_create(); + t1->raw = raw_create(); + + t1->data=NULL; + t1->flags=NULL; + t1->datasize=0; + t1->flagssize=0; + + return t1; +} + +void t1_destroy(opj_t1_t *t1) { + if(t1) { + /* destroy MQC and RAW handles */ + mqc_destroy(t1->mqc); + raw_destroy(t1->raw); + opj_aligned_free(t1->data); + opj_aligned_free(t1->flags); + opj_free(t1); + } +} + +void t1_encode_cblks( + opj_t1_t *t1, + opj_tcd_tile_t *tile, + opj_tcp_t *tcp) +{ + int compno, resno, bandno, precno, cblkno; + + tile->distotile = 0; /* fixed_quality */ + + for (compno = 0; compno < tile->numcomps; ++compno) { + opj_tcd_tilecomp_t* tilec = &tile->comps[compno]; + opj_tccp_t* tccp = &tcp->tccps[compno]; + int tile_w = tilec->x1 - tilec->x0; + + for (resno = 0; resno < tilec->numresolutions; ++resno) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + for (bandno = 0; bandno < res->numbands; ++bandno) { + opj_tcd_band_t* restrict band = &res->bands[bandno]; + + for (precno = 0; precno < res->pw * res->ph; ++precno) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + for (cblkno = 0; cblkno < prc->cw * prc->ch; ++cblkno) { + opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; + int* restrict datap; + int* restrict tiledp; + int cblk_w; + int cblk_h; + int i, j; + + int x = cblk->x0 - band->x0; + int y = cblk->y0 - band->y0; + if (band->bandno & 1) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + x += pres->x1 - pres->x0; + } + if (band->bandno & 2) { + opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; + y += pres->y1 - pres->y0; + } + + if(!allocate_buffers( + t1, + cblk->x1 - cblk->x0, + cblk->y1 - cblk->y0)) + { + return; + } + + datap=t1->data; + cblk_w = t1->w; + cblk_h = t1->h; + + tiledp=&tilec->data[(y * tile_w) + x]; + if (tccp->qmfbid == 1) { + for (j = 0; j < cblk_h; ++j) { + for (i = 0; i < cblk_w; ++i) { + int tmp = tiledp[(j * tile_w) + i]; + datap[(j * cblk_w) + i] = tmp << T1_NMSEDEC_FRACBITS; + } + } + } else { /* if (tccp->qmfbid == 0) */ + for (j = 0; j < cblk_h; ++j) { + for (i = 0; i < cblk_w; ++i) { + int tmp = tiledp[(j * tile_w) + i]; + datap[(j * cblk_w) + i] = + fix_mul( + tmp, + 8192 * 8192 / ((int) floor(band->stepsize * 8192))) >> (11 - T1_NMSEDEC_FRACBITS); + } + } + } + + t1_encode_cblk( + t1, + cblk, + band->bandno, + compno, + tilec->numresolutions - 1 - resno, + tccp->qmfbid, + band->stepsize, + tccp->cblksty, + tile->numcomps, + tcp->mct, + tile); + + } /* cblkno */ + } /* precno */ + } /* bandno */ + } /* resno */ + } /* compno */ +} + +void t1_decode_cblks( + opj_t1_t* t1, + opj_tcd_tilecomp_t* tilec, + opj_tccp_t* tccp) +{ + int resno, bandno, precno, cblkno; + + int tile_w = tilec->x1 - tilec->x0; + + for (resno = 0; resno < tilec->numresolutions; ++resno) { + opj_tcd_resolution_t* res = &tilec->resolutions[resno]; + + for (bandno = 0; bandno < res->numbands; ++bandno) { + opj_tcd_band_t* restrict band = &res->bands[bandno]; + + for (precno = 0; precno < res->pw * res->ph; ++precno) { + opj_tcd_precinct_t* precinct = &band->precincts[precno]; + + for (cblkno = 0; cblkno < precinct->cw * precinct->ch; ++cblkno) { + opj_tcd_cblk_dec_t* cblk = &precinct->cblks.dec[cblkno]; + int* restrict datap; + int cblk_w, cblk_h; + int x, y; + int i, j; + + t1_decode_cblk( + t1, + cblk, + band->bandno, + tccp->roishift, + tccp->cblksty); + + x = cblk->x0 - band->x0; + y = cblk->y0 - band->y0; + if (band->bandno & 1) { + opj_tcd_resolution_t* pres = &tilec->resolutions[resno - 1]; + x += pres->x1 - pres->x0; + } + if (band->bandno & 2) { + opj_tcd_resolution_t* pres = &tilec->resolutions[resno - 1]; + y += pres->y1 - pres->y0; + } + + datap=t1->data; + cblk_w = t1->w; + cblk_h = t1->h; + + if (tccp->roishift) { + int thresh = 1 << tccp->roishift; + for (j = 0; j < cblk_h; ++j) { + for (i = 0; i < cblk_w; ++i) { + int val = datap[(j * cblk_w) + i]; + int mag = abs(val); + if (mag >= thresh) { + mag >>= tccp->roishift; + datap[(j * cblk_w) + i] = val < 0 ? -mag : mag; + } + } + } + } + + if (tccp->qmfbid == 1) { + int* restrict tiledp = &tilec->data[(y * tile_w) + x]; + for (j = 0; j < cblk_h; ++j) { + for (i = 0; i < cblk_w; ++i) { + int tmp = datap[(j * cblk_w) + i]; + ((int*)tiledp)[(j * tile_w) + i] = tmp / 2; + } + } + } else { /* if (tccp->qmfbid == 0) */ + float* restrict tiledp = (float*) &tilec->data[(y * tile_w) + x]; + for (j = 0; j < cblk_h; ++j) { + float* restrict tiledp2 = tiledp; + for (i = 0; i < cblk_w; ++i) { + float tmp = *datap * band->stepsize; + *tiledp2 = tmp; + datap++; + tiledp2++; + } + tiledp += tile_w; + } + } + opj_free(cblk->data); + opj_free(cblk->segs); + } /* cblkno */ + opj_free(precinct->cblks.dec); + } /* precno */ + } /* bandno */ + } /* resno */ +} + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/t1.h b/contrib/menuetlibc/openjpeg/libopenjpeg/t1.h new file mode 100644 index 0000000000..572ec88d2f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/t1.h @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __T1_H +#define __T1_H +/** +@file t1.h +@brief Implementation of the tier-1 coding (coding of code-block coefficients) (T1) + +The functions in T1.C have for goal to realize the tier-1 coding operation. The functions +in T1.C are used by some function in TCD.C. +*/ + +/** @defgroup T1 T1 - Implementation of the tier-1 coding */ +/*@{*/ + +/* ----------------------------------------------------------------------- */ +#define T1_NMSEDEC_BITS 7 + +#define T1_SIG_NE 0x0001 /**< Context orientation : North-East direction */ +#define T1_SIG_SE 0x0002 /**< Context orientation : South-East direction */ +#define T1_SIG_SW 0x0004 /**< Context orientation : South-West direction */ +#define T1_SIG_NW 0x0008 /**< Context orientation : North-West direction */ +#define T1_SIG_N 0x0010 /**< Context orientation : North direction */ +#define T1_SIG_E 0x0020 /**< Context orientation : East direction */ +#define T1_SIG_S 0x0040 /**< Context orientation : South direction */ +#define T1_SIG_W 0x0080 /**< Context orientation : West direction */ +#define T1_SIG_OTH (T1_SIG_N|T1_SIG_NE|T1_SIG_E|T1_SIG_SE|T1_SIG_S|T1_SIG_SW|T1_SIG_W|T1_SIG_NW) +#define T1_SIG_PRIM (T1_SIG_N|T1_SIG_E|T1_SIG_S|T1_SIG_W) + +#define T1_SGN_N 0x0100 +#define T1_SGN_E 0x0200 +#define T1_SGN_S 0x0400 +#define T1_SGN_W 0x0800 +#define T1_SGN (T1_SGN_N|T1_SGN_E|T1_SGN_S|T1_SGN_W) + +#define T1_SIG 0x1000 +#define T1_REFINE 0x2000 +#define T1_VISIT 0x4000 + +#define T1_NUMCTXS_ZC 9 +#define T1_NUMCTXS_SC 5 +#define T1_NUMCTXS_MAG 3 +#define T1_NUMCTXS_AGG 1 +#define T1_NUMCTXS_UNI 1 + +#define T1_CTXNO_ZC 0 +#define T1_CTXNO_SC (T1_CTXNO_ZC+T1_NUMCTXS_ZC) +#define T1_CTXNO_MAG (T1_CTXNO_SC+T1_NUMCTXS_SC) +#define T1_CTXNO_AGG (T1_CTXNO_MAG+T1_NUMCTXS_MAG) +#define T1_CTXNO_UNI (T1_CTXNO_AGG+T1_NUMCTXS_AGG) +#define T1_NUMCTXS (T1_CTXNO_UNI+T1_NUMCTXS_UNI) + +#define T1_NMSEDEC_FRACBITS (T1_NMSEDEC_BITS-1) + +#define T1_TYPE_MQ 0 /**< Normal coding using entropy coder */ +#define T1_TYPE_RAW 1 /**< No encoding the information is store under raw format in codestream (mode switch RAW)*/ + +/* ----------------------------------------------------------------------- */ + +typedef short flag_t; + +/** +Tier-1 coding (coding of code-block coefficients) +*/ +typedef struct opj_t1 { + /** codec context */ + opj_common_ptr cinfo; + + /** MQC component */ + opj_mqc_t *mqc; + /** RAW component */ + opj_raw_t *raw; + + int *data; + flag_t *flags; + int w; + int h; + int datasize; + int flagssize; + int flags_stride; +} opj_t1_t; + +#define MACRO_t1_flags(x,y) t1->flags[((x)*(t1->flags_stride))+(y)] + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a new T1 handle +and initialize the look-up tables of the Tier-1 coder/decoder +@return Returns a new T1 handle if successful, returns NULL otherwise +@see t1_init_luts +*/ +opj_t1_t* t1_create(opj_common_ptr cinfo); +/** +Destroy a previously created T1 handle +@param t1 T1 handle to destroy +*/ +void t1_destroy(opj_t1_t *t1); +/** +Encode the code-blocks of a tile +@param t1 T1 handle +@param tile The tile to encode +@param tcp Tile coding parameters +*/ +void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp); +/** +Decode the code-blocks of a tile +@param t1 T1 handle +@param tilec The tile to decode +@param tccp Tile coding parameters +*/ +void t1_decode_cblks(opj_t1_t* t1, opj_tcd_tilecomp_t* tilec, opj_tccp_t* tccp); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __T1_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/t1_generate_luts.c b/contrib/menuetlibc/openjpeg/libopenjpeg/t1_generate_luts.c new file mode 100644 index 0000000000..39880414fb --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/t1_generate_luts.c @@ -0,0 +1,275 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2007, Callum Lerwick + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" +#include + +static int t1_init_ctxno_zc(int f, int orient) { + int h, v, d, n, t, hv; + n = 0; + h = ((f & T1_SIG_W) != 0) + ((f & T1_SIG_E) != 0); + v = ((f & T1_SIG_N) != 0) + ((f & T1_SIG_S) != 0); + d = ((f & T1_SIG_NW) != 0) + ((f & T1_SIG_NE) != 0) + ((f & T1_SIG_SE) != 0) + ((f & T1_SIG_SW) != 0); + + switch (orient) { + case 2: + t = h; + h = v; + v = t; + case 0: + case 1: + if (!h) { + if (!v) { + if (!d) + n = 0; + else if (d == 1) + n = 1; + else + n = 2; + } else if (v == 1) { + n = 3; + } else { + n = 4; + } + } else if (h == 1) { + if (!v) { + if (!d) + n = 5; + else + n = 6; + } else { + n = 7; + } + } else + n = 8; + break; + case 3: + hv = h + v; + if (!d) { + if (!hv) { + n = 0; + } else if (hv == 1) { + n = 1; + } else { + n = 2; + } + } else if (d == 1) { + if (!hv) { + n = 3; + } else if (hv == 1) { + n = 4; + } else { + n = 5; + } + } else if (d == 2) { + if (!hv) { + n = 6; + } else { + n = 7; + } + } else { + n = 8; + } + break; + } + + return (T1_CTXNO_ZC + n); +} + +static int t1_init_ctxno_sc(int f) { + int hc, vc, n; + n = 0; + + hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) == + T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W), + 1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) == + (T1_SIG_E | T1_SGN_E)) + + ((f & (T1_SIG_W | T1_SGN_W)) == + (T1_SIG_W | T1_SGN_W)), 1); + + vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) == + T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S), + 1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) == + (T1_SIG_N | T1_SGN_N)) + + ((f & (T1_SIG_S | T1_SGN_S)) == + (T1_SIG_S | T1_SGN_S)), 1); + + if (hc < 0) { + hc = -hc; + vc = -vc; + } + if (!hc) { + if (vc == -1) + n = 1; + else if (!vc) + n = 0; + else + n = 1; + } else if (hc == 1) { + if (vc == -1) + n = 2; + else if (!vc) + n = 3; + else + n = 4; + } + + return (T1_CTXNO_SC + n); +} + +static int t1_init_spb(int f) { + int hc, vc, n; + + hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) == + T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W), + 1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) == + (T1_SIG_E | T1_SGN_E)) + + ((f & (T1_SIG_W | T1_SGN_W)) == + (T1_SIG_W | T1_SGN_W)), 1); + + vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) == + T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S), + 1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) == + (T1_SIG_N | T1_SGN_N)) + + ((f & (T1_SIG_S | T1_SGN_S)) == + (T1_SIG_S | T1_SGN_S)), 1); + + if (!hc && !vc) + n = 0; + else + n = (!(hc > 0 || (!hc && vc > 0))); + + return n; +} + +void dump_array16(int array[],int size){ + int i; + --size; + for (i = 0; i < size; ++i) { + printf("0x%04x, ", array[i]); + if(!((i+1)&0x7)) + printf("\n "); + } + printf("0x%04x\n};\n\n", array[size]); +} + +int main(){ + int i, j; + double u, v, t; + + int lut_ctxno_zc[1024]; + int lut_nmsedec_sig[1 << T1_NMSEDEC_BITS]; + int lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS]; + int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS]; + int lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS]; + + printf("/* This file was automatically generated by t1_generate_luts.c */\n\n"); + + // lut_ctxno_zc + for (j = 0; j < 4; ++j) { + for (i = 0; i < 256; ++i) { + int orient = j; + if (orient == 2) { + orient = 1; + } else if (orient == 1) { + orient = 2; + } + lut_ctxno_zc[(orient << 8) | i] = t1_init_ctxno_zc(i, j); + } + } + + printf("static char lut_ctxno_zc[1024] = {\n "); + for (i = 0; i < 1023; ++i) { + printf("%i, ", lut_ctxno_zc[i]); + if(!((i+1)&0x1f)) + printf("\n "); + } + printf("%i\n};\n\n", lut_ctxno_zc[1023]); + + // lut_ctxno_sc + printf("static char lut_ctxno_sc[256] = {\n "); + for (i = 0; i < 255; ++i) { + printf("0x%x, ", t1_init_ctxno_sc(i << 4)); + if(!((i+1)&0xf)) + printf("\n "); + } + printf("0x%x\n};\n\n", t1_init_ctxno_sc(255 << 4)); + + // lut_spb + printf("static char lut_spb[256] = {\n "); + for (i = 0; i < 255; ++i) { + printf("%i, ", t1_init_spb(i << 4)); + if(!((i+1)&0x1f)) + printf("\n "); + } + printf("%i\n};\n\n", t1_init_spb(255 << 4)); + + /* FIXME FIXME FIXME */ + /* fprintf(stdout,"nmsedec luts:\n"); */ + for (i = 0; i < (1 << T1_NMSEDEC_BITS); ++i) { + t = i / pow(2, T1_NMSEDEC_FRACBITS); + u = t; + v = t - 1.5; + lut_nmsedec_sig[i] = + int_max(0, + (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + lut_nmsedec_sig0[i] = + int_max(0, + (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + u = t - 1.0; + if (i & (1 << (T1_NMSEDEC_BITS - 1))) { + v = t - 1.5; + } else { + v = t - 0.5; + } + lut_nmsedec_ref[i] = + int_max(0, + (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + lut_nmsedec_ref0[i] = + int_max(0, + (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); + } + + printf("static short lut_nmsedec_sig[1 << T1_NMSEDEC_BITS] = {\n "); + dump_array16(lut_nmsedec_sig, 1 << T1_NMSEDEC_BITS); + + printf("static short lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS] = {\n "); + dump_array16(lut_nmsedec_sig0, 1 << T1_NMSEDEC_BITS); + + printf("static short lut_nmsedec_ref[1 << T1_NMSEDEC_BITS] = {\n "); + dump_array16(lut_nmsedec_ref, 1 << T1_NMSEDEC_BITS); + + printf("static short lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS] = {\n "); + dump_array16(lut_nmsedec_ref0, 1 << T1_NMSEDEC_BITS); + + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/t1_luts.h b/contrib/menuetlibc/openjpeg/libopenjpeg/t1_luts.h new file mode 100644 index 0000000000..e5e33f6656 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/t1_luts.h @@ -0,0 +1,143 @@ +/* This file was automatically generated by t1_generate_luts.c */ + +static char lut_ctxno_zc[1024] = { + 0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 0, 3, 3, 6, 3, 6, 6, 8, 3, 6, 6, 8, 6, 8, 8, 8, 1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, + 1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, + 1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, + 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, + 1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, + 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, + 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, + 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8 +}; + +static char lut_ctxno_sc[256] = { + 0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xd, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd, + 0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xb, 0xc, 0xb, 0xd, 0xc, 0xd, 0xc, + 0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xd, 0x9, 0xa, 0xd, 0xd, 0xa, 0xa, + 0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xb, 0x9, 0xa, 0xd, 0xc, 0xa, 0x9, + 0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xd, 0xc, 0xd, 0xb, 0xc, 0xb, 0xc, + 0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xb, 0xc, 0xb, 0xb, 0xb, 0xb, 0xb, + 0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xd, 0x9, 0xa, 0xb, 0xc, 0xa, 0x9, + 0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xb, 0x9, 0xa, 0xb, 0xb, 0xa, 0xa, + 0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xb, 0x9, 0xa, 0xb, 0xb, 0xa, 0xa, + 0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xd, 0x9, 0xa, 0xb, 0xc, 0xa, 0x9, + 0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xb, 0xc, 0xb, 0xb, 0xb, 0xb, 0xb, + 0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xd, 0xc, 0xd, 0xb, 0xc, 0xb, 0xc, + 0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xb, 0x9, 0xa, 0xd, 0xc, 0xa, 0x9, + 0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xd, 0x9, 0xa, 0xd, 0xd, 0xa, 0xa, + 0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xb, 0xc, 0xb, 0xd, 0xc, 0xd, 0xc, + 0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xd, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd +}; + +static char lut_spb[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +}; + +static short lut_nmsedec_sig[1 << T1_NMSEDEC_BITS] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0180, 0x0300, 0x0480, 0x0600, 0x0780, 0x0900, 0x0a80, + 0x0c00, 0x0d80, 0x0f00, 0x1080, 0x1200, 0x1380, 0x1500, 0x1680, + 0x1800, 0x1980, 0x1b00, 0x1c80, 0x1e00, 0x1f80, 0x2100, 0x2280, + 0x2400, 0x2580, 0x2700, 0x2880, 0x2a00, 0x2b80, 0x2d00, 0x2e80, + 0x3000, 0x3180, 0x3300, 0x3480, 0x3600, 0x3780, 0x3900, 0x3a80, + 0x3c00, 0x3d80, 0x3f00, 0x4080, 0x4200, 0x4380, 0x4500, 0x4680, + 0x4800, 0x4980, 0x4b00, 0x4c80, 0x4e00, 0x4f80, 0x5100, 0x5280, + 0x5400, 0x5580, 0x5700, 0x5880, 0x5a00, 0x5b80, 0x5d00, 0x5e80, + 0x6000, 0x6180, 0x6300, 0x6480, 0x6600, 0x6780, 0x6900, 0x6a80, + 0x6c00, 0x6d80, 0x6f00, 0x7080, 0x7200, 0x7380, 0x7500, 0x7680 +}; + +static short lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0100, 0x0100, 0x0100, 0x0180, 0x0180, 0x0200, + 0x0200, 0x0280, 0x0280, 0x0300, 0x0300, 0x0380, 0x0400, 0x0400, + 0x0480, 0x0500, 0x0580, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780, + 0x0800, 0x0880, 0x0900, 0x0980, 0x0a00, 0x0a80, 0x0b80, 0x0c00, + 0x0c80, 0x0d00, 0x0e00, 0x0e80, 0x0f00, 0x1000, 0x1080, 0x1180, + 0x1200, 0x1300, 0x1380, 0x1480, 0x1500, 0x1600, 0x1700, 0x1780, + 0x1880, 0x1980, 0x1a80, 0x1b00, 0x1c00, 0x1d00, 0x1e00, 0x1f00, + 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2680, 0x2780, + 0x2880, 0x2980, 0x2b00, 0x2c00, 0x2d00, 0x2e80, 0x2f80, 0x3100, + 0x3200, 0x3380, 0x3480, 0x3600, 0x3700, 0x3880, 0x3a00, 0x3b00, + 0x3c80, 0x3e00, 0x3f80, 0x4080, 0x4200, 0x4380, 0x4500, 0x4680, + 0x4800, 0x4980, 0x4b00, 0x4c80, 0x4e00, 0x4f80, 0x5180, 0x5300, + 0x5480, 0x5600, 0x5800, 0x5980, 0x5b00, 0x5d00, 0x5e80, 0x6080, + 0x6200, 0x6400, 0x6580, 0x6780, 0x6900, 0x6b00, 0x6d00, 0x6e80, + 0x7080, 0x7280, 0x7480, 0x7600, 0x7800, 0x7a00, 0x7c00, 0x7e00 +}; + +static short lut_nmsedec_ref[1 << T1_NMSEDEC_BITS] = { + 0x1800, 0x1780, 0x1700, 0x1680, 0x1600, 0x1580, 0x1500, 0x1480, + 0x1400, 0x1380, 0x1300, 0x1280, 0x1200, 0x1180, 0x1100, 0x1080, + 0x1000, 0x0f80, 0x0f00, 0x0e80, 0x0e00, 0x0d80, 0x0d00, 0x0c80, + 0x0c00, 0x0b80, 0x0b00, 0x0a80, 0x0a00, 0x0980, 0x0900, 0x0880, + 0x0800, 0x0780, 0x0700, 0x0680, 0x0600, 0x0580, 0x0500, 0x0480, + 0x0400, 0x0380, 0x0300, 0x0280, 0x0200, 0x0180, 0x0100, 0x0080, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0080, 0x0100, 0x0180, 0x0200, 0x0280, 0x0300, 0x0380, + 0x0400, 0x0480, 0x0500, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780, + 0x0800, 0x0880, 0x0900, 0x0980, 0x0a00, 0x0a80, 0x0b00, 0x0b80, + 0x0c00, 0x0c80, 0x0d00, 0x0d80, 0x0e00, 0x0e80, 0x0f00, 0x0f80, + 0x1000, 0x1080, 0x1100, 0x1180, 0x1200, 0x1280, 0x1300, 0x1380, + 0x1400, 0x1480, 0x1500, 0x1580, 0x1600, 0x1680, 0x1700, 0x1780 +}; + +static short lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS] = { + 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x1b00, 0x1a80, 0x1980, + 0x1880, 0x1780, 0x1700, 0x1600, 0x1500, 0x1480, 0x1380, 0x1300, + 0x1200, 0x1180, 0x1080, 0x1000, 0x0f00, 0x0e80, 0x0e00, 0x0d00, + 0x0c80, 0x0c00, 0x0b80, 0x0a80, 0x0a00, 0x0980, 0x0900, 0x0880, + 0x0800, 0x0780, 0x0700, 0x0680, 0x0600, 0x0580, 0x0580, 0x0500, + 0x0480, 0x0400, 0x0400, 0x0380, 0x0300, 0x0300, 0x0280, 0x0280, + 0x0200, 0x0200, 0x0180, 0x0180, 0x0100, 0x0100, 0x0100, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0100, 0x0100, 0x0100, 0x0180, 0x0180, 0x0200, + 0x0200, 0x0280, 0x0280, 0x0300, 0x0300, 0x0380, 0x0400, 0x0400, + 0x0480, 0x0500, 0x0580, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780, + 0x0800, 0x0880, 0x0900, 0x0980, 0x0a00, 0x0a80, 0x0b80, 0x0c00, + 0x0c80, 0x0d00, 0x0e00, 0x0e80, 0x0f00, 0x1000, 0x1080, 0x1180, + 0x1200, 0x1300, 0x1380, 0x1480, 0x1500, 0x1600, 0x1700, 0x1780, + 0x1880, 0x1980, 0x1a80, 0x1b00, 0x1c00, 0x1d00, 0x1e00, 0x1f00 +}; + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/t2.c b/contrib/menuetlibc/openjpeg/libopenjpeg/t2.c new file mode 100644 index 0000000000..48463c9ca2 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/t2.c @@ -0,0 +1,791 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/** @defgroup T2 T2 - Implementation of a tier-2 coding */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +static void t2_putcommacode(opj_bio_t *bio, int n); +static int t2_getcommacode(opj_bio_t *bio); +/** +Variable length code for signalling delta Zil (truncation point) +@param bio Bit Input/Output component +@param n delta Zil +*/ +static void t2_putnumpasses(opj_bio_t *bio, int n); +static int t2_getnumpasses(opj_bio_t *bio); +/** +Encode a packet of a tile to a destination buffer +@param tile Tile for which to write the packets +@param tcp Tile coding parameters +@param pi Packet identity +@param dest Destination buffer +@param len Length of the destination buffer +@param cstr_info Codestream information structure +@param tileno Number of the tile encoded +@return +*/ +static int t2_encode_packet(opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi, unsigned char *dest, int len, opj_codestream_info_t *cstr_info, int tileno); +/** +@param cblk +@param index +@param cblksty +@param first +*/ +static void t2_init_seg(opj_tcd_cblk_dec_t* cblk, int index, int cblksty, int first); +/** +Decode a packet of a tile from a source buffer +@param t2 T2 handle +@param src Source buffer +@param len Length of the source buffer +@param tile Tile for which to write the packets +@param tcp Tile coding parameters +@param pi Packet identity +@param pack_info Packet information +@return +*/ +static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *tile, + opj_tcp_t *tcp, opj_pi_iterator_t *pi, opj_packet_info_t *pack_info); + +/*@}*/ + +/*@}*/ + +/* ----------------------------------------------------------------------- */ + +/* #define RESTART 0x04 */ + +static void t2_putcommacode(opj_bio_t *bio, int n) { + while (--n >= 0) { + bio_write(bio, 1, 1); + } + bio_write(bio, 0, 1); +} + +static int t2_getcommacode(opj_bio_t *bio) { + int n; + for (n = 0; bio_read(bio, 1); n++) { + ; + } + return n; +} + +static void t2_putnumpasses(opj_bio_t *bio, int n) { + if (n == 1) { + bio_write(bio, 0, 1); + } else if (n == 2) { + bio_write(bio, 2, 2); + } else if (n <= 5) { + bio_write(bio, 0xc | (n - 3), 4); + } else if (n <= 36) { + bio_write(bio, 0x1e0 | (n - 6), 9); + } else if (n <= 164) { + bio_write(bio, 0xff80 | (n - 37), 16); + } +} + +static int t2_getnumpasses(opj_bio_t *bio) { + int n; + if (!bio_read(bio, 1)) + return 1; + if (!bio_read(bio, 1)) + return 2; + if ((n = bio_read(bio, 2)) != 3) + return (3 + n); + if ((n = bio_read(bio, 5)) != 31) + return (6 + n); + return (37 + bio_read(bio, 7)); +} + +static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp, opj_pi_iterator_t *pi, unsigned char *dest, int length, opj_codestream_info_t *cstr_info, int tileno) { + int bandno, cblkno; + unsigned char *c = dest; + + int compno = pi->compno; /* component value */ + int resno = pi->resno; /* resolution level value */ + int precno = pi->precno; /* precinct value */ + int layno = pi->layno; /* quality layer value */ + + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + opj_bio_t *bio = NULL; /* BIO component */ + + /* */ + if (tcp->csty & J2K_CP_CSTY_SOP) { + c[0] = 255; + c[1] = 145; + c[2] = 0; + c[3] = 4; + c[4] = (tile->packno % 65536) / 256; + c[5] = (tile->packno % 65536) % 256; + c += 6; + } + /* */ + + if (!layno) { + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + tgt_reset(prc->incltree); + tgt_reset(prc->imsbtree); + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; + cblk->numpasses = 0; + tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps); + } + } + } + + bio = bio_create(); + bio_init_enc(bio, c, length); + bio_write(bio, 1, 1); /* Empty header bit */ + + /* Writing Packet header */ + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; + opj_tcd_layer_t *layer = &cblk->layers[layno]; + if (!cblk->numpasses && layer->numpasses) { + tgt_setvalue(prc->incltree, cblkno, layno); + } + } + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; + opj_tcd_layer_t *layer = &cblk->layers[layno]; + int increment = 0; + int nump = 0; + int len = 0, passno; + /* cblk inclusion bits */ + if (!cblk->numpasses) { + tgt_encode(bio, prc->incltree, cblkno, layno + 1); + } else { + bio_write(bio, layer->numpasses != 0, 1); + } + /* if cblk not included, go to the next cblk */ + if (!layer->numpasses) { + continue; + } + /* if first instance of cblk --> zero bit-planes information */ + if (!cblk->numpasses) { + cblk->numlenbits = 3; + tgt_encode(bio, prc->imsbtree, cblkno, 999); + } + /* number of coding passes included */ + t2_putnumpasses(bio, layer->numpasses); + + /* computation of the increase of the length indicator and insertion in the header */ + for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) { + opj_tcd_pass_t *pass = &cblk->passes[passno]; + nump++; + len += pass->len; + if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { + increment = int_max(increment, int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump))); + len = 0; + nump = 0; + } + } + t2_putcommacode(bio, increment); + + /* computation of the new Length indicator */ + cblk->numlenbits += increment; + + /* insertion of the codeword segment length */ + for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) { + opj_tcd_pass_t *pass = &cblk->passes[passno]; + nump++; + len += pass->len; + if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { + bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump)); + len = 0; + nump = 0; + } + } + } + } + + if (bio_flush(bio)) { + bio_destroy(bio); + return -999; /* modified to eliminate longjmp !! */ + } + + c += bio_numbytes(bio); + bio_destroy(bio); + + /* */ + if (tcp->csty & J2K_CP_CSTY_EPH) { + c[0] = 255; + c[1] = 146; + c += 2; + } + /* */ + + /* << INDEX */ + // End of packet header position. Currently only represents the distance to start of packet + // Will be updated later by incrementing with packet start value + if(cstr_info && cstr_info->index_write) { + opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno]; + info_PK->end_ph_pos = (int)(c - dest); + } + /* INDEX >> */ + + /* Writing the packet body */ + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; + opj_tcd_layer_t *layer = &cblk->layers[layno]; + if (!layer->numpasses) { + continue; + } + if (c + layer->len > dest + length) { + return -999; + } + + memcpy(c, layer->data, layer->len); + cblk->numpasses += layer->numpasses; + c += layer->len; + /* << INDEX */ + if(cstr_info && cstr_info->index_write) { + opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno]; + info_PK->disto += layer->disto; + if (cstr_info->D_max < info_PK->disto) { + cstr_info->D_max = info_PK->disto; + } + } + /* INDEX >> */ + } + } + + return (c - dest); +} + +static void t2_init_seg(opj_tcd_cblk_dec_t* cblk, int index, int cblksty, int first) { + opj_tcd_seg_t* seg; + cblk->segs = (opj_tcd_seg_t*) opj_realloc(cblk->segs, (index + 1) * sizeof(opj_tcd_seg_t)); + seg = &cblk->segs[index]; + seg->data = NULL; + seg->dataindex = 0; + seg->numpasses = 0; + seg->len = 0; + if (cblksty & J2K_CCP_CBLKSTY_TERMALL) { + seg->maxpasses = 1; + } + else if (cblksty & J2K_CCP_CBLKSTY_LAZY) { + if (first) { + seg->maxpasses = 10; + } else { + seg->maxpasses = (((seg - 1)->maxpasses == 1) || ((seg - 1)->maxpasses == 10)) ? 2 : 1; + } + } else { + seg->maxpasses = 109; + } +} + +static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *tile, + opj_tcp_t *tcp, opj_pi_iterator_t *pi, opj_packet_info_t *pack_info) { + int bandno, cblkno; + unsigned char *c = src; + + opj_cp_t *cp = t2->cp; + + int compno = pi->compno; /* component value */ + int resno = pi->resno; /* resolution level value */ + int precno = pi->precno; /* precinct value */ + int layno = pi->layno; /* quality layer value */ + + opj_tcd_resolution_t* res = &tile->comps[compno].resolutions[resno]; + + unsigned char *hd = NULL; + int present; + + opj_bio_t *bio = NULL; /* BIO component */ + + if (layno == 0) { + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)) continue; + + tgt_reset(prc->incltree); + tgt_reset(prc->imsbtree); + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno]; + cblk->numsegs = 0; + } + } + } + + /* SOP markers */ + + if (tcp->csty & J2K_CP_CSTY_SOP) { + if ((*c) != 0xff || (*(c + 1) != 0x91)) { + opj_event_msg(t2->cinfo, EVT_WARNING, "Expected SOP marker\n"); + } else { + c += 6; + } + + /** TODO : check the Nsop value */ + } + + /* + When the marker PPT/PPM is used the packet header are store in PPT/PPM marker + This part deal with this caracteristic + step 1: Read packet header in the saved structure + step 2: Return to codestream for decoding + */ + + bio = bio_create(); + + if (cp->ppm == 1) { /* PPM */ + hd = cp->ppm_data; + bio_init_dec(bio, hd, cp->ppm_len); + } else if (tcp->ppt == 1) { /* PPT */ + hd = tcp->ppt_data; + bio_init_dec(bio, hd, tcp->ppt_len); + } else { /* Normal Case */ + hd = c; + bio_init_dec(bio, hd, src+len-hd); + } + + present = bio_read(bio, 1); + + if (!present) { + bio_inalign(bio); + hd += bio_numbytes(bio); + bio_destroy(bio); + + /* EPH markers */ + + if (tcp->csty & J2K_CP_CSTY_EPH) { + if ((*hd) != 0xff || (*(hd + 1) != 0x92)) { + printf("Error : expected EPH marker\n"); + } else { + hd += 2; + } + } + + /* << INDEX */ + // End of packet header position. Currently only represents the distance to start of packet + // Will be updated later by incrementing with packet start value + if(pack_info) { + pack_info->end_ph_pos = (int)(c - src); + } + /* INDEX >> */ + + if (cp->ppm == 1) { /* PPM case */ + cp->ppm_len += cp->ppm_data-hd; + cp->ppm_data = hd; + return (c - src); + } + if (tcp->ppt == 1) { /* PPT case */ + tcp->ppt_len+=tcp->ppt_data-hd; + tcp->ppt_data = hd; + return (c - src); + } + + return (hd - src); + } + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)) continue; + + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + int included, increment, n, segno; + opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno]; + /* if cblk not yet included before --> inclusion tagtree */ + if (!cblk->numsegs) { + included = tgt_decode(bio, prc->incltree, cblkno, layno + 1); + /* else one bit */ + } else { + included = bio_read(bio, 1); + } + /* if cblk not included */ + if (!included) { + cblk->numnewpasses = 0; + continue; + } + /* if cblk not yet included --> zero-bitplane tagtree */ + if (!cblk->numsegs) { + int i, numimsbs; + for (i = 0; !tgt_decode(bio, prc->imsbtree, cblkno, i); i++) { + ; + } + numimsbs = i - 1; + cblk->numbps = band->numbps - numimsbs; + cblk->numlenbits = 3; + } + /* number of coding passes */ + cblk->numnewpasses = t2_getnumpasses(bio); + increment = t2_getcommacode(bio); + /* length indicator increment */ + cblk->numlenbits += increment; + segno = 0; + if (!cblk->numsegs) { + t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 1); + } else { + segno = cblk->numsegs - 1; + if (cblk->segs[segno].numpasses == cblk->segs[segno].maxpasses) { + ++segno; + t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 0); + } + } + n = cblk->numnewpasses; + + do { + cblk->segs[segno].numnewpasses = int_min(cblk->segs[segno].maxpasses - cblk->segs[segno].numpasses, n); + cblk->segs[segno].newlen = bio_read(bio, cblk->numlenbits + int_floorlog2(cblk->segs[segno].numnewpasses)); + n -= cblk->segs[segno].numnewpasses; + if (n > 0) { + ++segno; + t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 0); + } + } while (n > 0); + } + } + + if (bio_inalign(bio)) { + bio_destroy(bio); + return -999; + } + + hd += bio_numbytes(bio); + bio_destroy(bio); + + /* EPH markers */ + if (tcp->csty & J2K_CP_CSTY_EPH) { + if ((*hd) != 0xff || (*(hd + 1) != 0x92)) { + opj_event_msg(t2->cinfo, EVT_ERROR, "Expected EPH marker\n"); + return -999; + } else { + hd += 2; + } + } + + /* << INDEX */ + // End of packet header position. Currently only represents the distance to start of packet + // Will be updated later by incrementing with packet start value + if(pack_info) { + pack_info->end_ph_pos = (int)(hd - src); + } + /* INDEX >> */ + + if (cp->ppm==1) { + cp->ppm_len+=cp->ppm_data-hd; + cp->ppm_data = hd; + } else if (tcp->ppt == 1) { + tcp->ppt_len+=tcp->ppt_data-hd; + tcp->ppt_data = hd; + } else { + c=hd; + } + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)) continue; + + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno]; + opj_tcd_seg_t *seg = NULL; + if (!cblk->numnewpasses) + continue; + if (!cblk->numsegs) { + seg = &cblk->segs[0]; + cblk->numsegs++; + cblk->len = 0; + } else { + seg = &cblk->segs[cblk->numsegs - 1]; + if (seg->numpasses == seg->maxpasses) { + seg++; + cblk->numsegs++; + } + } + + do { + if (c + seg->newlen > src + len) { + return -999; + } + +#ifdef USE_JPWL + /* we need here a j2k handle to verify if making a check to + the validity of cblocks parameters is selected from user (-W) */ + + /* let's check that we are not exceeding */ + if ((cblk->len + seg->newlen) > 8192) { + opj_event_msg(t2->cinfo, EVT_WARNING, + "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n", + seg->newlen, cblkno, precno, bandno, resno, compno); + if (!JPWL_ASSUME) { + opj_event_msg(t2->cinfo, EVT_ERROR, "JPWL: giving up\n"); + return -999; + } + seg->newlen = 8192 - cblk->len; + opj_event_msg(t2->cinfo, EVT_WARNING, " - truncating segment to %d\n", seg->newlen); + break; + }; + +#endif /* USE_JPWL */ + + cblk->data = (unsigned char*) opj_realloc(cblk->data, (cblk->len + seg->newlen) * sizeof(unsigned char*)); + memcpy(cblk->data + cblk->len, c, seg->newlen); + if (seg->numpasses == 0) { + seg->data = &cblk->data; + seg->dataindex = cblk->len; + } + c += seg->newlen; + cblk->len += seg->newlen; + seg->len += seg->newlen; + seg->numpasses += seg->numnewpasses; + cblk->numnewpasses -= seg->numnewpasses; + if (cblk->numnewpasses > 0) { + seg++; + cblk->numsegs++; + } + } while (cblk->numnewpasses > 0); + } + } + + return (c - src); +} + +/* ----------------------------------------------------------------------- */ + +int t2_encode_packets(opj_t2_t* t2,int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_codestream_info_t *cstr_info,int tpnum, int tppos,int pino, J2K_T2_MODE t2_mode, int cur_totnum_tp){ + unsigned char *c = dest; + int e = 0; + int compno; + opj_pi_iterator_t *pi = NULL; + int poc; + opj_image_t *image = t2->image; + opj_cp_t *cp = t2->cp; + opj_tcp_t *tcp = &cp->tcps[tileno]; + int pocno = cp->cinema == CINEMA4K_24? 2: 1; + int maxcomp = cp->max_comp_size > 0 ? image->numcomps : 1; + + pi = pi_initialise_encode(image, cp, tileno, t2_mode); + if(!pi) { + /* TODO: throw an error */ + return -999; + } + + if(t2_mode == THRESH_CALC ){ /* Calculating threshold */ + for(compno = 0; compno < maxcomp; compno++ ){ + for(poc = 0; poc < pocno ; poc++){ + int comp_len = 0; + int tpnum = compno; + if (pi_create_encode(pi, cp,tileno,poc,tpnum,tppos,t2_mode,cur_totnum_tp)) { + opj_event_msg(t2->cinfo, EVT_ERROR, "Error initializing Packet Iterator\n"); + pi_destroy(pi, cp, tileno); + return -999; + } + while (pi_next(&pi[poc])) { + if (pi[poc].layno < maxlayers) { + e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[poc], c, dest + len - c, cstr_info, tileno); + comp_len = comp_len + e; + if (e == -999) { + break; + } else { + c += e; + } + } + } + if (e == -999) break; + if (cp->max_comp_size){ + if (comp_len > cp->max_comp_size){ + e = -999; + break; + } + } + } + if (e == -999) break; + } + }else{ /* t2_mode == FINAL_PASS */ + pi_create_encode(pi, cp,tileno,pino,tpnum,tppos,t2_mode,cur_totnum_tp); + while (pi_next(&pi[pino])) { + if (pi[pino].layno < maxlayers) { + e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c, cstr_info, tileno); + if (e == -999) { + break; + } else { + c += e; + } + /* INDEX >> */ + if(cstr_info) { + if(cstr_info->index_write) { + opj_tile_info_t *info_TL = &cstr_info->tile[tileno]; + opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno]; + if (!cstr_info->packno) { + info_PK->start_pos = info_TL->end_header + 1; + } else { + info_PK->start_pos = ((cp->tp_on | tcp->POC)&& info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno - 1].end_pos + 1; + } + info_PK->end_pos = info_PK->start_pos + e - 1; + info_PK->end_ph_pos += info_PK->start_pos - 1; // End of packet header which now only represents the distance + // to start of packet is incremented by value of start of packet + } + + cstr_info->packno++; + } + /* << INDEX */ + tile->packno++; + } + } + } + + pi_destroy(pi, cp, tileno); + + if (e == -999) { + return e; + } + + return (c - dest); +} + +int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno, opj_tcd_tile_t *tile, opj_codestream_info_t *cstr_info) { + unsigned char *c = src; + opj_pi_iterator_t *pi; + int pino, e = 0; + int n = 0, curtp = 0; + int tp_start_packno; + + opj_image_t *image = t2->image; + opj_cp_t *cp = t2->cp; + + /* create a packet iterator */ + pi = pi_create_decode(image, cp, tileno); + if(!pi) { + /* TODO: throw an error */ + return -999; + } + + tp_start_packno = 0; + + for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) { + while (pi_next(&pi[pino])) { + if ((cp->layer==0) || (cp->layer>=((pi[pino].layno)+1))) { + opj_packet_info_t *pack_info; + if (cstr_info) + pack_info = &cstr_info->tile[tileno].packet[cstr_info->packno]; + else + pack_info = NULL; + e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino], pack_info); + } else { + e = 0; + } + if(e == -999) return -999; + /* progression in resolution */ + image->comps[pi[pino].compno].resno_decoded = + (e > 0) ? + int_max(pi[pino].resno, image->comps[pi[pino].compno].resno_decoded) + : image->comps[pi[pino].compno].resno_decoded; + n++; + + /* INDEX >> */ + if(cstr_info) { + opj_tile_info_t *info_TL = &cstr_info->tile[tileno]; + opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno]; + if (!cstr_info->packno) { + info_PK->start_pos = info_TL->end_header + 1; + } else if (info_TL->packet[cstr_info->packno-1].end_pos >= (int)cstr_info->tile[tileno].tp[curtp].tp_end_pos){ // New tile part + info_TL->tp[curtp].tp_numpacks = cstr_info->packno - tp_start_packno; // Number of packets in previous tile-part + tp_start_packno = cstr_info->packno; + curtp++; + info_PK->start_pos = cstr_info->tile[tileno].tp[curtp].tp_end_header+1; + } else { + info_PK->start_pos = (cp->tp_on && info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno - 1].end_pos + 1; + } + info_PK->end_pos = info_PK->start_pos + e - 1; + info_PK->end_ph_pos += info_PK->start_pos - 1; // End of packet header which now only represents the distance + // to start of packet is incremented by value of start of packet + cstr_info->packno++; + } + /* << INDEX */ + + if (e == -999) { /* ADD */ + break; + } else { + c += e; + } + } + } + /* INDEX >> */ + if(cstr_info) { + cstr_info->tile[tileno].tp[curtp].tp_numpacks = cstr_info->packno - tp_start_packno; // Number of packets in last tile-part + } + /* << INDEX */ + + /* don't forget to release pi */ + pi_destroy(pi, cp, tileno); + + if (e == -999) { + return e; + } + + return (c - src); +} + +/* ----------------------------------------------------------------------- */ + +opj_t2_t* t2_create(opj_common_ptr cinfo, opj_image_t *image, opj_cp_t *cp) { + /* create the tcd structure */ + opj_t2_t *t2 = (opj_t2_t*)opj_malloc(sizeof(opj_t2_t)); + if(!t2) return NULL; + t2->cinfo = cinfo; + t2->image = image; + t2->cp = cp; + + return t2; +} + +void t2_destroy(opj_t2_t *t2) { + if(t2) { + opj_free(t2); + } +} + + + + + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/t2.h b/contrib/menuetlibc/openjpeg/libopenjpeg/t2.h new file mode 100644 index 0000000000..2151ba67f4 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/t2.h @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __T2_H +#define __T2_H +/** +@file t2.h +@brief Implementation of a tier-2 coding (packetization of code-block data) (T2) + +*/ + +/** @defgroup T2 T2 - Implementation of a tier-2 coding */ +/*@{*/ + +/** +Tier-2 coding +*/ +typedef struct opj_t2 { + /** codec context */ + opj_common_ptr cinfo; + + /** Encoding: pointer to the src image. Decoding: pointer to the dst image. */ + opj_image_t *image; + /** pointer to the image coding parameters */ + opj_cp_t *cp; +} opj_t2_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ + +/** +Encode the packets of a tile to a destination buffer +@param t2 T2 handle +@param tileno number of the tile encoded +@param tile the tile for which to write the packets +@param maxlayers maximum number of layers +@param dest the destination buffer +@param len the length of the destination buffer +@param cstr_info Codestream information structure +@param tpnum Tile part number of the current tile +@param tppos The position of the tile part flag in the progression order +@param pino +@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass +@param cur_totnum_tp The total number of tile parts in the current tile +*/ +int t2_encode_packets(opj_t2_t* t2,int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_codestream_info_t *cstr_info,int tpnum, int tppos,int pino,J2K_T2_MODE t2_mode,int cur_totnum_tp); +/** +Decode the packets of a tile from a source buffer +@param t2 T2 handle +@param src the source buffer +@param len length of the source buffer +@param tileno number that identifies the tile for which to decode the packets +@param tile tile for which to decode the packets +@param cstr_info Codestream information structure + */ +int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno, opj_tcd_tile_t *tile, opj_codestream_info_t *cstr_info); + +/** +Create a T2 handle +@param cinfo Codec context info +@param image Source or destination image +@param cp Image coding parameters +@return Returns a new T2 handle if successful, returns NULL otherwise +*/ +opj_t2_t* t2_create(opj_common_ptr cinfo, opj_image_t *image, opj_cp_t *cp); +/** +Destroy a T2 handle +@param t2 T2 handle to destroy +*/ +void t2_destroy(opj_t2_t *t2); + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __T2_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/tcd.c b/contrib/menuetlibc/openjpeg/libopenjpeg/tcd.c new file mode 100644 index 0000000000..7f154f4b03 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/tcd.c @@ -0,0 +1,1516 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2006-2007, Parvatha Elangovan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t * img) { + int tileno, compno, resno, bandno, precno;//, cblkno; + + fprintf(fd, "image {\n"); + fprintf(fd, " tw=%d, th=%d x0=%d x1=%d y0=%d y1=%d\n", + img->tw, img->th, tcd->image->x0, tcd->image->x1, tcd->image->y0, tcd->image->y1); + + for (tileno = 0; tileno < img->th * img->tw; tileno++) { + opj_tcd_tile_t *tile = &tcd->tcd_image->tiles[tileno]; + fprintf(fd, " tile {\n"); + fprintf(fd, " x0=%d, y0=%d, x1=%d, y1=%d, numcomps=%d\n", + tile->x0, tile->y0, tile->x1, tile->y1, tile->numcomps); + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + fprintf(fd, " tilec {\n"); + fprintf(fd, + " x0=%d, y0=%d, x1=%d, y1=%d, numresolutions=%d\n", + tilec->x0, tilec->y0, tilec->x1, tilec->y1, tilec->numresolutions); + for (resno = 0; resno < tilec->numresolutions; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + fprintf(fd, "\n res {\n"); + fprintf(fd, + " x0=%d, y0=%d, x1=%d, y1=%d, pw=%d, ph=%d, numbands=%d\n", + res->x0, res->y0, res->x1, res->y1, res->pw, res->ph, res->numbands); + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + fprintf(fd, " band {\n"); + fprintf(fd, + " x0=%d, y0=%d, x1=%d, y1=%d, stepsize=%f, numbps=%d\n", + band->x0, band->y0, band->x1, band->y1, band->stepsize, band->numbps); + for (precno = 0; precno < res->pw * res->ph; precno++) { + opj_tcd_precinct_t *prec = &band->precincts[precno]; + fprintf(fd, " prec {\n"); + fprintf(fd, + " x0=%d, y0=%d, x1=%d, y1=%d, cw=%d, ch=%d\n", + prec->x0, prec->y0, prec->x1, prec->y1, prec->cw, prec->ch); + /* + for (cblkno = 0; cblkno < prec->cw * prec->ch; cblkno++) { + opj_tcd_cblk_t *cblk = &prec->cblks[cblkno]; + fprintf(fd, " cblk {\n"); + fprintf(fd, + " x0=%d, y0=%d, x1=%d, y1=%d\n", + cblk->x0, cblk->y0, cblk->x1, cblk->y1); + fprintf(fd, " }\n"); + } + */ + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, " }\n"); + } + fprintf(fd, "}\n"); +} + +/* ----------------------------------------------------------------------- */ + +/** +Create a new TCD handle +*/ +opj_tcd_t* tcd_create(opj_common_ptr cinfo) { + /* create the tcd structure */ + opj_tcd_t *tcd = (opj_tcd_t*)opj_malloc(sizeof(opj_tcd_t)); + if(!tcd) return NULL; + tcd->cinfo = cinfo; + tcd->tcd_image = (opj_tcd_image_t*)opj_malloc(sizeof(opj_tcd_image_t)); + if(!tcd->tcd_image) { + opj_free(tcd); + return NULL; + } + + return tcd; +} + +/** +Destroy a previously created TCD handle +*/ +void tcd_destroy(opj_tcd_t *tcd) { + if(tcd) { + opj_free(tcd->tcd_image); + opj_free(tcd); + } +} + +/* ----------------------------------------------------------------------- */ + +void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno) { + int tileno, compno, resno, bandno, precno, cblkno; + + tcd->image = image; + tcd->cp = cp; + tcd->tcd_image->tw = cp->tw; + tcd->tcd_image->th = cp->th; + tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_malloc(sizeof(opj_tcd_tile_t)); + + for (tileno = 0; tileno < 1; tileno++) { + opj_tcp_t *tcp = &cp->tcps[curtileno]; + int j; + + /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ + int p = curtileno % cp->tw; /* si numerotation matricielle .. */ + int q = curtileno / cp->tw; /* .. coordonnees de la tile (q,p) q pour ligne et p pour colonne */ + + /* opj_tcd_tile_t *tile=&tcd->tcd_image->tiles[tileno]; */ + opj_tcd_tile_t *tile = tcd->tcd_image->tiles; + + /* 4 borders of the tile rescale on the image if necessary */ + tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0); + tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0); + tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1); + tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1); + tile->numcomps = image->numcomps; + /* tile->PPT=image->PPT; */ + + /* Modification of the RATE >> */ + for (j = 0; j < tcp->numlayers; j++) { + tcp->rates[j] = tcp->rates[j] ? + cp->tp_on ? + (((float) (tile->numcomps + * (tile->x1 - tile->x0) + * (tile->y1 - tile->y0) + * image->comps[0].prec)) + /(tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((tcd->cur_totnum_tp - 1) * 14 )/ tcp->numlayers) + : + ((float) (tile->numcomps + * (tile->x1 - tile->x0) + * (tile->y1 - tile->y0) + * image->comps[0].prec))/ + (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy) + : 0; + + if (tcp->rates[j]) { + if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) { + tcp->rates[j] = tcp->rates[j - 1] + 20; + } else { + if (!j && tcp->rates[j] < 30) + tcp->rates[j] = 30; + } + + if(j == (tcp->numlayers-1)){ + tcp->rates[j] = tcp->rates[j]- 2; + } + } + } + /* << Modification of the RATE */ + + tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(image->numcomps * sizeof(opj_tcd_tilecomp_t)); + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tccp_t *tccp = &tcp->tccps[compno]; + + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + + /* border of each tile component (global) */ + tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx); + tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy); + tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx); + tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy); + + tilec->data = (int *) opj_aligned_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * sizeof(int)); + tilec->numresolutions = tccp->numresolutions; + + tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(tilec->numresolutions * sizeof(opj_tcd_resolution_t)); + + for (resno = 0; resno < tilec->numresolutions; resno++) { + int pdx, pdy; + int levelno = tilec->numresolutions - 1 - resno; + int tlprcxstart, tlprcystart, brprcxend, brprcyend; + int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend; + int cbgwidthexpn, cbgheightexpn; + int cblkwidthexpn, cblkheightexpn; + + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + /* border for each resolution level (global) */ + res->x0 = int_ceildivpow2(tilec->x0, levelno); + res->y0 = int_ceildivpow2(tilec->y0, levelno); + res->x1 = int_ceildivpow2(tilec->x1, levelno); + res->y1 = int_ceildivpow2(tilec->y1, levelno); + + res->numbands = resno == 0 ? 1 : 3; + /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */ + if (tccp->csty & J2K_CCP_CSTY_PRT) { + pdx = tccp->prcw[resno]; + pdy = tccp->prch[resno]; + } else { + pdx = 15; + pdy = 15; + } + /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ + tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx; + tlprcystart = int_floordivpow2(res->y0, pdy) << pdy; + + brprcxend = int_ceildivpow2(res->x1, pdx) << pdx; + brprcyend = int_ceildivpow2(res->y1, pdy) << pdy; + + res->pw = (brprcxend - tlprcxstart) >> pdx; + res->ph = (brprcyend - tlprcystart) >> pdy; + + if (resno == 0) { + tlcbgxstart = tlprcxstart; + tlcbgystart = tlprcystart; + brcbgxend = brprcxend; + brcbgyend = brprcyend; + cbgwidthexpn = pdx; + cbgheightexpn = pdy; + } else { + tlcbgxstart = int_ceildivpow2(tlprcxstart, 1); + tlcbgystart = int_ceildivpow2(tlprcystart, 1); + brcbgxend = int_ceildivpow2(brprcxend, 1); + brcbgyend = int_ceildivpow2(brprcyend, 1); + cbgwidthexpn = pdx - 1; + cbgheightexpn = pdy - 1; + } + + cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn); + cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn); + + for (bandno = 0; bandno < res->numbands; bandno++) { + int x0b, y0b, i; + int gain, numbps; + opj_stepsize_t *ss = NULL; + + opj_tcd_band_t *band = &res->bands[bandno]; + + band->bandno = resno == 0 ? 0 : bandno + 1; + x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0; + y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0; + + if (band->bandno == 0) { + /* band border (global) */ + band->x0 = int_ceildivpow2(tilec->x0, levelno); + band->y0 = int_ceildivpow2(tilec->y0, levelno); + band->x1 = int_ceildivpow2(tilec->x1, levelno); + band->y1 = int_ceildivpow2(tilec->y1, levelno); + } else { + /* band border (global) */ + band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1); + band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1); + band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1); + band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1); + } + + ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1]; + gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(band->bandno); + numbps = image->comps[compno].prec + gain; + + band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn)); + band->numbps = ss->expn + tccp->numgbits - 1; /* WHY -1 ? */ + + band->precincts = (opj_tcd_precinct_t *) opj_malloc(3 * res->pw * res->ph * sizeof(opj_tcd_precinct_t)); + + for (i = 0; i < res->pw * res->ph * 3; i++) { + band->precincts[i].imsbtree = NULL; + band->precincts[i].incltree = NULL; + } + + for (precno = 0; precno < res->pw * res->ph; precno++) { + int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend; + + int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn); + int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn); + int cbgxend = cbgxstart + (1 << cbgwidthexpn); + int cbgyend = cbgystart + (1 << cbgheightexpn); + + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + /* precinct size (global) */ + prc->x0 = int_max(cbgxstart, band->x0); + prc->y0 = int_max(cbgystart, band->y0); + prc->x1 = int_min(cbgxend, band->x1); + prc->y1 = int_min(cbgyend, band->y1); + + tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn; + tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn; + brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn; + brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn; + prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn; + prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn; + + prc->cblks.enc = (opj_tcd_cblk_enc_t*) opj_calloc((prc->cw * prc->ch), sizeof(opj_tcd_cblk_enc_t)); + prc->incltree = tgt_create(prc->cw, prc->ch); + prc->imsbtree = tgt_create(prc->cw, prc->ch); + + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn); + int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn); + int cblkxend = cblkxstart + (1 << cblkwidthexpn); + int cblkyend = cblkystart + (1 << cblkheightexpn); + + opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; + + /* code-block size (global) */ + cblk->x0 = int_max(cblkxstart, prc->x0); + cblk->y0 = int_max(cblkystart, prc->y0); + cblk->x1 = int_min(cblkxend, prc->x1); + cblk->y1 = int_min(cblkyend, prc->y1); + cblk->data = (unsigned char*) opj_calloc(8192+2, sizeof(unsigned char)); + /* FIXME: mqc_init_enc and mqc_byteout underrun the buffer if we don't do this. Why? */ + cblk->data += 2; + cblk->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t)); + cblk->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t)); + } + } + } + } + } + } + + /* tcd_dump(stdout, tcd, &tcd->tcd_image); */ +} + +void tcd_free_encode(opj_tcd_t *tcd) { + int tileno, compno, resno, bandno, precno, cblkno; + + for (tileno = 0; tileno < 1; tileno++) { + opj_tcd_tile_t *tile = tcd->tcd_image->tiles; + + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + + for (resno = 0; resno < tilec->numresolutions; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + + for (precno = 0; precno < res->pw * res->ph; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + if (prc->incltree != NULL) { + tgt_destroy(prc->incltree); + prc->incltree = NULL; + } + if (prc->imsbtree != NULL) { + tgt_destroy(prc->imsbtree); + prc->imsbtree = NULL; + } + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + opj_free(prc->cblks.enc[cblkno].data - 2); + opj_free(prc->cblks.enc[cblkno].layers); + opj_free(prc->cblks.enc[cblkno].passes); + } + opj_free(prc->cblks.enc); + } /* for (precno */ + opj_free(band->precincts); + band->precincts = NULL; + } /* for (bandno */ + } /* for (resno */ + opj_free(tilec->resolutions); + tilec->resolutions = NULL; + } /* for (compno */ + opj_free(tile->comps); + tile->comps = NULL; + } /* for (tileno */ + opj_free(tcd->tcd_image->tiles); + tcd->tcd_image->tiles = NULL; +} + +void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno) { + int tileno, compno, resno, bandno, precno, cblkno; + + for (tileno = 0; tileno < 1; tileno++) { + opj_tcp_t *tcp = &cp->tcps[curtileno]; + int j; + /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ + int p = curtileno % cp->tw; + int q = curtileno / cp->tw; + + opj_tcd_tile_t *tile = tcd->tcd_image->tiles; + + /* 4 borders of the tile rescale on the image if necessary */ + tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0); + tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0); + tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1); + tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1); + + tile->numcomps = image->numcomps; + /* tile->PPT=image->PPT; */ + + /* Modification of the RATE >> */ + for (j = 0; j < tcp->numlayers; j++) { + tcp->rates[j] = tcp->rates[j] ? + cp->tp_on ? + (((float) (tile->numcomps + * (tile->x1 - tile->x0) + * (tile->y1 - tile->y0) + * image->comps[0].prec)) + /(tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((tcd->cur_totnum_tp - 1) * 14 )/ tcp->numlayers) + : + ((float) (tile->numcomps + * (tile->x1 - tile->x0) + * (tile->y1 - tile->y0) + * image->comps[0].prec))/ + (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy) + : 0; + + if (tcp->rates[j]) { + if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) { + tcp->rates[j] = tcp->rates[j - 1] + 20; + } else { + if (!j && tcp->rates[j] < 30) + tcp->rates[j] = 30; + } + } + } + /* << Modification of the RATE */ + + /* tile->comps=(opj_tcd_tilecomp_t*)opj_realloc(tile->comps,image->numcomps*sizeof(opj_tcd_tilecomp_t)); */ + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tccp_t *tccp = &tcp->tccps[compno]; + + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + + /* border of each tile component (global) */ + tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx); + tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy); + tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx); + tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy); + + tilec->data = (int *) opj_aligned_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * sizeof(int)); + tilec->numresolutions = tccp->numresolutions; + /* tilec->resolutions=(opj_tcd_resolution_t*)opj_realloc(tilec->resolutions,tilec->numresolutions*sizeof(opj_tcd_resolution_t)); */ + for (resno = 0; resno < tilec->numresolutions; resno++) { + int pdx, pdy; + + int levelno = tilec->numresolutions - 1 - resno; + int tlprcxstart, tlprcystart, brprcxend, brprcyend; + int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend; + int cbgwidthexpn, cbgheightexpn; + int cblkwidthexpn, cblkheightexpn; + + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + /* border for each resolution level (global) */ + res->x0 = int_ceildivpow2(tilec->x0, levelno); + res->y0 = int_ceildivpow2(tilec->y0, levelno); + res->x1 = int_ceildivpow2(tilec->x1, levelno); + res->y1 = int_ceildivpow2(tilec->y1, levelno); + res->numbands = resno == 0 ? 1 : 3; + + /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */ + if (tccp->csty & J2K_CCP_CSTY_PRT) { + pdx = tccp->prcw[resno]; + pdy = tccp->prch[resno]; + } else { + pdx = 15; + pdy = 15; + } + /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ + tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx; + tlprcystart = int_floordivpow2(res->y0, pdy) << pdy; + brprcxend = int_ceildivpow2(res->x1, pdx) << pdx; + brprcyend = int_ceildivpow2(res->y1, pdy) << pdy; + + res->pw = (brprcxend - tlprcxstart) >> pdx; + res->ph = (brprcyend - tlprcystart) >> pdy; + + if (resno == 0) { + tlcbgxstart = tlprcxstart; + tlcbgystart = tlprcystart; + brcbgxend = brprcxend; + brcbgyend = brprcyend; + cbgwidthexpn = pdx; + cbgheightexpn = pdy; + } else { + tlcbgxstart = int_ceildivpow2(tlprcxstart, 1); + tlcbgystart = int_ceildivpow2(tlprcystart, 1); + brcbgxend = int_ceildivpow2(brprcxend, 1); + brcbgyend = int_ceildivpow2(brprcyend, 1); + cbgwidthexpn = pdx - 1; + cbgheightexpn = pdy - 1; + } + + cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn); + cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn); + + for (bandno = 0; bandno < res->numbands; bandno++) { + int x0b, y0b; + int gain, numbps; + opj_stepsize_t *ss = NULL; + + opj_tcd_band_t *band = &res->bands[bandno]; + + band->bandno = resno == 0 ? 0 : bandno + 1; + x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0; + y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0; + + if (band->bandno == 0) { + /* band border */ + band->x0 = int_ceildivpow2(tilec->x0, levelno); + band->y0 = int_ceildivpow2(tilec->y0, levelno); + band->x1 = int_ceildivpow2(tilec->x1, levelno); + band->y1 = int_ceildivpow2(tilec->y1, levelno); + } else { + band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1); + band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1); + band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1); + band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1); + } + + ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1]; + gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(band->bandno); + numbps = image->comps[compno].prec + gain; + band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn)); + band->numbps = ss->expn + tccp->numgbits - 1; /* WHY -1 ? */ + + for (precno = 0; precno < res->pw * res->ph; precno++) { + int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend; + + int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn); + int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn); + int cbgxend = cbgxstart + (1 << cbgwidthexpn); + int cbgyend = cbgystart + (1 << cbgheightexpn); + + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + /* precinct size (global) */ + prc->x0 = int_max(cbgxstart, band->x0); + prc->y0 = int_max(cbgystart, band->y0); + prc->x1 = int_min(cbgxend, band->x1); + prc->y1 = int_min(cbgyend, band->y1); + + tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn; + tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn; + brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn; + brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn; + prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn; + prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn; + + opj_free(prc->cblks.enc); + prc->cblks.enc = (opj_tcd_cblk_enc_t*) opj_calloc(prc->cw * prc->ch, sizeof(opj_tcd_cblk_enc_t)); + + if (prc->incltree != NULL) { + tgt_destroy(prc->incltree); + } + if (prc->imsbtree != NULL) { + tgt_destroy(prc->imsbtree); + } + + prc->incltree = tgt_create(prc->cw, prc->ch); + prc->imsbtree = tgt_create(prc->cw, prc->ch); + + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn); + int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn); + int cblkxend = cblkxstart + (1 << cblkwidthexpn); + int cblkyend = cblkystart + (1 << cblkheightexpn); + + opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; + + /* code-block size (global) */ + cblk->x0 = int_max(cblkxstart, prc->x0); + cblk->y0 = int_max(cblkystart, prc->y0); + cblk->x1 = int_min(cblkxend, prc->x1); + cblk->y1 = int_min(cblkyend, prc->y1); + cblk->data = (unsigned char*) opj_calloc(8192+2, sizeof(unsigned char)); + /* FIXME: mqc_init_enc and mqc_byteout underrun the buffer if we don't do this. Why? */ + cblk->data += 2; + cblk->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t)); + cblk->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t)); + } + } /* precno */ + } /* bandno */ + } /* resno */ + } /* compno */ + } /* tileno */ + + /* tcd_dump(stdout, tcd, &tcd->tcd_image); */ +} + +void tcd_malloc_decode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp) { + int i, j, tileno, p, q; + unsigned int x0 = 0, y0 = 0, x1 = 0, y1 = 0, w, h; + + tcd->image = image; + tcd->tcd_image->tw = cp->tw; + tcd->tcd_image->th = cp->th; + tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_malloc(cp->tw * cp->th * sizeof(opj_tcd_tile_t)); + + /* + Allocate place to store the decoded data = final image + Place limited by the tile really present in the codestream + */ + + for (j = 0; j < cp->tileno_size; j++) { + opj_tcd_tile_t *tile; + + tileno = cp->tileno[j]; + tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]); + tile->numcomps = image->numcomps; + tile->comps = (opj_tcd_tilecomp_t*) opj_calloc(image->numcomps, sizeof(opj_tcd_tilecomp_t)); + } + + for (i = 0; i < image->numcomps; i++) { + for (j = 0; j < cp->tileno_size; j++) { + opj_tcd_tile_t *tile; + opj_tcd_tilecomp_t *tilec; + + /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ + + tileno = cp->tileno[j]; + + tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]); + tilec = &tile->comps[i]; + + p = tileno % cp->tw; /* si numerotation matricielle .. */ + q = tileno / cp->tw; /* .. coordonnees de la tile (q,p) q pour ligne et p pour colonne */ + + /* 4 borders of the tile rescale on the image if necessary */ + tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0); + tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0); + tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1); + tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1); + + tilec->x0 = int_ceildiv(tile->x0, image->comps[i].dx); + tilec->y0 = int_ceildiv(tile->y0, image->comps[i].dy); + tilec->x1 = int_ceildiv(tile->x1, image->comps[i].dx); + tilec->y1 = int_ceildiv(tile->y1, image->comps[i].dy); + + x0 = j == 0 ? tilec->x0 : int_min(x0, (unsigned int) tilec->x0); + y0 = j == 0 ? tilec->y0 : int_min(y0, (unsigned int) tilec->x0); + x1 = j == 0 ? tilec->x1 : int_max(x1, (unsigned int) tilec->x1); + y1 = j == 0 ? tilec->y1 : int_max(y1, (unsigned int) tilec->y1); + } + + w = int_ceildivpow2(x1 - x0, image->comps[i].factor); + h = int_ceildivpow2(y1 - y0, image->comps[i].factor); + + image->comps[i].w = w; + image->comps[i].h = h; + image->comps[i].x0 = x0; + image->comps[i].y0 = y0; + } +} + +void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int tileno, opj_codestream_info_t *cstr_info) { + int compno, resno, bandno, precno, cblkno; + opj_tcp_t *tcp; + opj_tcd_tile_t *tile; + + tcd->cp = cp; + + tcp = &(cp->tcps[cp->tileno[tileno]]); + tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]); + + tileno = cp->tileno[tileno]; + + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + + /* border of each tile component (global) */ + tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx); + tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy); + tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx); + tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy); + + tilec->numresolutions = tccp->numresolutions; + tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(tilec->numresolutions * sizeof(opj_tcd_resolution_t)); + + for (resno = 0; resno < tilec->numresolutions; resno++) { + int pdx, pdy; + int levelno = tilec->numresolutions - 1 - resno; + int tlprcxstart, tlprcystart, brprcxend, brprcyend; + int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend; + int cbgwidthexpn, cbgheightexpn; + int cblkwidthexpn, cblkheightexpn; + + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + /* border for each resolution level (global) */ + res->x0 = int_ceildivpow2(tilec->x0, levelno); + res->y0 = int_ceildivpow2(tilec->y0, levelno); + res->x1 = int_ceildivpow2(tilec->x1, levelno); + res->y1 = int_ceildivpow2(tilec->y1, levelno); + res->numbands = resno == 0 ? 1 : 3; + + /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */ + if (tccp->csty & J2K_CCP_CSTY_PRT) { + pdx = tccp->prcw[resno]; + pdy = tccp->prch[resno]; + } else { + pdx = 15; + pdy = 15; + } + + /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ + tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx; + tlprcystart = int_floordivpow2(res->y0, pdy) << pdy; + brprcxend = int_ceildivpow2(res->x1, pdx) << pdx; + brprcyend = int_ceildivpow2(res->y1, pdy) << pdy; + + res->pw = (res->x0 == res->x1) ? 0 : ((brprcxend - tlprcxstart) >> pdx); + res->ph = (res->y0 == res->y1) ? 0 : ((brprcyend - tlprcystart) >> pdy); + + if (resno == 0) { + tlcbgxstart = tlprcxstart; + tlcbgystart = tlprcystart; + brcbgxend = brprcxend; + brcbgyend = brprcyend; + cbgwidthexpn = pdx; + cbgheightexpn = pdy; + } else { + tlcbgxstart = int_ceildivpow2(tlprcxstart, 1); + tlcbgystart = int_ceildivpow2(tlprcystart, 1); + brcbgxend = int_ceildivpow2(brprcxend, 1); + brcbgyend = int_ceildivpow2(brprcyend, 1); + cbgwidthexpn = pdx - 1; + cbgheightexpn = pdy - 1; + } + + cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn); + cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn); + + for (bandno = 0; bandno < res->numbands; bandno++) { + int x0b, y0b; + int gain, numbps; + opj_stepsize_t *ss = NULL; + + opj_tcd_band_t *band = &res->bands[bandno]; + band->bandno = resno == 0 ? 0 : bandno + 1; + x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0; + y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0; + + if (band->bandno == 0) { + /* band border (global) */ + band->x0 = int_ceildivpow2(tilec->x0, levelno); + band->y0 = int_ceildivpow2(tilec->y0, levelno); + band->x1 = int_ceildivpow2(tilec->x1, levelno); + band->y1 = int_ceildivpow2(tilec->y1, levelno); + } else { + /* band border (global) */ + band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1); + band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1); + band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1); + band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1); + } + + ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1]; + gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(band->bandno); + numbps = image->comps[compno].prec + gain; + band->stepsize = (float)(((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn)) * 0.5); + band->numbps = ss->expn + tccp->numgbits - 1; /* WHY -1 ? */ + + band->precincts = (opj_tcd_precinct_t *) opj_malloc(res->pw * res->ph * sizeof(opj_tcd_precinct_t)); + + for (precno = 0; precno < res->pw * res->ph; precno++) { + int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend; + int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn); + int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn); + int cbgxend = cbgxstart + (1 << cbgwidthexpn); + int cbgyend = cbgystart + (1 << cbgheightexpn); + + opj_tcd_precinct_t *prc = &band->precincts[precno]; + /* precinct size (global) */ + prc->x0 = int_max(cbgxstart, band->x0); + prc->y0 = int_max(cbgystart, band->y0); + prc->x1 = int_min(cbgxend, band->x1); + prc->y1 = int_min(cbgyend, band->y1); + + tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn; + tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn; + brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn; + brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn; + prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn; + prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn; + + prc->cblks.dec = (opj_tcd_cblk_dec_t*) opj_malloc(prc->cw * prc->ch * sizeof(opj_tcd_cblk_dec_t)); + + prc->incltree = tgt_create(prc->cw, prc->ch); + prc->imsbtree = tgt_create(prc->cw, prc->ch); + + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn); + int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn); + int cblkxend = cblkxstart + (1 << cblkwidthexpn); + int cblkyend = cblkystart + (1 << cblkheightexpn); + + opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno]; + cblk->data = NULL; + cblk->segs = NULL; + /* code-block size (global) */ + cblk->x0 = int_max(cblkxstart, prc->x0); + cblk->y0 = int_max(cblkystart, prc->y0); + cblk->x1 = int_min(cblkxend, prc->x1); + cblk->y1 = int_min(cblkyend, prc->y1); + cblk->numsegs = 0; + } + } /* precno */ + } /* bandno */ + } /* resno */ + } /* compno */ + /* tcd_dump(stdout, tcd, &tcd->tcd_image); */ +} + +void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final) { + int compno, resno, bandno, precno, cblkno; + int value; /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolutions][3]; */ + int matrice[10][10][3]; + int i, j, k; + + opj_cp_t *cp = tcd->cp; + opj_tcd_tile_t *tcd_tile = tcd->tcd_tile; + opj_tcp_t *tcd_tcp = tcd->tcp; + + /*matrice=(int*)opj_malloc(tcd_tcp->numlayers*tcd_tile->comps[0].numresolutions*3*sizeof(int)); */ + + for (compno = 0; compno < tcd_tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno]; + for (i = 0; i < tcd_tcp->numlayers; i++) { + for (j = 0; j < tilec->numresolutions; j++) { + for (k = 0; k < 3; k++) { + matrice[i][j][k] = + (int) (cp->matrice[i * tilec->numresolutions * 3 + j * 3 + k] + * (float) (tcd->image->comps[compno].prec / 16.0)); + } + } + } + + for (resno = 0; resno < tilec->numresolutions; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + for (precno = 0; precno < res->pw * res->ph; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno]; + opj_tcd_layer_t *layer = &cblk->layers[layno]; + int n; + int imsb = tcd->image->comps[compno].prec - cblk->numbps; /* number of bit-plan equal to zero */ + /* Correction of the matrix of coefficient to include the IMSB information */ + if (layno == 0) { + value = matrice[layno][resno][bandno]; + if (imsb >= value) { + value = 0; + } else { + value -= imsb; + } + } else { + value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno]; + if (imsb >= matrice[layno - 1][resno][bandno]) { + value -= (imsb - matrice[layno - 1][resno][bandno]); + if (value < 0) { + value = 0; + } + } + } + + if (layno == 0) { + cblk->numpassesinlayers = 0; + } + + n = cblk->numpassesinlayers; + if (cblk->numpassesinlayers == 0) { + if (value != 0) { + n = 3 * value - 2 + cblk->numpassesinlayers; + } else { + n = cblk->numpassesinlayers; + } + } else { + n = 3 * value + cblk->numpassesinlayers; + } + + layer->numpasses = n - cblk->numpassesinlayers; + + if (!layer->numpasses) + continue; + + if (cblk->numpassesinlayers == 0) { + layer->len = cblk->passes[n - 1].rate; + layer->data = cblk->data; + } else { + layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate; + layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate; + } + if (final) + cblk->numpassesinlayers = n; + } + } + } + } + } +} + +void tcd_rateallocate_fixed(opj_tcd_t *tcd) { + int layno; + for (layno = 0; layno < tcd->tcp->numlayers; layno++) { + tcd_makelayer_fixed(tcd, layno, 1); + } +} + +void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final) { + int compno, resno, bandno, precno, cblkno, passno; + + opj_tcd_tile_t *tcd_tile = tcd->tcd_tile; + + tcd_tile->distolayer[layno] = 0; /* fixed_quality */ + + for (compno = 0; compno < tcd_tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno]; + for (resno = 0; resno < tilec->numresolutions; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + for (precno = 0; precno < res->pw * res->ph; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno]; + opj_tcd_layer_t *layer = &cblk->layers[layno]; + + int n; + if (layno == 0) { + cblk->numpassesinlayers = 0; + } + n = cblk->numpassesinlayers; + for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) { + int dr; + double dd; + opj_tcd_pass_t *pass = &cblk->passes[passno]; + if (n == 0) { + dr = pass->rate; + dd = pass->distortiondec; + } else { + dr = pass->rate - cblk->passes[n - 1].rate; + dd = pass->distortiondec - cblk->passes[n - 1].distortiondec; + } + if (!dr) { + if (dd != 0) + n = passno + 1; + continue; + } + if (dd / dr >= thresh) + n = passno + 1; + } + layer->numpasses = n - cblk->numpassesinlayers; + + if (!layer->numpasses) { + layer->disto = 0; + continue; + } + if (cblk->numpassesinlayers == 0) { + layer->len = cblk->passes[n - 1].rate; + layer->data = cblk->data; + layer->disto = cblk->passes[n - 1].distortiondec; + } else { + layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate; + layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate; + layer->disto = cblk->passes[n - 1].distortiondec - cblk->passes[cblk->numpassesinlayers - 1].distortiondec; + } + + tcd_tile->distolayer[layno] += layer->disto; /* fixed_quality */ + + if (final) + cblk->numpassesinlayers = n; + } + } + } + } + } +} + +bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_codestream_info_t *cstr_info) { + int compno, resno, bandno, precno, cblkno, passno, layno; + double min, max; + double cumdisto[100]; /* fixed_quality */ + const double K = 1; /* 1.1; fixed_quality */ + double maxSE = 0; + + opj_cp_t *cp = tcd->cp; + opj_tcd_tile_t *tcd_tile = tcd->tcd_tile; + opj_tcp_t *tcd_tcp = tcd->tcp; + + min = DBL_MAX; + max = 0; + + tcd_tile->numpix = 0; /* fixed_quality */ + + for (compno = 0; compno < tcd_tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno]; + tilec->numpix = 0; + + for (resno = 0; resno < tilec->numresolutions; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + + for (precno = 0; precno < res->pw * res->ph; precno++) { + opj_tcd_precinct_t *prc = &band->precincts[precno]; + + for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { + opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno]; + + for (passno = 0; passno < cblk->totalpasses; passno++) { + opj_tcd_pass_t *pass = &cblk->passes[passno]; + int dr; + double dd, rdslope; + if (passno == 0) { + dr = pass->rate; + dd = pass->distortiondec; + } else { + dr = pass->rate - cblk->passes[passno - 1].rate; + dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec; + } + if (dr == 0) { + continue; + } + rdslope = dd / dr; + if (rdslope < min) { + min = rdslope; + } + if (rdslope > max) { + max = rdslope; + } + } /* passno */ + + /* fixed_quality */ + tcd_tile->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0)); + tilec->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0)); + } /* cbklno */ + } /* precno */ + } /* bandno */ + } /* resno */ + + maxSE += (((double)(1 << tcd->image->comps[compno].prec) - 1.0) + * ((double)(1 << tcd->image->comps[compno].prec) -1.0)) + * ((double)(tilec->numpix)); + } /* compno */ + + /* index file */ + if(cstr_info) { + opj_tile_info_t *tile_info = &cstr_info->tile[tcd->tcd_tileno]; + tile_info->numpix = tcd_tile->numpix; + tile_info->distotile = tcd_tile->distotile; + tile_info->thresh = (double *) opj_malloc(tcd_tcp->numlayers * sizeof(double)); + } + + for (layno = 0; layno < tcd_tcp->numlayers; layno++) { + double lo = min; + double hi = max; + int success = 0; + int maxlen = tcd_tcp->rates[layno] ? int_min(((int) ceil(tcd_tcp->rates[layno])), len) : len; + double goodthresh = 0; + double stable_thresh = 0; + int i; + double distotarget; /* fixed_quality */ + + /* fixed_quality */ + distotarget = tcd_tile->distotile - ((K * maxSE) / pow((float)10, tcd_tcp->distoratio[layno] / 10)); + + /* Don't try to find an optimal threshold but rather take everything not included yet, if + -r xx,yy,zz,0 (disto_alloc == 1 and rates == 0) + -q xx,yy,zz,0 (fixed_quality == 1 and distoratio == 0) + ==> possible to have some lossy layers and the last layer for sure lossless */ + if ( ((cp->disto_alloc==1) && (tcd_tcp->rates[layno]>0)) || ((cp->fixed_quality==1) && (tcd_tcp->distoratio[layno]>0))) { + opj_t2_t *t2 = t2_create(tcd->cinfo, tcd->image, cp); + double thresh = 0; + + for (i = 0; i < 128; i++) { + int l = 0; + double distoachieved = 0; /* fixed_quality */ + thresh = (lo + hi) / 2; + + tcd_makelayer(tcd, layno, thresh, 0); + + if (cp->fixed_quality) { /* fixed_quality */ + if(cp->cinema){ + l = t2_encode_packets(t2,tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen, cstr_info,tcd->cur_tp_num,tcd->tp_pos,tcd->cur_pino,THRESH_CALC, tcd->cur_totnum_tp); + if (l == -999) { + lo = thresh; + continue; + }else{ + distoachieved = layno == 0 ? + tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno]; + if (distoachieved < distotarget) { + hi=thresh; + stable_thresh = thresh; + continue; + }else{ + lo=thresh; + } + } + }else{ + distoachieved = (layno == 0) ? + tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]); + if (distoachieved < distotarget) { + hi = thresh; + stable_thresh = thresh; + continue; + } + lo = thresh; + } + } else { + l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen, cstr_info,tcd->cur_tp_num,tcd->tp_pos,tcd->cur_pino,THRESH_CALC, tcd->cur_totnum_tp); + /* TODO: what to do with l ??? seek / tell ??? */ + /* opj_event_msg(tcd->cinfo, EVT_INFO, "rate alloc: len=%d, max=%d\n", l, maxlen); */ + if (l == -999) { + lo = thresh; + continue; + } + hi = thresh; + stable_thresh = thresh; + } + } + success = 1; + goodthresh = stable_thresh == 0? thresh : stable_thresh; + t2_destroy(t2); + } else { + success = 1; + goodthresh = min; + } + + if (!success) { + return false; + } + + if(cstr_info) { /* Threshold for Marcela Index */ + cstr_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh; + } + tcd_makelayer(tcd, layno, goodthresh, 1); + + /* fixed_quality */ + cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]); + } + + return true; +} + +int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_codestream_info_t *cstr_info) { + int compno; + int l, i, numpacks = 0; + opj_tcd_tile_t *tile = NULL; + opj_tcp_t *tcd_tcp = NULL; + opj_cp_t *cp = NULL; + + opj_tcp_t *tcp = &tcd->cp->tcps[0]; + opj_tccp_t *tccp = &tcp->tccps[0]; + opj_image_t *image = tcd->image; + + opj_t1_t *t1 = NULL; /* T1 component */ + opj_t2_t *t2 = NULL; /* T2 component */ + + tcd->tcd_tileno = tileno; + tcd->tcd_tile = tcd->tcd_image->tiles; + tcd->tcp = &tcd->cp->tcps[tileno]; + + tile = tcd->tcd_tile; + tcd_tcp = tcd->tcp; + cp = tcd->cp; + + if(tcd->cur_tp_num == 0){ + tcd->encoding_time = opj_clock(); /* time needed to encode a tile */ + /* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */ + if(cstr_info) { + opj_tcd_tilecomp_t *tilec_idx = &tile->comps[0]; /* based on component 0 */ + for (i = 0; i < tilec_idx->numresolutions; i++) { + opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[i]; + + cstr_info->tile[tileno].pw[i] = res_idx->pw; + cstr_info->tile[tileno].ph[i] = res_idx->ph; + + numpacks += res_idx->pw * res_idx->ph; + + cstr_info->tile[tileno].pdx[i] = tccp->prcw[i]; + cstr_info->tile[tileno].pdy[i] = tccp->prch[i]; + } + cstr_info->tile[tileno].packet = (opj_packet_info_t*) opj_calloc(cstr_info->numcomps * cstr_info->numlayers * numpacks, sizeof(opj_packet_info_t)); + } + /* << INDEX */ + + /*---------------TILE-------------------*/ + + for (compno = 0; compno < tile->numcomps; compno++) { + int x, y; + + int adjust = image->comps[compno].sgnd ? 0 : 1 << (image->comps[compno].prec - 1); + int offset_x = int_ceildiv(image->x0, image->comps[compno].dx); + int offset_y = int_ceildiv(image->y0, image->comps[compno].dy); + + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + int tw = tilec->x1 - tilec->x0; + int w = int_ceildiv(image->x1 - image->x0, image->comps[compno].dx); + + /* extract tile data */ + + if (tcd_tcp->tccps[compno].qmfbid == 1) { + for (y = tilec->y0; y < tilec->y1; y++) { + /* start of the src tile scanline */ + int *data = &image->comps[compno].data[(tilec->x0 - offset_x) + (y - offset_y) * w]; + /* start of the dst tile scanline */ + int *tile_data = &tilec->data[(y - tilec->y0) * tw]; + for (x = tilec->x0; x < tilec->x1; x++) { + *tile_data++ = *data++ - adjust; + } + } + } else if (tcd_tcp->tccps[compno].qmfbid == 0) { + for (y = tilec->y0; y < tilec->y1; y++) { + /* start of the src tile scanline */ + int *data = &image->comps[compno].data[(tilec->x0 - offset_x) + (y - offset_y) * w]; + /* start of the dst tile scanline */ + int *tile_data = &tilec->data[(y - tilec->y0) * tw]; + for (x = tilec->x0; x < tilec->x1; x++) { + *tile_data++ = (*data++ - adjust) << 11; + } + + } + } + } + + /*----------------MCT-------------------*/ + if (tcd_tcp->mct) { + int samples = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0); + if (tcd_tcp->tccps[0].qmfbid == 0) { + mct_encode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, samples); + } else { + mct_encode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, samples); + } + } + + /*----------------DWT---------------------*/ + + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + if (tcd_tcp->tccps[compno].qmfbid == 1) { + dwt_encode(tilec); + } else if (tcd_tcp->tccps[compno].qmfbid == 0) { + dwt_encode_real(tilec); + } + } + + /*------------------TIER1-----------------*/ + t1 = t1_create(tcd->cinfo); + t1_encode_cblks(t1, tile, tcd_tcp); + t1_destroy(t1); + + /*-----------RATE-ALLOCATE------------------*/ + + /* INDEX */ + if(cstr_info) { + cstr_info->index_write = 0; + } + if (cp->disto_alloc || cp->fixed_quality) { /* fixed_quality */ + /* Normal Rate/distortion allocation */ + tcd_rateallocate(tcd, dest, len, cstr_info); + } else { + /* Fixed layer allocation */ + tcd_rateallocate_fixed(tcd); + } + } + /*--------------TIER2------------------*/ + + /* INDEX */ + if(cstr_info) { + cstr_info->index_write = 1; + } + + t2 = t2_create(tcd->cinfo, image, cp); + l = t2_encode_packets(t2,tileno, tile, tcd_tcp->numlayers, dest, len, cstr_info,tcd->tp_num,tcd->tp_pos,tcd->cur_pino,FINAL_PASS,tcd->cur_totnum_tp); + t2_destroy(t2); + + /*---------------CLEAN-------------------*/ + + + if(tcd->cur_tp_num == tcd->cur_totnum_tp - 1){ + tcd->encoding_time = opj_clock() - tcd->encoding_time; + opj_event_msg(tcd->cinfo, EVT_INFO, "- tile encoded in %f s\n", tcd->encoding_time); + + /* cleaning memory */ + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + opj_aligned_free(tilec->data); + } + } + + return l; +} + +bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno, opj_codestream_info_t *cstr_info) { + int l; + int compno; + int eof = 0; + double tile_time, t1_time, dwt_time; + opj_tcd_tile_t *tile = NULL; + + opj_t1_t *t1 = NULL; /* T1 component */ + opj_t2_t *t2 = NULL; /* T2 component */ + + tcd->tcd_tileno = tileno; + tcd->tcd_tile = &(tcd->tcd_image->tiles[tileno]); + tcd->tcp = &(tcd->cp->tcps[tileno]); + tile = tcd->tcd_tile; + + tile_time = opj_clock(); /* time needed to decode a tile */ + opj_event_msg(tcd->cinfo, EVT_INFO, "tile %d of %d\n", tileno + 1, tcd->cp->tw * tcd->cp->th); + + /* INDEX >> */ + if(cstr_info) { + int resno, compno, numprec = 0; + for (compno = 0; compno < cstr_info->numcomps; compno++) { + opj_tcp_t *tcp = &tcd->cp->tcps[0]; + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_tcd_tilecomp_t *tilec_idx = &tile->comps[compno]; + for (resno = 0; resno < tilec_idx->numresolutions; resno++) { + opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[resno]; + cstr_info->tile[tileno].pw[resno] = res_idx->pw; + cstr_info->tile[tileno].ph[resno] = res_idx->ph; + numprec += res_idx->pw * res_idx->ph; + if (tccp->csty & J2K_CP_CSTY_PRT) { + cstr_info->tile[tileno].pdx[resno] = tccp->prcw[resno]; + cstr_info->tile[tileno].pdy[resno] = tccp->prch[resno]; + } + else { + cstr_info->tile[tileno].pdx[resno] = 15; + cstr_info->tile[tileno].pdx[resno] = 15; + } + } + } + cstr_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(cstr_info->numlayers * numprec * sizeof(opj_packet_info_t)); + cstr_info->packno = 0; + } + /* << INDEX */ + + /*--------------TIER2------------------*/ + + t2 = t2_create(tcd->cinfo, tcd->image, tcd->cp); + l = t2_decode_packets(t2, src, len, tileno, tile, cstr_info); + t2_destroy(t2); + + if (l == -999) { + eof = 1; + opj_event_msg(tcd->cinfo, EVT_ERROR, "tcd_decode: incomplete bistream\n"); + } + + /*------------------TIER1-----------------*/ + + t1_time = opj_clock(); /* time needed to decode a tile */ + t1 = t1_create(tcd->cinfo); + for (compno = 0; compno < tile->numcomps; ++compno) { + opj_tcd_tilecomp_t* tilec = &tile->comps[compno]; + /* The +3 is headroom required by the vectorized DWT */ + tilec->data = (int*) opj_aligned_malloc((((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0))+3) * sizeof(int)); + t1_decode_cblks(t1, tilec, &tcd->tcp->tccps[compno]); + } + t1_destroy(t1); + t1_time = opj_clock() - t1_time; + opj_event_msg(tcd->cinfo, EVT_INFO, "- tiers-1 took %f s\n", t1_time); + + /*----------------DWT---------------------*/ + + dwt_time = opj_clock(); /* time needed to decode a tile */ + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + int numres2decode; + + if (tcd->cp->reduce != 0) { + tcd->image->comps[compno].resno_decoded = + tile->comps[compno].numresolutions - tcd->cp->reduce - 1; + if (tcd->image->comps[compno].resno_decoded < 0) { + opj_event_msg(tcd->cinfo, EVT_ERROR, "Error decoding tile. The number of resolutions to remove [%d+1] is higher than the number " + " of resolutions in the original codestream [%d]\nModify the cp_reduce parameter.\n", tcd->cp->reduce, tile->comps[compno].numresolutions); + return false; + } + } + + numres2decode = tcd->image->comps[compno].resno_decoded + 1; + if(numres2decode > 0){ + if (tcd->tcp->tccps[compno].qmfbid == 1) { + dwt_decode(tilec, numres2decode); + } else { + dwt_decode_real(tilec, numres2decode); + } + } + } + dwt_time = opj_clock() - dwt_time; + opj_event_msg(tcd->cinfo, EVT_INFO, "- dwt took %f s\n", dwt_time); + + /*----------------MCT-------------------*/ + + if (tcd->tcp->mct) { + int n = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0); + if (tcd->tcp->tccps[0].qmfbid == 1) { + mct_decode( + tile->comps[0].data, + tile->comps[1].data, + tile->comps[2].data, + n); + } else { + mct_decode_real( + (float*)tile->comps[0].data, + (float*)tile->comps[1].data, + (float*)tile->comps[2].data, + n); + } + } + + /*---------------TILE-------------------*/ + + for (compno = 0; compno < tile->numcomps; ++compno) { + opj_tcd_tilecomp_t* tilec = &tile->comps[compno]; + opj_image_comp_t* imagec = &tcd->image->comps[compno]; + opj_tcd_resolution_t* res = &tilec->resolutions[imagec->resno_decoded]; + int adjust = imagec->sgnd ? 0 : 1 << (imagec->prec - 1); + int min = imagec->sgnd ? -(1 << (imagec->prec - 1)) : 0; + int max = imagec->sgnd ? (1 << (imagec->prec - 1)) - 1 : (1 << imagec->prec) - 1; + + int tw = tilec->x1 - tilec->x0; + int w = imagec->w; + + int offset_x = int_ceildivpow2(imagec->x0, imagec->factor); + int offset_y = int_ceildivpow2(imagec->y0, imagec->factor); + + int i, j; + if(!imagec->data){ + imagec->data = (int*) opj_malloc(imagec->w * imagec->h * sizeof(int)); + } + if(tcd->tcp->tccps[compno].qmfbid == 1) { + for(j = res->y0; j < res->y1; ++j) { + for(i = res->x0; i < res->x1; ++i) { + int v = tilec->data[i - res->x0 + (j - res->y0) * tw]; + v += adjust; + imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max); + } + } + }else{ + for(j = res->y0; j < res->y1; ++j) { + for(i = res->x0; i < res->x1; ++i) { + float tmp = ((float*)tilec->data)[i - res->x0 + (j - res->y0) * tw]; + int v = lrintf(tmp); + v += adjust; + imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max); + } + } + } + opj_aligned_free(tilec->data); + } + + tile_time = opj_clock() - tile_time; /* time needed to decode a tile */ + opj_event_msg(tcd->cinfo, EVT_INFO, "- tile decoded in %f s\n", tile_time); + + if (eof) { + return false; + } + + return true; +} + +void tcd_free_decode(opj_tcd_t *tcd) { + opj_tcd_image_t *tcd_image = tcd->tcd_image; + opj_free(tcd_image->tiles); +} + +void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno) { + int compno,resno,bandno,precno; + + opj_tcd_image_t *tcd_image = tcd->tcd_image; + + opj_tcd_tile_t *tile = &tcd_image->tiles[tileno]; + for (compno = 0; compno < tile->numcomps; compno++) { + opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; + for (resno = 0; resno < tilec->numresolutions; resno++) { + opj_tcd_resolution_t *res = &tilec->resolutions[resno]; + for (bandno = 0; bandno < res->numbands; bandno++) { + opj_tcd_band_t *band = &res->bands[bandno]; + for (precno = 0; precno < res->ph * res->pw; precno++) { + opj_tcd_precinct_t *prec = &band->precincts[precno]; + if (prec->imsbtree != NULL) tgt_destroy(prec->imsbtree); + if (prec->incltree != NULL) tgt_destroy(prec->incltree); + } + opj_free(band->precincts); + } + } + opj_free(tilec->resolutions); + } + opj_free(tile->comps); +} + + + diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/tcd.h b/contrib/menuetlibc/openjpeg/libopenjpeg/tcd.h new file mode 100644 index 0000000000..a5330730f4 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/tcd.h @@ -0,0 +1,286 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ +#ifndef __TCD_H +#define __TCD_H +/** +@file tcd.h +@brief Implementation of a tile coder/decoder (TCD) + +The functions in TCD.C have for goal to encode or decode each tile independently from +each other. The functions in TCD.C are used by some function in J2K.C. +*/ + +/** @defgroup TCD TCD - Implementation of a tile coder/decoder */ +/*@{*/ + +/** +FIXME: documentation +*/ +typedef struct opj_tcd_seg { + unsigned char** data; + int dataindex; + int numpasses; + int len; + int maxpasses; + int numnewpasses; + int newlen; +} opj_tcd_seg_t; + +/** +FIXME: documentation +*/ +typedef struct opj_tcd_pass { + int rate; + double distortiondec; + int term, len; +} opj_tcd_pass_t; + +/** +FIXME: documentation +*/ +typedef struct opj_tcd_layer { + int numpasses; /* Number of passes in the layer */ + int len; /* len of information */ + double disto; /* add for index (Cfr. Marcela) */ + unsigned char *data; /* data */ +} opj_tcd_layer_t; + +/** +FIXME: documentation +*/ +typedef struct opj_tcd_cblk_enc { + unsigned char* data; /* Data */ + opj_tcd_layer_t* layers; /* layer information */ + opj_tcd_pass_t* passes; /* information about the passes */ + int x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */ + int numbps; + int numlenbits; + int numpasses; /* number of pass already done for the code-blocks */ + int numpassesinlayers; /* number of passes in the layer */ + int totalpasses; /* total number of passes */ +} opj_tcd_cblk_enc_t; + +typedef struct opj_tcd_cblk_dec { + unsigned char* data; /* Data */ + opj_tcd_seg_t* segs; /* segments informations */ + int x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */ + int numbps; + int numlenbits; + int len; /* length */ + int numnewpasses; /* number of pass added to the code-blocks */ + int numsegs; /* number of segments */ +} opj_tcd_cblk_dec_t; + +/** +FIXME: documentation +*/ +typedef struct opj_tcd_precinct { + int x0, y0, x1, y1; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */ + int cw, ch; /* number of precinct in width and heigth */ + union{ /* code-blocks informations */ + opj_tcd_cblk_enc_t* enc; + opj_tcd_cblk_dec_t* dec; + } cblks; + opj_tgt_tree_t *incltree; /* inclusion tree */ + opj_tgt_tree_t *imsbtree; /* IMSB tree */ +} opj_tcd_precinct_t; + +/** +FIXME: documentation +*/ +typedef struct opj_tcd_band { + int x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */ + int bandno; + opj_tcd_precinct_t *precincts; /* precinct information */ + int numbps; + float stepsize; +} opj_tcd_band_t; + +/** +FIXME: documentation +*/ +typedef struct opj_tcd_resolution { + int x0, y0, x1, y1; /* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */ + int pw, ph; + int numbands; /* number sub-band for the resolution level */ + opj_tcd_band_t bands[3]; /* subband information */ +} opj_tcd_resolution_t; + +/** +FIXME: documentation +*/ +typedef struct opj_tcd_tilecomp { + int x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */ + int numresolutions; /* number of resolutions level */ + opj_tcd_resolution_t *resolutions; /* resolutions information */ + int *data; /* data of the component */ + int numpix; /* add fixed_quality */ +} opj_tcd_tilecomp_t; + +/** +FIXME: documentation +*/ +typedef struct opj_tcd_tile { + int x0, y0, x1, y1; /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */ + int numcomps; /* number of components in tile */ + opj_tcd_tilecomp_t *comps; /* Components information */ + int numpix; /* add fixed_quality */ + double distotile; /* add fixed_quality */ + double distolayer[100]; /* add fixed_quality */ + /** packet number */ + int packno; +} opj_tcd_tile_t; + +/** +FIXME: documentation +*/ +typedef struct opj_tcd_image { + int tw, th; /* number of tiles in width and heigth */ + opj_tcd_tile_t *tiles; /* Tiles information */ +} opj_tcd_image_t; + +/** +Tile coder/decoder +*/ +typedef struct opj_tcd { + /** Position of the tilepart flag in Progression order*/ + int tp_pos; + /** Tile part number*/ + int tp_num; + /** Current tile part number*/ + int cur_tp_num; + /** Total number of tileparts of the current tile*/ + int cur_totnum_tp; + /** Current Packet iterator number */ + int cur_pino; + /** codec context */ + opj_common_ptr cinfo; + + /** info on each image tile */ + opj_tcd_image_t *tcd_image; + /** image */ + opj_image_t *image; + /** coding parameters */ + opj_cp_t *cp; + /** pointer to the current encoded/decoded tile */ + opj_tcd_tile_t *tcd_tile; + /** coding/decoding parameters common to all tiles */ + opj_tcp_t *tcp; + /** current encoded/decoded tile */ + int tcd_tileno; + /** Time taken to encode a tile*/ + double encoding_time; +} opj_tcd_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ + +/** +Dump the content of a tcd structure +*/ +void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img); +/** +Create a new TCD handle +@param cinfo Codec context info +@return Returns a new TCD handle if successful returns NULL otherwise +*/ +opj_tcd_t* tcd_create(opj_common_ptr cinfo); +/** +Destroy a previously created TCD handle +@param tcd TCD handle to destroy +*/ +void tcd_destroy(opj_tcd_t *tcd); +/** +Initialize the tile coder (allocate the memory) +@param tcd TCD handle +@param image Raw image +@param cp Coding parameters +@param curtileno Number that identifies the tile that will be encoded +*/ +void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno); +/** +Free the memory allocated for encoding +@param tcd TCD handle +*/ +void tcd_free_encode(opj_tcd_t *tcd); +/** +Initialize the tile coder (reuses the memory allocated by tcd_malloc_encode) +@param tcd TCD handle +@param image Raw image +@param cp Coding parameters +@param curtileno Number that identifies the tile that will be encoded +*/ +void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno); +/** +Initialize the tile decoder +@param tcd TCD handle +@param image Raw image +@param cp Coding parameters +*/ +void tcd_malloc_decode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp); +void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int tileno, opj_codestream_info_t *cstr_info); +void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final); +void tcd_rateallocate_fixed(opj_tcd_t *tcd); +void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final); +bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_codestream_info_t *cstr_info); +/** +Encode a tile from the raw image into a buffer +@param tcd TCD handle +@param tileno Number that identifies one of the tiles to be encoded +@param dest Destination buffer +@param len Length of destination buffer +@param cstr_info Codestream information structure +@return +*/ +int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_codestream_info_t *cstr_info); +/** +Decode a tile from a buffer into a raw image +@param tcd TCD handle +@param src Source buffer +@param len Length of source buffer +@param tileno Number that identifies one of the tiles to be decoded +@param cstr_info Codestream information structure +*/ +bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno, opj_codestream_info_t *cstr_info); +/** +Free the memory allocated for decoding +@param tcd TCD handle +*/ +void tcd_free_decode(opj_tcd_t *tcd); +void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno); + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __TCD_H */ diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/tgt.c b/contrib/menuetlibc/openjpeg/libopenjpeg/tgt.c new file mode 100644 index 0000000000..a5dbcd3cef --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/tgt.c @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "opj_includes.h" + +/* +========================================================== + Tag-tree coder interface +========================================================== +*/ + +opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv) { + int nplh[32]; + int nplv[32]; + opj_tgt_node_t *node = NULL; + opj_tgt_node_t *parentnode = NULL; + opj_tgt_node_t *parentnode0 = NULL; + opj_tgt_tree_t *tree = NULL; + int i, j, k; + int numlvls; + int n; + + tree = (opj_tgt_tree_t *) opj_malloc(sizeof(opj_tgt_tree_t)); + if(!tree) return NULL; + tree->numleafsh = numleafsh; + tree->numleafsv = numleafsv; + + numlvls = 0; + nplh[0] = numleafsh; + nplv[0] = numleafsv; + tree->numnodes = 0; + do { + n = nplh[numlvls] * nplv[numlvls]; + nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2; + nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2; + tree->numnodes += n; + ++numlvls; + } while (n > 1); + + /* ADD */ + if (tree->numnodes == 0) { + opj_free(tree); + return NULL; + } + + tree->nodes = (opj_tgt_node_t*) opj_calloc(tree->numnodes, sizeof(opj_tgt_node_t)); + if(!tree->nodes) { + opj_free(tree); + return NULL; + } + + node = tree->nodes; + parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv]; + parentnode0 = parentnode; + + for (i = 0; i < numlvls - 1; ++i) { + for (j = 0; j < nplv[i]; ++j) { + k = nplh[i]; + while (--k >= 0) { + node->parent = parentnode; + ++node; + if (--k >= 0) { + node->parent = parentnode; + ++node; + } + ++parentnode; + } + if ((j & 1) || j == nplv[i] - 1) { + parentnode0 = parentnode; + } else { + parentnode = parentnode0; + parentnode0 += nplh[i]; + } + } + } + node->parent = 0; + + tgt_reset(tree); + + return tree; +} + +void tgt_destroy(opj_tgt_tree_t *tree) { + opj_free(tree->nodes); + opj_free(tree); +} + +void tgt_reset(opj_tgt_tree_t *tree) { + int i; + + if (NULL == tree) + return; + + for (i = 0; i < tree->numnodes; i++) { + tree->nodes[i].value = 999; + tree->nodes[i].low = 0; + tree->nodes[i].known = 0; + } +} + +void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value) { + opj_tgt_node_t *node; + node = &tree->nodes[leafno]; + while (node && node->value > value) { + node->value = value; + node = node->parent; + } +} + +void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) { + opj_tgt_node_t *stk[31]; + opj_tgt_node_t **stkptr; + opj_tgt_node_t *node; + int low; + + stkptr = stk; + node = &tree->nodes[leafno]; + while (node->parent) { + *stkptr++ = node; + node = node->parent; + } + + low = 0; + for (;;) { + if (low > node->low) { + node->low = low; + } else { + low = node->low; + } + + while (low < threshold) { + if (low >= node->value) { + if (!node->known) { + bio_write(bio, 1, 1); + node->known = 1; + } + break; + } + bio_write(bio, 0, 1); + ++low; + } + + node->low = low; + if (stkptr == stk) + break; + node = *--stkptr; + } +} + +int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) { + opj_tgt_node_t *stk[31]; + opj_tgt_node_t **stkptr; + opj_tgt_node_t *node; + int low; + + stkptr = stk; + node = &tree->nodes[leafno]; + while (node->parent) { + *stkptr++ = node; + node = node->parent; + } + + low = 0; + for (;;) { + if (low > node->low) { + node->low = low; + } else { + low = node->low; + } + while (low < threshold && low < node->value) { + if (bio_read(bio, 1)) { + node->value = low; + } else { + ++low; + } + } + node->low = low; + if (stkptr == stk) { + break; + } + node = *--stkptr; + } + + return (node->value < threshold) ? 1 : 0; +} diff --git a/contrib/menuetlibc/openjpeg/libopenjpeg/tgt.h b/contrib/menuetlibc/openjpeg/libopenjpeg/tgt.h new file mode 100644 index 0000000000..c08c8da0af --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libopenjpeg/tgt.h @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __TGT_H +#define __TGT_H +/** +@file tgt.h +@brief Implementation of a tag-tree coder (TGT) + +The functions in TGT.C have for goal to realize a tag-tree coder. The functions in TGT.C +are used by some function in T2.C. +*/ + +/** @defgroup TGT TGT - Implementation of a tag-tree coder */ +/*@{*/ + +/** +Tag node +*/ +typedef struct opj_tgt_node { + struct opj_tgt_node *parent; + int value; + int low; + int known; +} opj_tgt_node_t; + +/** +Tag tree +*/ +typedef struct opj_tgt_tree { + int numleafsh; + int numleafsv; + int numnodes; + opj_tgt_node_t *nodes; +} opj_tgt_tree_t; + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Create a tag-tree +@param numleafsh Width of the array of leafs of the tree +@param numleafsv Height of the array of leafs of the tree +@return Returns a new tag-tree if successful, returns NULL otherwise +*/ +opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv); +/** +Destroy a tag-tree, liberating memory +@param tree Tag-tree to destroy +*/ +void tgt_destroy(opj_tgt_tree_t *tree); +/** +Reset a tag-tree (set all leaves to 0) +@param tree Tag-tree to reset +*/ +void tgt_reset(opj_tgt_tree_t *tree); +/** +Set the value of a leaf of a tag-tree +@param tree Tag-tree to modify +@param leafno Number that identifies the leaf to modify +@param value New value of the leaf +*/ +void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value); +/** +Encode the value of a leaf of the tag-tree up to a given threshold +@param bio Pointer to a BIO handle +@param tree Tag-tree to modify +@param leafno Number that identifies the leaf to encode +@param threshold Threshold to use when encoding value of the leaf +*/ +void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold); +/** +Decode the value of a leaf of the tag-tree up to a given threshold +@param bio Pointer to a BIO handle +@param tree Tag-tree to decode +@param leafno Number that identifies the leaf to decode +@param threshold Threshold to use when decoding value of the leaf +@return Returns 1 if the node's value < threshold, returns 0 otherwise +*/ +int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold); +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __TGT_H */ diff --git a/contrib/menuetlibc/openjpeg/libs/lcms2/lcms2.h b/contrib/menuetlibc/openjpeg/libs/lcms2/lcms2.h new file mode 100755 index 0000000000..75a3857aee --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libs/lcms2/lcms2.h @@ -0,0 +1,1722 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// 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 OR COPYRIGHT HOLDERS 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. +// +//--------------------------------------------------------------------------------- +// +// Version 2.0 +// + +#ifndef _lcms2_H + +// ********** Configuration toggles **************************************** + +// Uncomment this one if you are using big endian machines +// #define CMS_USE_BIG_ENDIAN 1 + +// Uncomment this one if your compiler/machine does NOT support the +// "long long" type. +// #define CMS_DONT_USE_INT64 1 + +// Uncomment this if your compiler doesn't work with fast floor function +// #define CMS_DONT_USE_FAST_FLOOR 1 + +// Uncomment this line if your system does not support multithreading +#define CMS_DONT_USE_PTHREADS 1 + +// Uncomment this line if you want lcms to use the black point tag in profile, +// if commented, lcms will compute the black point by its own. +// It is safer to leave it commented out +// #define CMS_USE_PROFILE_BLACK_POINT_TAG 1 + +// Uncomment this line if you are compiling as C++ and want a C++ API +// #define CMS_USE_CPP_API + +// Uncomment this line if you need strict CGATS syntax. Makes CGATS files to +// require "KEYWORD" on undefined identifiers, keep it comented out unless needed +// #define CMS_STRICT_CGATS 1 + +// ********** End of configuration toggles ****************************** + +// Needed for streams +#include + +// Needed for portability (C99 per 7.1.2) +#include +#include +#include + +#ifndef CMS_USE_CPP_API +# ifdef __cplusplus +extern "C" { +# endif +#endif + +// Version/release +#define LCMS_VERSION 2000 + +// I will give the chance of redefining basic types for compilers that are not fully C99 compliant +#ifndef CMS_BASIC_TYPES_ALREADY_DEFINED + +// Base types +typedef unsigned char cmsUInt8Number; // That is guaranteed by the C99 spec +typedef signed char cmsInt8Number; // That is guaranteed by the C99 spec + +// IEEE float storage numbers +typedef float cmsFloat32Number; +typedef double cmsFloat64Number; + +// 16-bit base types +#if (USHRT_MAX == 65535U) + typedef unsigned short cmsUInt16Number; +#elif (UINT_MAX == 65535U) + typedef unsigned int cmsUInt16Number; +#else +# error "Unable to find 16 bits unsigned type, unsupported compiler" +#endif + +#if (SHRT_MAX == 32767) + typedef short cmsInt16Number; +#elif (INT_MAX == 32767) + typedef int cmsInt16Number; +#else +# error "Unable to find 16 bits signed type, unsupported compiler" +#endif + +// 32-bit base type +#if (UINT_MAX == 4294967295U) + typedef unsigned int cmsUInt32Number; +#elif (ULONG_MAX == 4294967295U) + typedef unsigned long cmsUInt32Number; +#else +# error "Unable to find 32 bit unsigned type, unsupported compiler" +#endif + +#if (INT_MAX == +2147483647) + typedef int cmsInt32Number; +#elif (LONG_MAX == +2147483647) + typedef long cmsInt32Number; +#else +# error "Unable to find 32 bit signed type, unsupported compiler" +#endif + +// 64-bit base types +#ifndef CMS_DONT_USE_INT64 +# if (ULONG_MAX == 18446744073709551615U) + typedef unsigned long cmsUInt64Number; +# elif (ULLONG_MAX == 18446744073709551615U) + typedef unsigned long long cmsUInt64Number; +# else +# define CMS_DONT_USE_INT64 1 +# endif +# if (LONG_MAX == +9223372036854775807) + typedef long cmsInt64Number; +# elif (LLONG_MAX == +9223372036854775807) + typedef long long cmsInt64Number; +# else +# define CMS_DONT_USE_INT64 1 +# endif +#endif +#endif + +// In the case 64 bit numbers are not supported by the compiler +#ifdef CMS_DONT_USE_INT64 + typedef cmsUInt32Number cmsUInt64Number[2]; + typedef cmsInt32Number cmsInt64Number[2]; +#endif + +// Derivative types +typedef cmsUInt32Number cmsSignature; +typedef cmsUInt16Number cmsU8Fixed8Number; +typedef cmsInt32Number cmsS15Fixed16Number; +typedef cmsUInt32Number cmsU16Fixed16Number; + +// Boolean type, which will be using the native integer +typedef int cmsBool; + +// Try to detect windows +#if defined (_WIN32) || defined(_WIN64) || defined(WIN32) || defined(_WIN32_) +# define CMS_IS_WINDOWS_ 1 +#endif + +#ifdef _MSC_VER +# define CMS_IS_WINDOWS_ 1 +#endif + +#ifdef __BORLANDC__ +# define CMS_IS_WINDOWS_ 1 +#endif + +// Try to detect big endian platforms. This list can be endless, so only some checks are performed over here. +// you can pass this toggle to the compiler by using -DCMS_USE_BIG_ENDIAN or something similar + +#if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN) +# define CMS_USE_BIG_ENDIAN 1 +#endif + +#if defined(__sgi__) || defined(__sgi) || defined(__powerpc__) || defined(sparc) +# define CMS_USE_BIG_ENDIAN 1 +#endif + +#if defined(__ppc__) || defined(__s390__) || defined(__s390x__) +# define CMS_USE_BIG_ENDIAN 1 +#endif + +#ifdef TARGET_CPU_PPC +# define CMS_USE_BIG_ENDIAN 1 +#endif + +#ifdef macintosh +# ifndef __LITTLE_ENDIAN__ +# define CMS_USE_BIG_ENDIAN 1 +# endif +#endif + +// Calling convention -- this is hardly platform and compiler dependent +#ifdef CMS_IS_WINDOWS_ +# if defined(CMS_DLL) || defined(CMS_DLL_BUILD) +# ifdef __BORLANDC__ +# define CMSEXPORT __stdcall _export +# define CMSAPI +# else +# define CMSEXPORT _stdcall +# ifdef CMS_DLL_BUILD +# define CMSAPI __declspec(dllexport) +# else +# define CMSAPI __declspec(dllimport) +# endif +# endif +# else +# define CMSEXPORT +# define CMSAPI +# endif +#else +# define CMSEXPORT +# define CMSAPI +#endif + +// Some common definitions +#define cmsMAX_PATH 256 + +#ifndef FALSE +# define FALSE 0 +#endif +#ifndef TRUE +# define TRUE 1 +#endif + +// D50 XYZ normalized to Y=1.0 +#define cmsD50X 0.9642 +#define cmsD50Y 1.0 +#define cmsD50Z 0.8249 + +// V4 perceptual black +#define cmsPERCEPTUAL_BLACK_X 0.00336 +#define cmsPERCEPTUAL_BLACK_Y 0.0034731 +#define cmsPERCEPTUAL_BLACK_Z 0.00287 + +// Definitions in ICC spec +#define cmsMagicNumber 0x61637370 // 'acsp' +#define lcmsSignature 0x6c636d73 // 'lcms' + + +// Base ICC type definitions +typedef enum { + cmsSigChromaticityType = 0x6368726D, // 'chrm' + cmsSigColorantOrderType = 0x636C726F, // 'clro' + cmsSigColorantTableType = 0x636C7274, // 'clrt' + cmsSigCrdInfoType = 0x63726469, // 'crdi' + cmsSigCurveType = 0x63757276, // 'curv' + cmsSigDataType = 0x64617461, // 'data' + cmsSigDateTimeType = 0x6474696D, // 'dtim' + cmsSigDeviceSettingsType = 0x64657673, // 'devs' + cmsSigLut16Type = 0x6d667432, // 'mft2' + cmsSigLut8Type = 0x6d667431, // 'mft1' + cmsSigLutAtoBType = 0x6d414220, // 'mAB ' + cmsSigLutBtoAType = 0x6d424120, // 'mBA ' + cmsSigMeasurementType = 0x6D656173, // 'meas' + cmsSigMultiLocalizedUnicodeType = 0x6D6C7563, // 'mluc' + cmsSigMultiProcessElementType = 0x6D706574, // 'mpet' + cmsSigNamedColorType = 0x6E636f6C, // 'ncol' -- DEPRECATED! + cmsSigNamedColor2Type = 0x6E636C32, // 'ncl2' + cmsSigParametricCurveType = 0x70617261, // 'para' + cmsSigProfileSequenceDescType = 0x70736571, // 'pseq' + cmsSigProfileSequenceIdType = 0x70736964, // 'psid' + cmsSigResponseCurveSet16Type = 0x72637332, // 'rcs2' + cmsSigS15Fixed16ArrayType = 0x73663332, // 'sf32' + cmsSigScreeningType = 0x7363726E, // 'scrn' + cmsSigSignatureType = 0x73696720, // 'sig ' + cmsSigTextType = 0x74657874, // 'text' + cmsSigTextDescriptionType = 0x64657363, // 'desc' + cmsSigU16Fixed16ArrayType = 0x75663332, // 'uf32' + cmsSigUcrBgType = 0x62666420, // 'bfd ' + cmsSigUInt16ArrayType = 0x75693136, // 'ui16' + cmsSigUInt32ArrayType = 0x75693332, // 'ui32' + cmsSigUInt64ArrayType = 0x75693634, // 'ui64' + cmsSigUInt8ArrayType = 0x75693038, // 'ui08' + cmsSigViewingConditionsType = 0x76696577, // 'view' + cmsSigXYZType = 0x58595A20, // 'XYZ ' + cmsSigVcgtType = 0x76636774 // 'vcgt' + +} cmsTagTypeSignature; + +// Base ICC tag definitions +typedef enum { + cmsSigAToB0Tag = 0x41324230, // 'A2B0' + cmsSigAToB1Tag = 0x41324231, // 'A2B1' + cmsSigAToB2Tag = 0x41324232, // 'A2B2' + cmsSigBlueColorantTag = 0x6258595A, // 'bXYZ' + cmsSigBlueMatrixColumnTag = 0x6258595A, // 'bXYZ' + cmsSigBlueTRCTag = 0x62545243, // 'bTRC' + cmsSigBToA0Tag = 0x42324130, // 'B2A0' + cmsSigBToA1Tag = 0x42324131, // 'B2A1' + cmsSigBToA2Tag = 0x42324132, // 'B2A2' + cmsSigCalibrationDateTimeTag = 0x63616C74, // 'calt' + cmsSigCharTargetTag = 0x74617267, // 'targ' + cmsSigChromaticAdaptationTag = 0x63686164, // 'chad' + cmsSigChromaticityTag = 0x6368726D, // 'chrm' + cmsSigColorantOrderTag = 0x636C726F, // 'clro' + cmsSigColorantTableTag = 0x636C7274, // 'clrt' + cmsSigColorantTableOutTag = 0x636C6F74, // 'clot' + cmsSigColorimetricIntentImageStateTag = 0x63696973, // 'ciis' + cmsSigCopyrightTag = 0x63707274, // 'cprt' + cmsSigCrdInfoTag = 0x63726469, // 'crdi' + cmsSigDataTag = 0x64617461, // 'data' + cmsSigDateTimeTag = 0x6474696D, // 'dtim' + cmsSigDeviceMfgDescTag = 0x646D6E64, // 'dmnd' + cmsSigDeviceModelDescTag = 0x646D6464, // 'dmdd' + cmsSigDeviceSettingsTag = 0x64657673, // 'devs' + cmsSigDToB0Tag = 0x44324230, // 'D2B0' + cmsSigDToB1Tag = 0x44324231, // 'D2B1' + cmsSigDToB2Tag = 0x44324232, // 'D2B2' + cmsSigDToB3Tag = 0x44324233, // 'D2B3' + cmsSigBToD0Tag = 0x42324430, // 'B2D0' + cmsSigBToD1Tag = 0x42324431, // 'B2D1' + cmsSigBToD2Tag = 0x42324432, // 'B2D2' + cmsSigBToD3Tag = 0x42324433, // 'B2D3' + cmsSigGamutTag = 0x67616D74, // 'gamt' + cmsSigGrayTRCTag = 0x6b545243, // 'kTRC' + cmsSigGreenColorantTag = 0x6758595A, // 'gXYZ' + cmsSigGreenMatrixColumnTag = 0x6758595A, // 'gXYZ' + cmsSigGreenTRCTag = 0x67545243, // 'gTRC' + cmsSigLuminanceTag = 0x6C756d69, // 'lumi' + cmsSigMeasurementTag = 0x6D656173, // 'meas' + cmsSigMediaBlackPointTag = 0x626B7074, // 'bkpt' + cmsSigMediaWhitePointTag = 0x77747074, // 'wtpt' + cmsSigNamedColorTag = 0x6E636f6C, // 'ncol' // Deprecated by the ICC + cmsSigNamedColor2Tag = 0x6E636C32, // 'ncl2' + cmsSigOutputResponseTag = 0x72657370, // 'resp' + cmsSigPerceptualRenderingIntentGamutTag = 0x72696730, // 'rig0' + cmsSigPreview0Tag = 0x70726530, // 'pre0' + cmsSigPreview1Tag = 0x70726531, // 'pre1' + cmsSigPreview2Tag = 0x70726532, // 'pre2' + cmsSigProfileDescriptionTag = 0x64657363, // 'desc' + cmsSigProfileSequenceDescTag = 0x70736571, // 'pseq' + cmsSigProfileSequenceIdTag = 0x70736964, // 'psid' + cmsSigPs2CRD0Tag = 0x70736430, // 'psd0' + cmsSigPs2CRD1Tag = 0x70736431, // 'psd1' + cmsSigPs2CRD2Tag = 0x70736432, // 'psd2' + cmsSigPs2CRD3Tag = 0x70736433, // 'psd3' + cmsSigPs2CSATag = 0x70733273, // 'ps2s' + cmsSigPs2RenderingIntentTag = 0x70733269, // 'ps2i' + cmsSigRedColorantTag = 0x7258595A, // 'rXYZ' + cmsSigRedMatrixColumnTag = 0x7258595A, // 'rXYZ' + cmsSigRedTRCTag = 0x72545243, // 'rTRC' + cmsSigSaturationRenderingIntentGamutTag = 0x72696732, // 'rig2' + cmsSigScreeningDescTag = 0x73637264, // 'scrd' + cmsSigScreeningTag = 0x7363726E, // 'scrn' + cmsSigTechnologyTag = 0x74656368, // 'tech' + cmsSigUcrBgTag = 0x62666420, // 'bfd ' + cmsSigViewingCondDescTag = 0x76756564, // 'vued' + cmsSigViewingConditionsTag = 0x76696577, // 'view' + cmsSigVcgtTag = 0x76636774 // 'vcgt' + +} cmsTagSignature; + + +// ICC Technology tag +typedef enum { + cmsSigDigitalCamera = 0x6463616D, // 'dcam' + cmsSigFilmScanner = 0x6673636E, // 'fscn' + cmsSigReflectiveScanner = 0x7273636E, // 'rscn' + cmsSigInkJetPrinter = 0x696A6574, // 'ijet' + cmsSigThermalWaxPrinter = 0x74776178, // 'twax' + cmsSigElectrophotographicPrinter = 0x6570686F, // 'epho' + cmsSigElectrostaticPrinter = 0x65737461, // 'esta' + cmsSigDyeSublimationPrinter = 0x64737562, // 'dsub' + cmsSigPhotographicPaperPrinter = 0x7270686F, // 'rpho' + cmsSigFilmWriter = 0x6670726E, // 'fprn' + cmsSigVideoMonitor = 0x7669646D, // 'vidm' + cmsSigVideoCamera = 0x76696463, // 'vidc' + cmsSigProjectionTelevision = 0x706A7476, // 'pjtv' + cmsSigCRTDisplay = 0x43525420, // 'CRT ' + cmsSigPMDisplay = 0x504D4420, // 'PMD ' + cmsSigAMDisplay = 0x414D4420, // 'AMD ' + cmsSigPhotoCD = 0x4B504344, // 'KPCD' + cmsSigPhotoImageSetter = 0x696D6773, // 'imgs' + cmsSigGravure = 0x67726176, // 'grav' + cmsSigOffsetLithography = 0x6F666673, // 'offs' + cmsSigSilkscreen = 0x73696C6B, // 'silk' + cmsSigFlexography = 0x666C6578, // 'flex' + cmsSigMotionPictureFilmScanner = 0x6D706673, // 'mpfs' + cmsSigMotionPictureFilmRecorder = 0x6D706672, // 'mpfr' + cmsSigDigitalMotionPictureCamera = 0x646D7063, // 'dmpc' + cmsSigDigitalCinemaProjector = 0x64636A70, // 'dcpj' + +} cmsTechnologySignature; + + +// ICC Color spaces +typedef enum { + cmsSigXYZData = 0x58595A20, // 'XYZ ' + cmsSigLabData = 0x4C616220, // 'Lab ' + cmsSigLuvData = 0x4C757620, // 'Luv ' + cmsSigYCbCrData = 0x59436272, // 'YCbr' + cmsSigYxyData = 0x59787920, // 'Yxy ' + cmsSigRgbData = 0x52474220, // 'RGB ' + cmsSigGrayData = 0x47524159, // 'GRAY' + cmsSigHsvData = 0x48535620, // 'HSV ' + cmsSigHlsData = 0x484C5320, // 'HLS ' + cmsSigCmykData = 0x434D594B, // 'CMYK' + cmsSigCmyData = 0x434D5920, // 'CMY ' + cmsSigMCH1Data = 0x4D434831, // 'MCH1' + cmsSigMCH2Data = 0x4D434832, // 'MCH2' + cmsSigMCH3Data = 0x4D434833, // 'MCH3' + cmsSigMCH4Data = 0x4D434834, // 'MCH4' + cmsSigMCH5Data = 0x4D434835, // 'MCH5' + cmsSigMCH6Data = 0x4D434836, // 'MCH6' + cmsSigMCH7Data = 0x4D434837, // 'MCH7' + cmsSigMCH8Data = 0x4D434838, // 'MCH8' + cmsSigMCH9Data = 0x4D434839, // 'MCH9' + cmsSigMCHAData = 0x4D43483A, // 'MCHA' + cmsSigMCHBData = 0x4D43483B, // 'MCHB' + cmsSigMCHCData = 0x4D43483C, // 'MCHC' + cmsSigMCHDData = 0x4D43483D, // 'MCHD' + cmsSigMCHEData = 0x4D43483E, // 'MCHE' + cmsSigMCHFData = 0x4D43483F, // 'MCHF' + cmsSigNamedData = 0x6e6d636c, // 'nmcl' + cmsSig1colorData = 0x31434C52, // '1CLR' + cmsSig2colorData = 0x32434C52, // '2CLR' + cmsSig3colorData = 0x33434C52, // '3CLR' + cmsSig4colorData = 0x34434C52, // '4CLR' + cmsSig5colorData = 0x35434C52, // '5CLR' + cmsSig6colorData = 0x36434C52, // '6CLR' + cmsSig7colorData = 0x37434C52, // '7CLR' + cmsSig8colorData = 0x38434C52, // '8CLR' + cmsSig9colorData = 0x39434C52, // '9CLR' + cmsSig10colorData = 0x41434C52, // 'ACLR' + cmsSig11colorData = 0x42434C52, // 'BCLR' + cmsSig12colorData = 0x43434C52, // 'CCLR' + cmsSig13colorData = 0x44434C52, // 'DCLR' + cmsSig14colorData = 0x45434C52, // 'ECLR' + cmsSig15colorData = 0x46434C52, // 'FCLR' + cmsSigLuvKData = 0x4C75764B // 'LuvK' + +} cmsColorSpaceSignature; + +// ICC Profile Class +typedef enum { + cmsSigInputClass = 0x73636E72, // 'scnr' + cmsSigDisplayClass = 0x6D6E7472, // 'mntr' + cmsSigOutputClass = 0x70727472, // 'prtr' + cmsSigLinkClass = 0x6C696E6B, // 'link' + cmsSigAbstractClass = 0x61627374, // 'abst' + cmsSigColorSpaceClass = 0x73706163, // 'spac' + cmsSigNamedColorClass = 0x6e6d636c, // 'nmcl' + +} cmsProfileClassSignature; + +// ICC Platforms +typedef enum { + cmsSigMacintosh = 0x4150504C, // 'APPL' + cmsSigMicrosoft = 0x4D534654, // 'MSFT' + cmsSigSolaris = 0x53554E57, // 'SUNW' + cmsSigSGI = 0x53474920, // 'SGI ' + cmsSigTaligent = 0x54474E54, // 'TGNT' + cmsSigUnices = 0x2A6E6978 // '*nix' // From argyll -- Not official + +} cmsPlatformSignature; + +// Reference gamut +#define cmsSigPerceptualReferenceMediumGamut 0x70726d67 //'prmg' + +// For cmsSigColorimetricIntentImageStateTag +#define cmsSigSceneColorimetryEstimates 0x73636F65 //'scoe' +#define cmsSigSceneAppearanceEstimates 0x73617065 //'sape' +#define cmsSigFocalPlaneColorimetryEstimates 0x66706365 //'fpce' +#define cmsSigReflectionHardcopyOriginalColorimetry 0x72686F63 //'rhoc' +#define cmsSigReflectionPrintOutputColorimetry 0x72706F63 //'rpoc' + +// Multi process elements types +typedef enum { + cmsSigCurveSetElemType = 0x63767374, //'cvst' + cmsSigMatrixElemType = 0x6D617466, //'matf' + cmsSigCLutElemType = 0x636C7574, //'clut' + + cmsSigBAcsElemType = 0x62414353, // 'bACS' + cmsSigEAcsElemType = 0x65414353, // 'eACS' + + // Custom from here, not in the ICC Spec + cmsSigXYZ2LabElemType = 0x6C327820, // 'l2x ' + cmsSigLab2XYZElemType = 0x78326C20, // 'x2l ' + cmsSigNamedColorElemType = 0x6E636C20, // 'ncl ' + cmsSigLabV2toV4 = 0x32203420, // '2 4 ' + cmsSigLabV4toV2 = 0x34203220, // '4 2 ' + + // Identities + cmsSigIdentityElemType = 0x69646E20 // 'idn ' + +} cmsStageSignature; + +// Types of CurveElements +typedef enum { + + cmsSigFormulaCurveSeg = 0x70617266, // 'parf' + cmsSigSampledCurveSeg = 0x73616D66, // 'samf' + cmsSigSegmentedCurve = 0x63757266 // 'curf' + +} cmsCurveSegSignature; + +// Used in ResponseCurveType +#define cmsSigStatusA 0x53746141 //'StaA' +#define cmsSigStatusE 0x53746145 //'StaE' +#define cmsSigStatusI 0x53746149 //'StaI' +#define cmsSigStatusT 0x53746154 //'StaT' +#define cmsSigStatusM 0x5374614D //'StaM' +#define cmsSigDN 0x444E2020 //'DN ' +#define cmsSigDNP 0x444E2050 //'DN P' +#define cmsSigDNN 0x444E4E20 //'DNN ' +#define cmsSigDNNP 0x444E4E50 //'DNNP' + +// Device attributes, currently defined values correspond to the low 4 bytes +// of the 8 byte attribute quantity +#define cmsReflective 0 +#define cmsTransparency 1 +#define cmsGlossy 0 +#define cmsMatte 2 + +// Common structures in ICC tags +typedef struct { + cmsUInt32Number len; + cmsUInt32Number flag; + cmsUInt8Number data[1]; + +} cmsICCData; + +// ICC date time +typedef struct { + cmsUInt16Number year; + cmsUInt16Number month; + cmsUInt16Number day; + cmsUInt16Number hours; + cmsUInt16Number minutes; + cmsUInt16Number seconds; + +} cmsDateTimeNumber; + +// ICC XYZ +typedef struct { + cmsS15Fixed16Number X; + cmsS15Fixed16Number Y; + cmsS15Fixed16Number Z; + +} cmsEncodedXYZNumber; + + +// Profile ID as computed by MD5 algorithm +typedef union { + cmsUInt8Number ID8[16]; + cmsUInt16Number ID16[8]; + cmsUInt32Number ID32[4]; + +} cmsProfileID; + + +// ---------------------------------------------------------------------------------------------- +// ICC profile internal base types. Strictly, shouldn't be declared in this header, but maybe +// somebody want to use this info for accessing profile header directly, so here it is. + +// Profile header -- it is 32-bit aligned, so no issues are expected on alignment +typedef struct { + cmsUInt32Number size; // Profile size in bytes + cmsSignature cmmId; // CMM for this profile + cmsUInt32Number version; // Format version number + cmsProfileClassSignature deviceClass; // Type of profile + cmsColorSpaceSignature colorSpace; // Color space of data + cmsColorSpaceSignature pcs; // PCS, XYZ or Lab only + cmsDateTimeNumber date; // Date profile was created + cmsSignature magic; // Magic Number to identify an ICC profile + cmsPlatformSignature platform; // Primary Platform + cmsUInt32Number flags; // Various bit settings + cmsSignature manufacturer; // Device manufacturer + cmsUInt32Number model; // Device model number + cmsUInt64Number attributes; // Device attributes + cmsUInt32Number renderingIntent;// Rendering intent + cmsEncodedXYZNumber illuminant; // Profile illuminant + cmsSignature creator; // Profile creator + cmsProfileID profileID; // Profile ID using MD5 + cmsInt8Number reserved[28]; // Reserved for future use + +} cmsICCHeader; + +// ICC base tag +typedef struct { + cmsTagTypeSignature sig; + cmsInt8Number reserved[4]; + +} cmsTagBase; + +// A tag entry in directory +typedef struct { + cmsTagSignature sig; // The tag signature + cmsUInt32Number offset; // Start of tag + cmsUInt32Number size; // Size in bytes + +} cmsTagEntry; + +// ---------------------------------------------------------------------------------------------- + +// Little CMS specific typedefs + +typedef void* cmsContext; // Context identifier for multithreaded environments +typedef void* cmsHANDLE ; // Generic handle +typedef void* cmsHPROFILE; // Opaque typedefs to hide internals +typedef void* cmsHTRANSFORM; + +#define cmsMAXCHANNELS 16 // Maximum number of channels in ICC profiles + +// Format of pixel is defined by one cmsUInt32Number, using bit fields as follows +// +// A O TTTTT U Y F P X S EEE CCCC BBB +// +// A: Floating point -- With this flag we can differentiate 16 bits as float and as int +// O: Optimized -- previous optimization already returns the final 8-bit value +// T: Pixeltype +// F: Flavor 0=MinIsBlack(Chocolate) 1=MinIsWhite(Vanilla) +// P: Planar? 0=Chunky, 1=Planar +// X: swap 16 bps endianess? +// S: Do swap? ie, BGR, KYMC +// E: Extra samples +// C: Channels (Samples per pixel) +// B: bytes per sample +// Y: Swap first - changes ABGR to BGRA and KCMY to CMYK + +#define FLOAT_SH(a) ((a) << 22) +#define OPTIMIZED_SH(s) ((s) << 21) +#define COLORSPACE_SH(s) ((s) << 16) +#define SWAPFIRST_SH(s) ((s) << 14) +#define FLAVOR_SH(s) ((s) << 13) +#define PLANAR_SH(p) ((p) << 12) +#define ENDIAN16_SH(e) ((e) << 11) +#define DOSWAP_SH(e) ((e) << 10) +#define EXTRA_SH(e) ((e) << 7) +#define CHANNELS_SH(c) ((c) << 3) +#define BYTES_SH(b) (b) + +// These macros unpack format specifiers into integers +#define T_FLOAT(a) (((a)>>22)&1) +#define T_OPTIMIZED(o) (((o)>>21)&1) +#define T_COLORSPACE(s) (((s)>>16)&31) +#define T_SWAPFIRST(s) (((s)>>14)&1) +#define T_FLAVOR(s) (((s)>>13)&1) +#define T_PLANAR(p) (((p)>>12)&1) +#define T_ENDIAN16(e) (((e)>>11)&1) +#define T_DOSWAP(e) (((e)>>10)&1) +#define T_EXTRA(e) (((e)>>7)&7) +#define T_CHANNELS(c) (((c)>>3)&15) +#define T_BYTES(b) ((b)&7) + + +// Pixel types +#define PT_ANY 0 // Don't check colorspace + // 1 & 2 are reserved +#define PT_GRAY 3 +#define PT_RGB 4 +#define PT_CMY 5 +#define PT_CMYK 6 +#define PT_YCbCr 7 +#define PT_YUV 8 // Lu'v' +#define PT_XYZ 9 +#define PT_Lab 10 +#define PT_YUVK 11 // Lu'v'K +#define PT_HSV 12 +#define PT_HLS 13 +#define PT_Yxy 14 + +#define PT_MCH1 15 +#define PT_MCH2 16 +#define PT_MCH3 17 +#define PT_MCH4 18 +#define PT_MCH5 19 +#define PT_MCH6 20 +#define PT_MCH7 21 +#define PT_MCH8 22 +#define PT_MCH9 23 +#define PT_MCH10 24 +#define PT_MCH11 25 +#define PT_MCH12 26 +#define PT_MCH13 27 +#define PT_MCH14 28 +#define PT_MCH15 29 + +#define PT_LabV2 30 // Identical to PT_Lab, but using the V2 old encoding + +// Some (not all!) representations + +#ifndef TYPE_RGB_8 // TYPE_RGB_8 is a very common identifier, so don't include ours + // if user has it already defined. + +#define TYPE_GRAY_8 (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)) +#define TYPE_GRAY_8_REV (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)|FLAVOR_SH(1)) +#define TYPE_GRAY_16 (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)) +#define TYPE_GRAY_16_REV (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1)) +#define TYPE_GRAY_16_SE (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_GRAYA_8 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)) +#define TYPE_GRAYA_16 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)) +#define TYPE_GRAYA_16_SE (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_GRAYA_8_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_GRAYA_16_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|PLANAR_SH(1)) + +#define TYPE_RGB_8 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_RGB_8_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_BGR_8 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_BGR_8_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|PLANAR_SH(1)) +#define TYPE_RGB_16 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_RGB_16_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_RGB_16_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_BGR_16 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_BGR_16_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)) +#define TYPE_BGR_16_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) + +#define TYPE_RGBA_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_RGBA_8_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_RGBA_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_RGBA_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_RGBA_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +#define TYPE_ARGB_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_ARGB_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)) + +#define TYPE_ABGR_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_ABGR_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_ABGR_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)) +#define TYPE_ABGR_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) + +#define TYPE_BGRA_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_BGRA_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_BGRA_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|SWAPFIRST_SH(1)) + +#define TYPE_CMY_8 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_CMY_8_PLANAR (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_CMY_16 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_CMY_16_PLANAR (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_CMY_16_SE (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +#define TYPE_CMYK_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)) +#define TYPE_CMYKA_8 (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(1)) +#define TYPE_CMYK_8_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1)) +#define TYPE_YUVK_8 TYPE_CMYK_8_REV +#define TYPE_CMYK_8_PLANAR (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_CMYK_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)) +#define TYPE_CMYK_16_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)) +#define TYPE_YUVK_16 TYPE_CMYK_16_REV +#define TYPE_CMYK_16_PLANAR (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_CMYK_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)) + +#define TYPE_KYMC_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) + +#define TYPE_KCMY_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_KCMY_8_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_KCMY_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1)) +#define TYPE_KCMY_16_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_KCMY_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)|SWAPFIRST_SH(1)) + +#define TYPE_CMYK5_8 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(1)) +#define TYPE_CMYK5_16 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)) +#define TYPE_CMYK5_16_SE (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC5_8 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC5_16 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC5_16_SE (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK6_8 (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(1)) +#define TYPE_CMYK6_8_PLANAR (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_CMYK6_16 (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)) +#define TYPE_CMYK6_16_PLANAR (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_CMYK6_16_SE (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_CMYK7_8 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(1)) +#define TYPE_CMYK7_16 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)) +#define TYPE_CMYK7_16_SE (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC7_8 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC7_16 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC7_16_SE (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK8_8 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(1)) +#define TYPE_CMYK8_16 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)) +#define TYPE_CMYK8_16_SE (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC8_8 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC8_16 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC8_16_SE (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK9_8 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(1)) +#define TYPE_CMYK9_16 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)) +#define TYPE_CMYK9_16_SE (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC9_8 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC9_16 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC9_16_SE (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK10_8 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(1)) +#define TYPE_CMYK10_16 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)) +#define TYPE_CMYK10_16_SE (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC10_8 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC10_16 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC10_16_SE (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK11_8 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(1)) +#define TYPE_CMYK11_16 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)) +#define TYPE_CMYK11_16_SE (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC11_8 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC11_16 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC11_16_SE (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK12_8 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(1)) +#define TYPE_CMYK12_16 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)) +#define TYPE_CMYK12_16_SE (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC12_8 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC12_16 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC12_16_SE (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) + +// Colorimetric +#define TYPE_XYZ_16 (COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_Lab_8 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_LabV2_8 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(1)) + +#define TYPE_ALab_8 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|DOSWAP_SH(1)) +#define TYPE_ALabV2_8 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|DOSWAP_SH(1)) +#define TYPE_Lab_16 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_LabV2_16 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_Yxy_16 (COLORSPACE_SH(PT_Yxy)|CHANNELS_SH(3)|BYTES_SH(2)) + +// YCbCr +#define TYPE_YCbCr_8 (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_YCbCr_8_PLANAR (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_YCbCr_16 (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_YCbCr_16_PLANAR (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_YCbCr_16_SE (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +// YUV +#define TYPE_YUV_8 (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_YUV_8_PLANAR (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_YUV_16 (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_YUV_16_PLANAR (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_YUV_16_SE (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +// HLS +#define TYPE_HLS_8 (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_HLS_8_PLANAR (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_HLS_16 (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_HLS_16_PLANAR (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_HLS_16_SE (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +// HSV +#define TYPE_HSV_8 (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_HSV_8_PLANAR (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_HSV_16 (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_HSV_16_PLANAR (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_HSV_16_SE (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +// Named color index. Only 16 bits allowed (don't check colorspace) +#define TYPE_NAMED_COLOR_INDEX (CHANNELS_SH(1)|BYTES_SH(2)) + +// Float formatters. +#define TYPE_XYZ_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(4)) +#define TYPE_Lab_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(4)) +#define TYPE_GRAY_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(4)) +#define TYPE_RGB_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)) +#define TYPE_CMYK_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(4)) + +// Floating point formatters. +// NOTE THAT 'BYTES' FIELD IS SET TO ZERO ON DLB because 8 bytes overflows the bitfield +#define TYPE_XYZ_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(0)) +#define TYPE_Lab_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(0)) +#define TYPE_GRAY_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(0)) +#define TYPE_RGB_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0)) +#define TYPE_CMYK_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(0)) + +#endif + +// Colorspaces +typedef struct { + cmsFloat64Number X; + cmsFloat64Number Y; + cmsFloat64Number Z; + + } cmsCIEXYZ; + +typedef struct { + cmsFloat64Number x; + cmsFloat64Number y; + cmsFloat64Number Y; + + } cmsCIExyY; + +typedef struct { + cmsFloat64Number L; + cmsFloat64Number a; + cmsFloat64Number b; + + } cmsCIELab; + +typedef struct { + cmsFloat64Number L; + cmsFloat64Number C; + cmsFloat64Number h; + + } cmsCIELCh; + +typedef struct { + cmsFloat64Number J; + cmsFloat64Number C; + cmsFloat64Number h; + + } cmsJCh; + +typedef struct { + cmsCIEXYZ Red; + cmsCIEXYZ Green; + cmsCIEXYZ Blue; + + } cmsCIEXYZTRIPLE; + +typedef struct { + cmsCIExyY Red; + cmsCIExyY Green; + cmsCIExyY Blue; + + } cmsCIExyYTRIPLE; + +// Illuminant types for structs below +#define cmsILLUMINANT_TYPE_UNKNOWN 0x0000000 +#define cmsILLUMINANT_TYPE_D50 0x0000001 +#define cmsILLUMINANT_TYPE_D65 0x0000002 +#define cmsILLUMINANT_TYPE_D93 0x0000003 +#define cmsILLUMINANT_TYPE_F2 0x0000004 +#define cmsILLUMINANT_TYPE_D55 0x0000005 +#define cmsILLUMINANT_TYPE_A 0x0000006 +#define cmsILLUMINANT_TYPE_E 0x0000007 +#define cmsILLUMINANT_TYPE_F8 0x0000008 + +typedef struct { + cmsUInt32Number Observer; // 0 = unknown, 1=CIE 1931, 2=CIE 1964 + cmsCIEXYZ Backing; // Value of backing + cmsUInt32Number Geometry; // 0=unknown, 1=45/0, 0/45 2=0d, d/0 + cmsFloat64Number Flare; // 0..1.0 + cmsUInt32Number IlluminantType; + + } cmsICCMeasurementConditions; + +typedef struct { + cmsCIEXYZ IlluminantXYZ; // Not the same struct as CAM02, + cmsCIEXYZ SurroundXYZ; // This is for storing the tag + cmsUInt32Number IlluminantType; // viewing condition + + } cmsICCViewingConditions; + +// Support of non-standard functions -------------------------------------------------------------------------------------- + +CMSAPI int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2); +CMSAPI long int CMSEXPORT cmsfilelength(FILE* f); + +// Plug-In registering --------------------------------------------------------------------------------------------------- + +CMSAPI cmsBool CMSEXPORT cmsPlugin(void* Plugin); +CMSAPI void CMSEXPORT cmsUnregisterPlugins(void); + +// Error logging ---------------------------------------------------------------------------------------------------------- + +// There is no error handling at all. When a function fails, it returns proper value. +// For example, all create functions does return NULL on failure. Other may return FALSE. +// It may be interesting, for the developer, to know why the function is failing. +// for that reason, lcms2 does offer a logging function. This function will get +// an ENGLISH string with some clues on what is going wrong. You can show this +// info to the end user if you wish, or just create some sort of log on disk. +// The logging function should NOT terminate the program, as this obviously can leave +// unfreed resources. It is the programmer's responsibility to check each function +// return code to make sure it didn't fail. + +#define cmsERROR_UNDEFINED 0 +#define cmsERROR_FILE 1 +#define cmsERROR_RANGE 2 +#define cmsERROR_INTERNAL 3 +#define cmsERROR_NULL 4 +#define cmsERROR_READ 5 +#define cmsERROR_SEEK 6 +#define cmsERROR_WRITE 7 +#define cmsERROR_UNKNOWN_EXTENSION 8 +#define cmsERROR_COLORSPACE_CHECK 9 +#define cmsERROR_ALREADY_DEFINED 10 +#define cmsERROR_BAD_SIGNATURE 11 +#define cmsERROR_CORRUPTION_DETECTED 12 +#define cmsERROR_NOT_SUITABLE 13 + +// Error logger is called with the ContextID when a message is raised. This gives the +// chance to know which thread is responsible of the warning and any environment associated +// with it. Non-multithreading applications may safely ignore this parameter. +// Note that under certain special circumstances, ContextID may be NULL. +typedef void (* cmsLogErrorHandlerFunction)(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text); + +// Allows user to set any specific logger +CMSAPI void CMSEXPORT cmsSetLogErrorHandler(cmsLogErrorHandlerFunction Fn); + +// Conversions -------------------------------------------------------------------------------------------------------------- + +// Returns pointers to constant structs +CMSAPI const cmsCIEXYZ* CMSEXPORT cmsD50_XYZ(void); +CMSAPI const cmsCIExyY* CMSEXPORT cmsD50_xyY(void); + +// Colorimetric space conversions +CMSAPI void CMSEXPORT cmsXYZ2xyY(cmsCIExyY* Dest, const cmsCIEXYZ* Source); +CMSAPI void CMSEXPORT cmsxyY2XYZ(cmsCIEXYZ* Dest, const cmsCIExyY* Source); +CMSAPI void CMSEXPORT cmsXYZ2Lab(const cmsCIEXYZ* WhitePoint, cmsCIELab* Lab, const cmsCIEXYZ* xyz); +CMSAPI void CMSEXPORT cmsLab2XYZ(const cmsCIEXYZ* WhitePoint, cmsCIEXYZ* xyz, const cmsCIELab* Lab); +CMSAPI void CMSEXPORT cmsLab2LCh(cmsCIELCh*LCh, const cmsCIELab* Lab); +CMSAPI void CMSEXPORT cmsLCh2Lab(cmsCIELab* Lab, const cmsCIELCh* LCh); + +// Encoding /Decoding on PCS +CMSAPI void CMSEXPORT cmsLabEncoded2Float(cmsCIELab* Lab, const cmsUInt16Number wLab[3]); +CMSAPI void CMSEXPORT cmsLabEncoded2FloatV2(cmsCIELab* Lab, const cmsUInt16Number wLab[3]); +CMSAPI void CMSEXPORT cmsFloat2LabEncoded(cmsUInt16Number wLab[3], const cmsCIELab* Lab); +CMSAPI void CMSEXPORT cmsFloat2LabEncodedV2(cmsUInt16Number wLab[3], const cmsCIELab* Lab); +CMSAPI void CMSEXPORT cmsXYZEncoded2Float(cmsCIEXYZ* fxyz, const cmsUInt16Number XYZ[3]); +CMSAPI void CMSEXPORT cmsFloat2XYZEncoded(cmsUInt16Number XYZ[3], const cmsCIEXYZ* fXYZ); + +// DeltaE metrics +CMSAPI cmsFloat64Number CMSEXPORT cmsDeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); +CMSAPI cmsFloat64Number CMSEXPORT cmsCIE94DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); +CMSAPI cmsFloat64Number CMSEXPORT cmsBFDdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); +CMSAPI cmsFloat64Number CMSEXPORT cmsCMCdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number l, cmsFloat64Number c); +CMSAPI cmsFloat64Number CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number Kl, cmsFloat64Number Kc, cmsFloat64Number Kh); + +// Temperature <-> Chromaticity (Black body) +CMSAPI cmsBool CMSEXPORT cmsWhitePointFromTemp(cmsCIExyY* WhitePoint, cmsFloat64Number TempK); +CMSAPI cmsBool CMSEXPORT cmsTempFromWhitePoint(cmsFloat64Number* TempK, const cmsCIExyY* WhitePoint); + +// Chromatic adaptation +CMSAPI cmsBool CMSEXPORT cmsAdaptToIlluminant(cmsCIEXYZ* Result, const cmsCIEXYZ* SourceWhitePt, + const cmsCIEXYZ* Illuminant, + const cmsCIEXYZ* Value); + +// CIECAM02 --------------------------------------------------------------------------------------------------- + +// Viewing conditions. Please note those are CAM model viewing conditions, and not the ICC tag viewing +// conditions, which I'm naming cmsICCViewingConditions to make differences evident. Unfortunately, the tag +// cannot deal with surround La, Yb and D value so is basically useless to store CAM02 viewing conditions. + + +#define AVG_SURROUND 1 +#define DIM_SURROUND 2 +#define DARK_SURROUND 3 +#define CUTSHEET_SURROUND 4 + +#define D_CALCULATE (-1) + +typedef struct { + cmsCIEXYZ whitePoint; + cmsFloat64Number Yb; + cmsFloat64Number La; + int surround; + cmsFloat64Number D_value; + + } cmsViewingConditions; + +CMSAPI cmsHANDLE CMSEXPORT cmsCIECAM02Init(cmsContext ContextID, const cmsViewingConditions* pVC); +CMSAPI void CMSEXPORT cmsCIECAM02Done(cmsHANDLE hModel); +CMSAPI void CMSEXPORT cmsCIECAM02Forward(cmsHANDLE hModel, const cmsCIEXYZ* pIn, cmsJCh* pOut); +CMSAPI void CMSEXPORT cmsCIECAM02Reverse(cmsHANDLE hModel, const cmsJCh* pIn, cmsCIEXYZ* pOut); + + +// Tone curves ----------------------------------------------------------------------------------------- + +// This describes a curve segment. For a table of supported types, see the manual. User can increase the number of +// available types by using a proper plug-in. Parametric segments allow 10 parameters at most + +typedef struct { + cmsFloat32Number x0, x1; // Domain; for x0 < x <= x1 + cmsInt32Number Type; // Parametric type, Type == 0 means sampled segment. Negative values are reserved + cmsFloat64Number Params[10]; // Parameters if Type != 0 + cmsUInt32Number nGridPoints; // Number of grid points if Type == 0 + cmsFloat32Number* SampledPoints; // Points to an array of floats if Type == 0 + +} cmsCurveSegment; + +// The internal representation is none of your business. +typedef struct _cms_curve_struct cmsToneCurve; + +CMSAPI cmsToneCurve* CMSEXPORT cmsBuildSegmentedToneCurve(cmsContext ContextID, cmsInt32Number nSegments, const cmsCurveSegment Segments[]); +CMSAPI cmsToneCurve* CMSEXPORT cmsBuildParametricToneCurve(cmsContext ContextID, cmsInt32Number Type, const cmsFloat64Number Params[]); +CMSAPI cmsToneCurve* CMSEXPORT cmsBuildGamma(cmsContext ContextID, cmsFloat64Number Gamma); +CMSAPI cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurve16(cmsContext ContextID, cmsInt32Number nEntries, const cmsUInt16Number values[]); +CMSAPI cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurveFloat(cmsContext ContextID, cmsUInt32Number nEntries, const cmsFloat32Number values[]); +CMSAPI void CMSEXPORT cmsFreeToneCurve(cmsToneCurve* Curve); +CMSAPI void CMSEXPORT cmsFreeToneCurveTriple(cmsToneCurve* Curve[3]); +CMSAPI cmsToneCurve* CMSEXPORT cmsDupToneCurve(const cmsToneCurve* Src); +CMSAPI cmsToneCurve* CMSEXPORT cmsReverseToneCurve(const cmsToneCurve* InGamma); +CMSAPI cmsToneCurve* CMSEXPORT cmsReverseToneCurveEx(cmsInt32Number nResultSamples, const cmsToneCurve* InGamma); +CMSAPI cmsToneCurve* CMSEXPORT cmsJoinToneCurve(cmsContext ContextID, const cmsToneCurve* X, const cmsToneCurve* Y, cmsUInt32Number nPoints); +CMSAPI cmsBool CMSEXPORT cmsSmoothToneCurve(cmsToneCurve* Tab, cmsFloat64Number lambda); +CMSAPI cmsFloat32Number CMSEXPORT cmsEvalToneCurveFloat(const cmsToneCurve* Curve, cmsFloat32Number v); +CMSAPI cmsUInt16Number CMSEXPORT cmsEvalToneCurve16(const cmsToneCurve* Curve, cmsUInt16Number v); +CMSAPI cmsBool CMSEXPORT cmsIsToneCurveMultisegment(const cmsToneCurve* InGamma); +CMSAPI cmsBool CMSEXPORT cmsIsToneCurveLinear(const cmsToneCurve* Curve); +CMSAPI cmsBool CMSEXPORT cmsIsToneCurveMonotonic(const cmsToneCurve* t); +CMSAPI cmsBool CMSEXPORT cmsIsToneCurveDescending(const cmsToneCurve* t); +CMSAPI cmsInt32Number CMSEXPORT cmsGetToneCurveParametricType(const cmsToneCurve* t); +CMSAPI cmsFloat64Number CMSEXPORT cmsEstimateGamma(const cmsToneCurve* t, cmsFloat64Number Precision); + + +// Implements pipelines of multi-processing elements ------------------------------------------------------------- + +// Nothing to see here, move along +typedef struct _cmsPipeline_struct cmsPipeline; +typedef struct _cmsStage_struct cmsStage; + +// Those are hi-level pipelines +CMSAPI cmsPipeline* CMSEXPORT cmsPipelineAlloc(cmsContext ContextID, cmsUInt32Number InputChannels, cmsUInt32Number OutputChannels); +CMSAPI void CMSEXPORT cmsPipelineFree(cmsPipeline* lut); +CMSAPI cmsPipeline* CMSEXPORT cmsPipelineDup(const cmsPipeline* Orig); + +CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineInputChannels(const cmsPipeline* lut); +CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineOutputChannels(const cmsPipeline* lut); + +CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineStageCount(const cmsPipeline* lut); +CMSAPI cmsStage* CMSEXPORT cmsPipelineGetPtrToFirstStage(const cmsPipeline* lut); +CMSAPI cmsStage* CMSEXPORT cmsPipelineGetPtrToLastStage(const cmsPipeline* lut); + +CMSAPI void CMSEXPORT cmsPipelineEval16(const cmsUInt16Number In[], cmsUInt16Number Out[], const cmsPipeline* lut); +CMSAPI void CMSEXPORT cmsPipelineEvalFloat(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsPipeline* lut); +CMSAPI cmsBool CMSEXPORT cmsPipelineEvalReverseFloat(cmsFloat32Number Target[], cmsFloat32Number Result[], cmsFloat32Number Hint[], const cmsPipeline* lut); +CMSAPI cmsBool CMSEXPORT cmsPipelineCat(cmsPipeline* l1, const cmsPipeline* l2); +CMSAPI cmsBool CMSEXPORT cmsPipelineSetSaveAs8bitsFlag(cmsPipeline* lut, cmsBool On); + +// Where to place/locate the stages in the pipeline chain +typedef enum { cmsAT_BEGIN, cmsAT_END } cmsStageLoc; + +CMSAPI void CMSEXPORT cmsPipelineInsertStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage* mpe); +CMSAPI void CMSEXPORT cmsPipelineUnlinkStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage** mpe); + +// This function is quite useful to analyze the structure of a Pipeline and retrieve the Stage elements +// that conform the Pipeline. It should be called with the Pipeline, the number of expected elements and +// then a list of expected types followed with a list of double pointers to Stage elements. If +// the function founds a match with current pipeline, it fills the pointers and returns TRUE +// if not, returns FALSE without touching anything. +CMSAPI cmsBool CMSEXPORT cmsPipelineCheckAndRetreiveStages(const cmsPipeline* Lut, cmsUInt32Number n, ...); + +// Matrix has double precision and CLUT has only float precision. That is because an ICC profile can encode +// matrices with far more precision that CLUTS +CMSAPI cmsStage* CMSEXPORT cmsStageAllocIdentity(cmsContext ContextID, cmsUInt32Number nChannels); +CMSAPI cmsStage* CMSEXPORT cmsStageAllocToneCurves(cmsContext ContextID, cmsUInt32Number nChannels, cmsToneCurve* const Curves[]); +CMSAPI cmsStage* CMSEXPORT cmsStageAllocMatrix(cmsContext ContextID, cmsUInt32Number Rows, cmsUInt32Number Cols, const cmsFloat64Number* Matrix, const cmsFloat64Number* Offset); + +CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLut16bit(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table); +CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLutFloat(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table); + +CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLut16bitGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table); +CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table); + +CMSAPI cmsStage* CMSEXPORT cmsStageDup(cmsStage* mpe); +CMSAPI void CMSEXPORT cmsStageFree(cmsStage* mpe); +CMSAPI cmsStage* CMSEXPORT cmsStageNext(const cmsStage* mpe); + +CMSAPI cmsUInt32Number CMSEXPORT cmsStageInputChannels(const cmsStage* mpe); +CMSAPI cmsUInt32Number CMSEXPORT cmsStageOutputChannels(const cmsStage* mpe); +CMSAPI cmsStageSignature CMSEXPORT cmsStageType(const cmsStage* mpe); +CMSAPI void* CMSEXPORT cmsStageData(const cmsStage* mpe); + +// Sampling +typedef cmsInt32Number (* cmsSAMPLER16) (register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register void * Cargo); + +typedef cmsInt32Number (* cmsSAMPLERFLOAT)(register const cmsFloat32Number In[], + register cmsFloat32Number Out[], + register void * Cargo); + +// Use this flag to prevent changes being written to destination +#define SAMPLER_INSPECT 0x01000000 + +// For CLUT only +CMSAPI cmsBool CMSEXPORT cmsStageSampleCLut16bit(cmsStage* mpe, cmsSAMPLER16 Sampler, void* Cargo, cmsUInt32Number dwFlags); +CMSAPI cmsBool CMSEXPORT cmsStageSampleCLutFloat(cmsStage* mpe, cmsSAMPLERFLOAT Sampler, void* Cargo, cmsUInt32Number dwFlags); + + +// Slicers +CMSAPI cmsBool CMSEXPORT cmsSliceSpace16(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], + cmsSAMPLER16 Sampler, void * Cargo); + +CMSAPI cmsBool CMSEXPORT cmsSliceSpaceFloat(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], + cmsSAMPLERFLOAT Sampler, void * Cargo); + +// Multilocalized Unicode management --------------------------------------------------------------------------------------- + +typedef struct _cms_MLU_struct cmsMLU; + +#define cmsNoLanguage "\0\0" +#define cmsNoCountry "\0\0" + +CMSAPI cmsMLU* CMSEXPORT cmsMLUalloc(cmsContext ContextID, cmsUInt32Number nItems); +CMSAPI void CMSEXPORT cmsMLUfree(cmsMLU* mlu); +CMSAPI cmsMLU* CMSEXPORT cmsMLUdup(const cmsMLU* mlu); + +CMSAPI cmsBool CMSEXPORT cmsMLUsetASCII(cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + const char* ASCIIString); +CMSAPI cmsBool CMSEXPORT cmsMLUsetWide(cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + const wchar_t* WideString); + +CMSAPI cmsUInt32Number CMSEXPORT cmsMLUgetASCII(const cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + char* Buffer, cmsUInt32Number BufferSize); + +CMSAPI cmsUInt32Number CMSEXPORT cmsMLUgetWide(const cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + wchar_t* Buffer, cmsUInt32Number BufferSize); + +CMSAPI cmsBool CMSEXPORT cmsMLUgetTranslation(const cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + char ObtainedLanguage[3], char ObtainedCountry[3]); + +// Undercolorremoval & black generation ------------------------------------------------------------------------------------- + +typedef struct { + cmsToneCurve* Ucr; + cmsToneCurve* Bg; + cmsMLU* Desc; + +} cmsUcrBg; + +// Screening ---------------------------------------------------------------------------------------------------------------- + +#define cmsPRINTER_DEFAULT_SCREENS 0x0001 +#define cmsFREQUENCE_UNITS_LINES_CM 0x0000 +#define cmsFREQUENCE_UNITS_LINES_INCH 0x0002 + +#define cmsSPOT_UNKNOWN 0 +#define cmsSPOT_PRINTER_DEFAULT 1 +#define cmsSPOT_ROUND 2 +#define cmsSPOT_DIAMOND 3 +#define cmsSPOT_ELLIPSE 4 +#define cmsSPOT_LINE 5 +#define cmsSPOT_SQUARE 6 +#define cmsSPOT_CROSS 7 + +typedef struct { + cmsFloat64Number Frequency; + cmsFloat64Number ScreenAngle; + cmsUInt32Number SpotShape; + +} cmsScreeningChannel; + +typedef struct { + cmsUInt32Number Flag; + cmsUInt32Number nChannels; + cmsScreeningChannel Channels[cmsMAXCHANNELS]; + +} cmsScreening; + + +// Named color ----------------------------------------------------------------------------------------------------------------- + +typedef struct _cms_NAMEDCOLORLIST_struct cmsNAMEDCOLORLIST; + +CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsAllocNamedColorList(cmsContext ContextID, + cmsUInt32Number n, + cmsUInt32Number ColorantCount, + const char* Prefix, const char* Suffix); + +CMSAPI void CMSEXPORT cmsFreeNamedColorList(cmsNAMEDCOLORLIST* v); +CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsDupNamedColorList(const cmsNAMEDCOLORLIST* v); +CMSAPI cmsBool CMSEXPORT cmsAppendNamedColor(cmsNAMEDCOLORLIST* v, const char* Name, + cmsUInt16Number PCS[3], + cmsUInt16Number Colorant[cmsMAXCHANNELS]); + +CMSAPI cmsUInt32Number CMSEXPORT cmsNamedColorCount(const cmsNAMEDCOLORLIST* v); +CMSAPI cmsInt32Number CMSEXPORT cmsNamedColorIndex(const cmsNAMEDCOLORLIST* v, const char* Name); + +CMSAPI cmsBool CMSEXPORT cmsNamedColorInfo(const cmsNAMEDCOLORLIST* NamedColorList, cmsUInt32Number nColor, + char* Name, + char* Prefix, + char* Suffix, + cmsUInt16Number* PCS, + cmsUInt16Number* Colorant); + +// Retrieve named color list from transform +CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsGetNamedColorList(cmsHTRANSFORM xform); + +// Profile sequence ----------------------------------------------------------------------------------------------------- + +// Profile sequence descriptor. Some fields come from profile sequence descriptor tag, others +// come from Profile Sequence Identifier Tag +typedef struct { + cmsSignature deviceMfg; + cmsSignature deviceModel; + cmsUInt64Number attributes; + cmsTechnologySignature technology; + cmsProfileID ProfileID; + cmsMLU* Manufacturer; + cmsMLU* Model; + cmsMLU* Description; + +} cmsPSEQDESC; + +typedef struct { + + cmsUInt32Number n; + cmsContext ContextID; + cmsPSEQDESC* seq; + +} cmsSEQ; + +CMSAPI cmsSEQ* CMSEXPORT cmsAllocProfileSequenceDescription(cmsContext ContextID, cmsUInt32Number n); +CMSAPI cmsSEQ* CMSEXPORT cmsDupProfileSequenceDescription(const cmsSEQ* pseq); +CMSAPI void CMSEXPORT cmsFreeProfileSequenceDescription(cmsSEQ* pseq); + +// Access to Profile data ---------------------------------------------------------------------------------------------- +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID); + +CMSAPI cmsContext CMSEXPORT cmsGetProfileContextID(cmsHPROFILE hProfile); +CMSAPI cmsInt32Number CMSEXPORT cmsGetTagCount(cmsHPROFILE hProfile); +CMSAPI cmsTagSignature CMSEXPORT cmsGetTagSignature(cmsHPROFILE hProfile, cmsUInt32Number n); +CMSAPI cmsBool CMSEXPORT cmsIsTag(cmsHPROFILE hProfile, cmsTagSignature sig); + +// Read and write pre-formatted data +CMSAPI void* CMSEXPORT cmsReadTag(cmsHPROFILE hProfile, cmsTagSignature sig); +CMSAPI cmsBool CMSEXPORT cmsWriteTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data); +CMSAPI cmsBool CMSEXPORT cmsLinkTag(cmsHPROFILE hProfile, cmsTagSignature sig, cmsTagSignature dest); + +// Read and write raw data +CMSAPI cmsInt32Number CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, void* Buffer, cmsUInt32Number BufferSize); +CMSAPI cmsBool CMSEXPORT cmsWriteRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data, cmsUInt32Number Size); + +// Access header data +CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderFlags(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsGetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number* Flags); +CMSAPI void CMSEXPORT cmsGetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID); +CMSAPI cmsBool CMSEXPORT cmsGetHeaderCreationDateTime(cmsHPROFILE hProfile, struct tm *Dest); +CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderRenderingIntent(cmsHPROFILE hProfile); + +CMSAPI void CMSEXPORT cmsSetHeaderFlags(cmsHPROFILE hProfile, cmsUInt32Number Flags); +CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderManufacturer(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetHeaderManufacturer(cmsHPROFILE hProfile, cmsUInt32Number manufacturer); +CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderModel(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetHeaderModel(cmsHPROFILE hProfile, cmsUInt32Number model); +CMSAPI void CMSEXPORT cmsSetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number Flags); +CMSAPI void CMSEXPORT cmsSetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID); +CMSAPI void CMSEXPORT cmsSetHeaderRenderingIntent(cmsHPROFILE hProfile, cmsUInt32Number RenderingIntent); + +CMSAPI cmsColorSpaceSignature + CMSEXPORT cmsGetPCS(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetPCS(cmsHPROFILE hProfile, cmsColorSpaceSignature pcs); +CMSAPI cmsColorSpaceSignature + CMSEXPORT cmsGetColorSpace(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetColorSpace(cmsHPROFILE hProfile, cmsColorSpaceSignature sig); +CMSAPI cmsProfileClassSignature + CMSEXPORT cmsGetDeviceClass(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetDeviceClass(cmsHPROFILE hProfile, cmsProfileClassSignature sig); +CMSAPI void CMSEXPORT cmsSetProfileVersion(cmsHPROFILE hProfile, cmsFloat64Number Version); +CMSAPI cmsFloat64Number CMSEXPORT cmsGetProfileVersion(cmsHPROFILE hProfile); + +CMSAPI cmsUInt32Number CMSEXPORT cmsGetEncodedICCversion(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetEncodedICCversion(cmsHPROFILE hProfile, cmsUInt32Number Version); + +// How profiles may be used +#define LCMS_USED_AS_INPUT 0 +#define LCMS_USED_AS_OUTPUT 1 +#define LCMS_USED_AS_PROOF 2 + +CMSAPI cmsBool CMSEXPORT cmsIsIntentSupported(cmsHPROFILE hProfile, cmsUInt32Number Intent, int UsedDirection); +CMSAPI cmsBool CMSEXPORT cmsIsMatrixShaper(cmsHPROFILE hProfile); +CMSAPI cmsBool CMSEXPORT cmsIsCLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent, int UsedDirection); + +// Translate form/to our notation to ICC +CMSAPI cmsColorSpaceSignature CMSEXPORT _cmsICCcolorSpace(int OurNotation); +CMSAPI int CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace); + +CMSAPI cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace); + +// Build a suitable formatter for the colorspace of this profile +CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat); +CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat); + + +// Localized info +typedef enum { + cmsInfoDescription = 0, + cmsInfoManufacturer = 1, + cmsInfoModel = 2, + cmsInfoCopyright = 3 +} cmsInfoType; + +CMSAPI cmsUInt32Number CMSEXPORT cmsGetProfileInfo(cmsHPROFILE hProfile, cmsInfoType Info, + const char LanguageCode[3], const char CountryCode[3], + wchar_t* Buffer, cmsUInt32Number BufferSize); + +CMSAPI cmsUInt32Number CMSEXPORT cmsGetProfileInfoASCII(cmsHPROFILE hProfile, cmsInfoType Info, + const char LanguageCode[3], const char CountryCode[3], + char* Buffer, cmsUInt32Number BufferSize); + +// IO handlers ---------------------------------------------------------------------------------------------------------- + +typedef struct _cms_io_handler cmsIOHANDLER; + +CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromFile(cmsContext ContextID, const char* FileName, const char* AccessMode); +CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream); +CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode); +CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromNULL(cmsContext ContextID); +CMSAPI cmsBool CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io); + +// MD5 message digest -------------------------------------------------------------------------------------------------- + +CMSAPI cmsBool CMSEXPORT cmsMD5computeID(cmsHPROFILE hProfile); + +// Profile high level funtions ------------------------------------------------------------------------------------------ + +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromFile(const char *ICCProfile, const char *sAccess); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromFileTHR(cmsContext ContextID, const char *ICCProfile, const char *sAccess); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromStreamTHR(cmsContext ContextID, FILE* ICCProfile, const char* sAccess); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromMem(const void * MemPtr, cmsUInt32Number dwSize); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromMemTHR(cmsContext ContextID, const void * MemPtr, cmsUInt32Number dwSize); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromIOhandlerTHR(cmsContext ContextID, cmsIOHANDLER* io); +CMSAPI cmsBool CMSEXPORT cmsCloseProfile(cmsHPROFILE hProfile); + +CMSAPI cmsBool CMSEXPORT cmsSaveProfileToFile(cmsHPROFILE hProfile, const char* FileName); +CMSAPI cmsBool CMSEXPORT cmsSaveProfileToStream(cmsHPROFILE hProfile, FILE* Stream); +CMSAPI cmsBool CMSEXPORT cmsSaveProfileToMem(cmsHPROFILE hProfile, void *MemPtr, cmsUInt32Number* BytesNeeded); +CMSAPI cmsUInt32Number CMSEXPORT cmsSaveProfileToIOhandler(cmsHPROFILE hProfile, cmsIOHANDLER* io); + +// Predefined virtual profiles ------------------------------------------------------------------------------------------ + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateRGBProfileTHR(cmsContext ContextID, + const cmsCIExyY* WhitePoint, + const cmsCIExyYTRIPLE* Primaries, + cmsToneCurve* const TransferFunction[3]); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateRGBProfile(const cmsCIExyY* WhitePoint, + const cmsCIExyYTRIPLE* Primaries, + cmsToneCurve* const TransferFunction[3]); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateGrayProfileTHR(cmsContext ContextID, + const cmsCIExyY* WhitePoint, + const cmsToneCurve* TransferFunction); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateGrayProfile(const cmsCIExyY* WhitePoint, + const cmsToneCurve* TransferFunction); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLinkTHR(cmsContext ContextID, + cmsColorSpaceSignature ColorSpace, + cmsToneCurve* const TransferFunctions[]); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLink(cmsColorSpaceSignature ColorSpace, + cmsToneCurve* const TransferFunctions[]); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLinkTHR(cmsContext ContextID, + cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLink(cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit); + + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab2ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab2Profile(const cmsCIExyY* WhitePoint); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab4ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab4Profile(const cmsCIExyY* WhitePoint); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateXYZProfileTHR(cmsContext ContextID); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateXYZProfile(void); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfileTHR(cmsContext ContextID); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfile(void); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfileTHR(cmsContext ContextID, + int nLUTPoints, + cmsFloat64Number Bright, + cmsFloat64Number Contrast, + cmsFloat64Number Hue, + cmsFloat64Number Saturation, + int TempSrc, + int TempDest); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfile(int nLUTPoints, + cmsFloat64Number Bright, + cmsFloat64Number Contrast, + cmsFloat64Number Hue, + cmsFloat64Number Saturation, + int TempSrc, + int TempDest); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateNULLProfileTHR(cmsContext ContextID); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateNULLProfile(void); + +// Converts a transform to a devicelink profile +CMSAPI cmsHPROFILE CMSEXPORT cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, cmsFloat64Number Version, cmsUInt32Number dwFlags); + +// Intents ---------------------------------------------------------------------------------------------- + +// ICC Intents +#define INTENT_PERCEPTUAL 0 +#define INTENT_RELATIVE_COLORIMETRIC 1 +#define INTENT_SATURATION 2 +#define INTENT_ABSOLUTE_COLORIMETRIC 3 + +// Non-ICC intents +#define INTENT_PRESERVE_K_ONLY_PERCEPTUAL 10 +#define INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC 11 +#define INTENT_PRESERVE_K_ONLY_SATURATION 12 +#define INTENT_PRESERVE_K_PLANE_PERCEPTUAL 13 +#define INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC 14 +#define INTENT_PRESERVE_K_PLANE_SATURATION 15 + +// Call with NULL as parameters to get the intent count +CMSAPI cmsUInt32Number CMSEXPORT cmsGetSupportedIntents(cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions); + +// Flags + +#define cmsFLAGS_NOCACHE 0x0040 // Inhibit 1-pixel cache +#define cmsFLAGS_NOOPTIMIZE 0x0100 // Inhibit optimizations +#define cmsFLAGS_NULLTRANSFORM 0x0200 // Don't transform anyway + + +// Proofing flags +#define cmsFLAGS_GAMUTCHECK 0x1000 // Out of Gamut alarm +#define cmsFLAGS_SOFTPROOFING 0x4000 // Do softproofing + +// Misc +#define cmsFLAGS_BLACKPOINTCOMPENSATION 0x2000 +#define cmsFLAGS_NOWHITEONWHITEFIXUP 0x0004 // Don't fix scum dot +#define cmsFLAGS_HIGHRESPRECALC 0x0400 // Use more memory to give better accurancy +#define cmsFLAGS_LOWRESPRECALC 0x0800 // Use less memory to minimize resouces + +// For devicelink creation +#define cmsFLAGS_8BITS_DEVICELINK 0x0008 // Create 8 bits devicelinks +#define cmsFLAGS_GUESSDEVICECLASS 0x0020 // Guess device class (for transform2devicelink) +#define cmsFLAGS_KEEP_SEQUENCE 0x0080 // Keep profile sequence for devicelink creation + +// Specific to a particular optimizations +#define cmsFLAGS_FORCE_CLUT 0x0002 // Force CLUT optimization +#define cmsFLAGS_CLUT_POST_LINEARIZATION 0x0001 // create postlinearization tables if possible +#define cmsFLAGS_CLUT_PRE_LINEARIZATION 0x0010 // create prelinearization tables if possible + +// Fine-tune control over number of gridpoints +#define cmsFLAGS_GRIDPOINTS(n) (((n) & 0xFF) << 16) + +// CRD special +#define cmsFLAGS_NODEFAULTRESOURCEDEF 0x01000000 + +// Transforms --------------------------------------------------------------------------------------------------- + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateTransformTHR(cmsContext ContextID, + cmsHPROFILE Input, + cmsUInt32Number InputFormat, + cmsHPROFILE Output, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags); + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateTransform(cmsHPROFILE Input, + cmsUInt32Number InputFormat, + cmsHPROFILE Output, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags); + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransformTHR(cmsContext ContextID, + cmsHPROFILE Input, + cmsUInt32Number InputFormat, + cmsHPROFILE Output, + cmsUInt32Number OutputFormat, + cmsHPROFILE Proofing, + cmsUInt32Number Intent, + cmsUInt32Number ProofingIntent, + cmsUInt32Number dwFlags); + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransform(cmsHPROFILE Input, + cmsUInt32Number InputFormat, + cmsHPROFILE Output, + cmsUInt32Number OutputFormat, + cmsHPROFILE Proofing, + cmsUInt32Number Intent, + cmsUInt32Number ProofingIntent, + cmsUInt32Number dwFlags); + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransformTHR(cmsContext ContextID, + cmsHPROFILE hProfiles[], + cmsUInt32Number nProfiles, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags); + + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransform(cmsHPROFILE hProfiles[], + cmsUInt32Number nProfiles, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags); + + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateExtendedTransform(cmsContext ContextID, + cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsUInt32Number Intents[], + cmsFloat64Number AdaptationStates[], + cmsHPROFILE hGamutProfile, + cmsUInt32Number nGamutPCSposition, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + cmsUInt32Number dwFlags); + +CMSAPI void CMSEXPORT cmsDeleteTransform(cmsHTRANSFORM hTransform); + +CMSAPI void CMSEXPORT cmsDoTransform(cmsHTRANSFORM Transform, + const void * InputBuffer, + void * OutputBuffer, + cmsUInt32Number Size); + +CMSAPI void CMSEXPORT cmsSetAlarmCodes(cmsUInt16Number NewAlarm[cmsMAXCHANNELS]); +CMSAPI void CMSEXPORT cmsGetAlarmCodes(cmsUInt16Number NewAlarm[cmsMAXCHANNELS]); + +// Adaptation state for absolute colorimetric intent +CMSAPI cmsFloat64Number CMSEXPORT cmsSetAdaptationState(cmsFloat64Number d); + +CMSAPI cmsContext CMSEXPORT cmsGetTransformContextID(cmsHTRANSFORM hTransform); + + +// PostScript ColorRenderingDictionary and ColorSpaceArray ---------------------------------------------------- + +typedef enum { cmsPS_RESOURCE_CSA, cmsPS_RESOURCE_CRD } cmsPSResourceType; + +// lcms2 unified method to access postscript color resources +CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptColorResource(cmsContext ContextID, + cmsPSResourceType Type, + cmsHPROFILE hProfile, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags, + cmsIOHANDLER* io); + +CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptCSA(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen); +CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptCRD(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen); + + +// IT8.7 / CGATS.17-200x handling ----------------------------------------------------------------------------- + +CMSAPI cmsHANDLE CMSEXPORT cmsIT8Alloc(cmsContext ContextID); +CMSAPI void CMSEXPORT cmsIT8Free(cmsHANDLE hIT8); + +// Tables +CMSAPI cmsUInt32Number CMSEXPORT cmsIT8TableCount(cmsHANDLE hIT8); +CMSAPI cmsInt32Number CMSEXPORT cmsIT8SetTable(cmsHANDLE hIT8, cmsUInt32Number nTable); + +// Persistence +CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromFile(cmsContext ContextID, const char* cFileName); +CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromMem(cmsContext ContextID, void *Ptr, cmsUInt32Number len); +// CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromIOhandler(cmsContext ContextID, cmsIOHANDLER* io); + +CMSAPI cmsBool CMSEXPORT cmsIT8SaveToFile(cmsHANDLE hIT8, const char* cFileName); +CMSAPI cmsBool CMSEXPORT cmsIT8SaveToMem(cmsHANDLE hIT8, void *MemPtr, cmsUInt32Number* BytesNeeded); + +// Properties +CMSAPI const char* CMSEXPORT cmsIT8GetSheetType(cmsHANDLE hIT8); +CMSAPI cmsBool CMSEXPORT cmsIT8SetSheetType(cmsHANDLE hIT8, const char* Type); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetComment(cmsHANDLE hIT8, const char* cComment); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyStr(cmsHANDLE hIT8, const char* cProp, const char *Str); +CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyDbl(cmsHANDLE hIT8, const char* cProp, cmsFloat64Number Val); +CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyHex(cmsHANDLE hIT8, const char* cProp, cmsUInt32Number Val); +CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyUncooked(cmsHANDLE hIT8, const char* Key, const char* Buffer); + + +CMSAPI const char* CMSEXPORT cmsIT8GetProperty(cmsHANDLE hIT8, const char* cProp); +CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetPropertyDbl(cmsHANDLE hIT8, const char* cProp); +CMSAPI cmsUInt32Number CMSEXPORT cmsIT8EnumProperties(cmsHANDLE hIT8, char ***PropertyNames); + +// Datasets +CMSAPI const char* CMSEXPORT cmsIT8GetDataRowCol(cmsHANDLE hIT8, int row, int col); +CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetDataRowColDbl(cmsHANDLE hIT8, int row, int col); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetDataRowCol(cmsHANDLE hIT8, int row, int col, + const char* Val); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetDataRowColDbl(cmsHANDLE hIT8, int row, int col, + cmsFloat64Number Val); + +CMSAPI const char* CMSEXPORT cmsIT8GetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample); + + +CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetDataDbl(cmsHANDLE hIT8, const char* cPatch, const char* cSample); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetData(cmsHANDLE hIT8, const char* cPatch, + const char* cSample, + const char *Val); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetDataDbl(cmsHANDLE hIT8, const char* cPatch, + const char* cSample, + cmsFloat64Number Val); + +CMSAPI int CMSEXPORT cmsIT8FindDataFormat(cmsHANDLE hIT8, const char* cSample); +CMSAPI cmsBool CMSEXPORT cmsIT8SetDataFormat(cmsHANDLE hIT8, int n, const char *Sample); +CMSAPI int CMSEXPORT cmsIT8EnumDataFormat(cmsHANDLE hIT8, char ***SampleNames); + +CMSAPI const char* CMSEXPORT cmsIT8GetPatchName(cmsHANDLE hIT8, int nPatch, char* buffer); + +// The LABEL extension +CMSAPI int CMSEXPORT cmsIT8SetTableByLabel(cmsHANDLE hIT8, const char* cSet, const char* cField, const char* ExpectedType); + +// Formatter for double +CMSAPI void CMSEXPORT cmsIT8DefineDblFormat(cmsHANDLE hIT8, const char* Formatter); + +// Gamut boundary description routines ------------------------------------------------------------------------------ + +CMSAPI cmsHANDLE CMSEXPORT cmsGBDAlloc(cmsContext ContextID); +CMSAPI void CMSEXPORT cmsGBDFree(cmsHANDLE hGBD); +CMSAPI cmsBool CMSEXPORT cmsGDBAddPoint(cmsHANDLE hGBD, const cmsCIELab* Lab); +CMSAPI cmsBool CMSEXPORT cmsGDBCompute(cmsHANDLE hGDB, cmsUInt32Number dwFlags); +CMSAPI cmsBool CMSEXPORT cmsGDBCheckPoint(cmsHANDLE hGBD, const cmsCIELab* Lab); + +// Feature detection ---------------------------------------------------------------------------------------------- + +// Estimate the black point +CMSAPI cmsBool CMSEXPORT cmsDetectBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags); + +// Estimate total area coverage +CMSAPI cmsFloat64Number CMSEXPORT cmsDetectTAC(cmsHPROFILE hProfile); + + +// Poor man's gamut mapping +CMSAPI cmsBool CMSEXPORT cmsDesaturateLab(cmsCIELab* Lab, + double amax, double amin, + double bmax, double bmin); + +#ifndef CMS_USE_CPP_API +# ifdef __cplusplus + } +# endif +#endif + +#define _lcms2_H +#endif diff --git a/contrib/menuetlibc/openjpeg/libs/lcms2/lcms2_plugin.h b/contrib/menuetlibc/openjpeg/libs/lcms2/lcms2_plugin.h new file mode 100755 index 0000000000..fd90350135 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libs/lcms2/lcms2_plugin.h @@ -0,0 +1,533 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// 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 OR COPYRIGHT HOLDERS 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. +// +//--------------------------------------------------------------------------------- +// +// This is the plug-in header file. Normal LittleCMS clients should not use it. +// It is provided for plug-in writters that may want to access the support +// functions to do low level operations. All plug-in related structures +// are defined here. Including this file forces to include the standard API too. + +#ifndef _lcms_plugin_H + +// Deal with Microsoft's attempt at deprecating C standard runtime functions +#ifdef _MSC_VER +# if (_MSC_VER >= 1400) +# ifndef _CRT_SECURE_NO_DEPRECATE +# define _CRT_SECURE_NO_DEPRECATE +# endif +# ifndef _CRT_SECURE_NO_WARNINGS +# define _CRT_SECURE_NO_WARNINGS +# endif +# endif +#endif + +#ifndef _lcms2_H +#include "lcms2.h" +#endif + +// We need some standard C functions. +#include +#include +#include +#include +#include + + +#ifndef CMS_USE_CPP_API +# ifdef __cplusplus +extern "C" { +# endif +#endif + +// Vector & Matrix operations ----------------------------------------------------------------------- + +// Axis of the matrix/array. No specific meaning at all. +#define VX 0 +#define VY 1 +#define VZ 2 + +// Vectors +typedef struct { + cmsFloat64Number n[3]; + + } cmsVEC3; + +// 3x3 Matrix +typedef struct { + cmsVEC3 v[3]; + + } cmsMAT3; + +CMSAPI void CMSEXPORT _cmsVEC3init(cmsVEC3* r, cmsFloat64Number x, cmsFloat64Number y, cmsFloat64Number z); +CMSAPI void CMSEXPORT _cmsVEC3minus(cmsVEC3* r, const cmsVEC3* a, const cmsVEC3* b); +CMSAPI void CMSEXPORT _cmsVEC3cross(cmsVEC3* r, const cmsVEC3* u, const cmsVEC3* v); +CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3dot(const cmsVEC3* u, const cmsVEC3* v); +CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3length(const cmsVEC3* a); +CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3distance(const cmsVEC3* a, const cmsVEC3* b); + +CMSAPI void CMSEXPORT _cmsMAT3identity(cmsMAT3* a); +CMSAPI cmsBool CMSEXPORT _cmsMAT3isIdentity(const cmsMAT3* a); +CMSAPI void CMSEXPORT _cmsMAT3per(cmsMAT3* r, const cmsMAT3* a, const cmsMAT3* b); +CMSAPI cmsBool CMSEXPORT _cmsMAT3inverse(const cmsMAT3* a, cmsMAT3* b); +CMSAPI cmsBool CMSEXPORT _cmsMAT3solve(cmsVEC3* x, cmsMAT3* a, cmsVEC3* b); +CMSAPI void CMSEXPORT _cmsMAT3eval(cmsVEC3* r, const cmsMAT3* a, const cmsVEC3* v); + + +// Error logging ------------------------------------------------------------------------------------- + +CMSAPI void CMSEXPORT cmsSignalError(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText, ...); + +// Memory management ---------------------------------------------------------------------------------- + +CMSAPI void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size); +CMSAPI void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size); +CMSAPI void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size); +CMSAPI void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize); +CMSAPI void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr); +CMSAPI void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size); + +// I/O handler ---------------------------------------------------------------------------------- + +struct _cms_io_handler { + + void* stream; // Associated stream, which is implemented differently depending on media. + + cmsContext ContextID; + cmsUInt32Number UsedSpace; + char PhysicalFile[cmsMAX_PATH]; + + cmsUInt32Number (* Read)(struct _cms_io_handler* iohandler, void *Buffer, + cmsUInt32Number size, + cmsUInt32Number count); + cmsBool (* Seek)(struct _cms_io_handler* iohandler, cmsUInt32Number offset); + cmsBool (* Close)(struct _cms_io_handler* iohandler); + cmsUInt32Number (* Tell)(struct _cms_io_handler* iohandler); + cmsBool (* Write)(struct _cms_io_handler* iohandler, cmsUInt32Number size, + const void* Buffer); +}; + +// Endianess adjust functions +CMSAPI cmsUInt16Number CMSEXPORT _cmsAdjustEndianess16(cmsUInt16Number Word); +CMSAPI cmsUInt32Number CMSEXPORT _cmsAdjustEndianess32(cmsUInt32Number Value); +CMSAPI void CMSEXPORT _cmsAdjustEndianess64(cmsUInt64Number* Result, cmsUInt64Number QWord); + +// Helper IO functions +CMSAPI cmsBool CMSEXPORT _cmsReadUInt8Number(cmsIOHANDLER* io, cmsUInt8Number* n); +CMSAPI cmsBool CMSEXPORT _cmsReadUInt16Number(cmsIOHANDLER* io, cmsUInt16Number* n); +CMSAPI cmsBool CMSEXPORT _cmsReadUInt32Number(cmsIOHANDLER* io, cmsUInt32Number* n); +CMSAPI cmsBool CMSEXPORT _cmsReadFloat32Number(cmsIOHANDLER* io, cmsFloat32Number* n); +CMSAPI cmsBool CMSEXPORT _cmsReadUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n); +CMSAPI cmsBool CMSEXPORT _cmsRead15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number* n); +CMSAPI cmsBool CMSEXPORT _cmsReadXYZNumber(cmsIOHANDLER* io, cmsCIEXYZ* XYZ); +CMSAPI cmsBool CMSEXPORT _cmsReadUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, cmsUInt16Number* Array); + +CMSAPI cmsBool CMSEXPORT _cmsWriteUInt8Number(cmsIOHANDLER* io, cmsUInt8Number n); +CMSAPI cmsBool CMSEXPORT _cmsWriteUInt16Number(cmsIOHANDLER* io, cmsUInt16Number n); +CMSAPI cmsBool CMSEXPORT _cmsWriteUInt32Number(cmsIOHANDLER* io, cmsUInt32Number n); +CMSAPI cmsBool CMSEXPORT _cmsWriteFloat32Number(cmsIOHANDLER* io, cmsFloat32Number n); +CMSAPI cmsBool CMSEXPORT _cmsWriteUInt64Number(cmsIOHANDLER* io, cmsUInt64Number n); +CMSAPI cmsBool CMSEXPORT _cmsWrite15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number n); +CMSAPI cmsBool CMSEXPORT _cmsWriteXYZNumber(cmsIOHANDLER* io, const cmsCIEXYZ* XYZ); +CMSAPI cmsBool CMSEXPORT _cmsWriteUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, const cmsUInt16Number* Array); + +// ICC base tag +typedef struct { + cmsTagTypeSignature sig; + cmsInt8Number reserved[4]; + +} _cmsTagBase; + +// Type base helper functions +CMSAPI cmsTagTypeSignature CMSEXPORT _cmsReadTypeBase(cmsIOHANDLER* io); +CMSAPI cmsBool CMSEXPORT _cmsWriteTypeBase(cmsIOHANDLER* io, cmsTagTypeSignature sig); + +// Alignment functions +CMSAPI cmsBool CMSEXPORT _cmsReadAlignment(cmsIOHANDLER* io); +CMSAPI cmsBool CMSEXPORT _cmsWriteAlignment(cmsIOHANDLER* io); + +// To deal with text streams. 2K at most +CMSAPI cmsBool CMSEXPORT _cmsIOPrintf(cmsIOHANDLER* io, const char* frm, ...); + +// Fixed point helper functions +CMSAPI cmsFloat64Number CMSEXPORT _cms8Fixed8toDouble(cmsUInt16Number fixed8); +CMSAPI cmsUInt16Number CMSEXPORT _cmsDoubleTo8Fixed8(cmsFloat64Number val); + +CMSAPI cmsFloat64Number CMSEXPORT _cms15Fixed16toDouble(cmsS15Fixed16Number fix32); +CMSAPI cmsS15Fixed16Number CMSEXPORT _cmsDoubleTo15Fixed16(cmsFloat64Number v); + +// Date/time helper functions +CMSAPI void CMSEXPORT _cmsEncodeDateTimeNumber(cmsDateTimeNumber *Dest, const struct tm *Source); +CMSAPI void CMSEXPORT _cmsDecodeDateTimeNumber(const cmsDateTimeNumber *Source, struct tm *Dest); + + +//---------------------------------------------------------------------------------------------------------- + +// Plug-in foundation +#define cmsPluginMagicNumber 0x61637070 // 'acpp' + +#define cmsPluginMemHandlerSig 0x6D656D48 // 'memH' +#define cmsPluginInterpolationSig 0x696E7048 // 'inpH' +#define cmsPluginParametricCurveSig 0x70617248 // 'parH' +#define cmsPluginFormattersSig 0x66726D48 // 'frmH +#define cmsPluginTagTypeSig 0x74797048 // 'typH' +#define cmsPluginTagSig 0x74616748 // 'tagH' +#define cmsPluginRenderingIntentSig 0x696E7448 // 'intH' +#define cmsPluginMultiProcessElementSig 0x6D706548 // 'mpeH' +#define cmsPluginOptimizationSig 0x6F707448 // 'optH' + +typedef struct _cmsPluginBaseStruct { + + cmsUInt32Number Magic; // 'acpp' signature + cmsUInt32Number ExpectedVersion; // Expected version of LittleCMS + cmsUInt32Number Type; // Type of plug-in + struct _cmsPluginBaseStruct* Next; // For multiple plugin definition. NULL for end of list. + +} cmsPluginBase; + +// Maximum number of types in a plugin array +#define MAX_TYPES_IN_LCMS_PLUGIN 20 + +//---------------------------------------------------------------------------------------------------------- + +// Memory handler. Each new plug-in type replaces current behaviour +typedef struct { + + cmsPluginBase base; + + // Required + void * (* MallocPtr)(cmsContext ContextID, cmsUInt32Number size); + void (* FreePtr)(cmsContext ContextID, void *Ptr); + void * (* ReallocPtr)(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize); + + // Optional + void * (* MallocZeroPtr)(cmsContext ContextID, cmsUInt32Number size); + void * (* CallocPtr)(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size); + void * (* DupPtr)(cmsContext ContextID, const void* Org, cmsUInt32Number size); + +} cmsPluginMemHandler; + + +// ------------------------------------------------------------------------------------------------------------------ + +// Interpolation. 16 bits and floating point versions. +struct _cms_interp_struc; + +// Interpolation callbacks + +// 16 bits forward interpolation. This function performs precision-limited linear interpolation +// and is supposed to be quite fast. Implementation may be tetrahedral or trilinear, and plug-ins may +// choose to implement any other interpolation algorithm. +typedef void (* _cmsInterpFn16)(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const struct _cms_interp_struc* p); + +// Floating point forward interpolation. Full precision interpolation using floats. This is not a +// time critical function. Implementation may be tetrahedral or trilinear, and plug-ins may +// choose to implement any other interpolation algorithm. +typedef void (* _cmsInterpFnFloat)(cmsFloat32Number const Input[], + cmsFloat32Number Output[], + const struct _cms_interp_struc* p); + + + +// This type holds a pointer to an interpolator that can be either 16 bits or float +typedef union { + _cmsInterpFn16 Lerp16; // Forward interpolation in 16 bits + _cmsInterpFnFloat LerpFloat; // Forward interpolation in floating point +} cmsInterpFunction; + +// Flags for interpolator selection +#define CMS_LERP_FLAGS_16BITS 0x0000 // The default +#define CMS_LERP_FLAGS_FLOAT 0x0001 // Requires different implementation +#define CMS_LERP_FLAGS_TRILINEAR 0x0100 // Hint only + + +#define MAX_INPUT_DIMENSIONS 8 + +typedef struct _cms_interp_struc { // Used on all interpolations. Supplied by lcms2 when calling the interpolation function + + cmsContext ContextID; // The calling thread + + cmsUInt32Number dwFlags; // Keep original flags + cmsUInt32Number nInputs; // != 1 only in 3D interpolation + cmsUInt32Number nOutputs; // != 1 only in 3D interpolation + + cmsUInt32Number nSamples[MAX_INPUT_DIMENSIONS]; // Valid on all kinds of tables + cmsUInt32Number Domain[MAX_INPUT_DIMENSIONS]; // Domain = nSamples - 1 + + cmsUInt32Number opta[MAX_INPUT_DIMENSIONS]; // Optimization for 3D CLUT. This is the number of nodes premultiplied for each + // dimension. For example, in 7 nodes, 7, 7^2 , 7^3, 7^4, etc. On non-regular + // Samplings may vary according of the number of nodes for each dimension. + + const void *Table; // Points to the actual interpolation table + cmsInterpFunction Interpolation; // Points to the function to do the interpolation + + } cmsInterpParams; + +// Interpolators factory +typedef cmsInterpFunction (* cmsInterpFnFactory)(cmsUInt32Number nInputChannels, cmsUInt32Number nOutputChannels, cmsUInt32Number dwFlags); + +// The plug-in +typedef struct { + cmsPluginBase base; + + // Points to a user-supplied function which implements the factory + cmsInterpFnFactory InterpolatorsFactory; + +} cmsPluginInterpolation; + +//---------------------------------------------------------------------------------------------------------- + +// Parametric curves. A negative type means same function but analytically inverted. Max. number of params is 10 + +// Evaluator callback for user-suplied parametric curves. May implement more than one type +typedef cmsFloat64Number (* cmsParametricCurveEvaluator)(cmsInt32Number Type, const cmsFloat64Number Params[10], cmsFloat64Number R); + +// Plug-in may implement an arbitrary number of parametric curves +typedef struct { + cmsPluginBase base; + + cmsUInt32Number nFunctions; // Number of supported functions + cmsUInt32Number FunctionTypes[MAX_TYPES_IN_LCMS_PLUGIN]; // The identification types + cmsUInt32Number ParameterCount[MAX_TYPES_IN_LCMS_PLUGIN]; // Number of parameters for each function + + cmsParametricCurveEvaluator Evaluator; // The evaluator + +} cmsPluginParametricCurves; +//---------------------------------------------------------------------------------------------------------- + +// Formatters. This plug-in adds new handlers, replacing them if they already exist. Formatters dealing with +// cmsFloat32Number (bps = 4) or double (bps = 0) types are requested via FormatterFloat callback. Others come across +// Formatter16 callback + +struct _cmstransform_struct; + +typedef cmsUInt8Number* (* cmsFormatter16)(register struct _cmstransform_struct* CMMcargo, + register cmsUInt16Number Values[], + register cmsUInt8Number* Buffer, + register cmsUInt32Number Stride); + +typedef cmsUInt8Number* (* cmsFormatterFloat)(struct _cmstransform_struct* CMMcargo, + cmsFloat32Number Values[], + cmsUInt8Number* Buffer, + cmsUInt32Number Stride); + +// This type holds a pointer to a formatter that can be either 16 bits or cmsFloat32Number +typedef union { + cmsFormatter16 Fmt16; + cmsFormatterFloat FmtFloat; + +} cmsFormatter; + +#define CMS_PACK_FLAGS_16BITS 0x0000 +#define CMS_PACK_FLAGS_FLOAT 0x0001 + +typedef enum { cmsFormatterInput=0, cmsFormatterOutput=1 } cmsFormatterDirection; + +typedef cmsFormatter (* cmsFormatterFactory)(cmsUInt32Number Type, // Specific type, i.e. TYPE_RGB_8 + cmsFormatterDirection Dir, + cmsUInt32Number dwFlags); // precision + +// Plug-in may implement an arbitrary number of formatters +typedef struct { + cmsPluginBase base; + cmsFormatterFactory FormattersFactory; + +} cmsPluginFormatters; + +//---------------------------------------------------------------------------------------------------------- + +// Tag type handler. Each type is free to return anything it wants, and it is up to the caller to +// know in advance what is the type contained in the tag. +typedef struct _cms_typehandler_struct { + + cmsTagTypeSignature Signature; // The signature of the type + + // Allocates and reads items + void * (* ReadPtr)(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + cmsUInt32Number* nItems, + cmsUInt32Number SizeOfTag); + + // Writes n Items + cmsBool (* WritePtr)(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + void* Ptr, + cmsUInt32Number nItems); + + // Duplicate an item or array of items + void* (* DupPtr)(struct _cms_typehandler_struct* self, + const void *Ptr, + cmsUInt32Number n); + + // Free all resources + void (* FreePtr)(struct _cms_typehandler_struct* self, + void *Ptr); + + // The calling thread + cmsContext ContextID; + +} cmsTagTypeHandler; + +// Each plug-in implements a single type +typedef struct { + cmsPluginBase base; + cmsTagTypeHandler Handler; + +} cmsPluginTagType; + +//---------------------------------------------------------------------------------------------------------- + +// This is the tag plugin, which identifies tags. For writing, a pointer to function is provided. +// This function should return the desired type for this tag, given the version of profile +// and the data being serialized. +typedef struct { + + cmsUInt32Number ElemCount; // If this tag needs an array, how many elements should keep + + // For reading. + cmsUInt32Number nSupportedTypes; // In how many types this tag can come (MAX_TYPES_IN_LCMS_PLUGIN maximum) + cmsTagTypeSignature SupportedTypes[MAX_TYPES_IN_LCMS_PLUGIN]; + + // For writting + cmsTagTypeSignature (* DecideType)(cmsFloat64Number ICCVersion, const void *Data); + +} cmsTagDescriptor; + +// Plug-in implements a single tag +typedef struct { + cmsPluginBase base; + + cmsTagSignature Signature; + cmsTagDescriptor Descriptor; + +} cmsPluginTag; + +//---------------------------------------------------------------------------------------------------------- + +// Custom intents. This function should join all profiles specified in the array in +// a single LUT. Any custom intent in the chain redirects to custom function. If more than +// one custom intent is found, the one located first is invoked. Usually users should use only one +// custom intent, so mixing custom intents in same multiprofile transform is not supported. + +typedef cmsPipeline* (* cmsIntentFn)( cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number Intents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + + +// Each plug-in defines a single intent number. +typedef struct { + cmsPluginBase base; + cmsUInt32Number Intent; + cmsIntentFn Link; + char Description[256]; + +} cmsPluginRenderingIntent; + + +// The default ICC intents (perceptual, saturation, rel.col and abs.col) +CMSAPI cmsPipeline* CMSEXPORT _cmsDefaultICCintents(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number Intents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + + +//---------------------------------------------------------------------------------------------------------- + +// Pipelines, Multi Process Elements. + +typedef void (* _cmsStageEvalFn) (const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage* mpe); +typedef void*(* _cmsStageDupElemFn) (cmsStage* mpe); +typedef void (* _cmsStageFreeElemFn) (cmsStage* mpe); + + +// This function allocates a generic MPE +CMSAPI cmsStage* CMSEXPORT _cmsStageAllocPlaceholder(cmsContext ContextID, + cmsStageSignature Type, + cmsUInt32Number InputChannels, + cmsUInt32Number OutputChannels, + _cmsStageEvalFn EvalPtr, // Points to fn that evaluates the element (always in floating point) + _cmsStageDupElemFn DupElemPtr, // Points to a fn that duplicates the stage + _cmsStageFreeElemFn FreePtr, // Points to a fn that sets the element free + void* Data); // A generic pointer to whatever memory needed by the element +typedef struct { + cmsPluginBase base; + cmsTagTypeHandler Handler; + +} cmsPluginMultiProcessElement; + +//---------------------------------------------------------------------------------------------------------- +// Optimization. Using this plug-in, additional optimization strategies may be implemented. +// The function should return TRUE if any optimization is done on the LUT, this terminates +// the optimization search. Or FALSE if it is unable to optimize and want to give a chance +// to the rest of optimizers. + +typedef void (* _cmsOPTeval16Fn)(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register const void* Data); + +typedef void (* _cmsOPTfreeDataFn)(cmsContext ContextID, void* Data); +typedef void* (* _cmsOPTdupDataFn)(cmsContext ContextID, const void* Data); + + +typedef cmsBool (* _cmsOPToptimizeFn)(cmsPipeline** Lut, + cmsUInt32Number Intent, + cmsUInt32Number* InputFormat, + cmsUInt32Number* OutputFormat, + cmsUInt32Number* dwFlags); + +// This function may be used to set the optional evaluator and a block of private data. If private data is being used, an optional +// duplicator and free functions should also be specified in order to duplicate the LUT construct. Use NULL to inhibit such functionality. + +CMSAPI void CMSEXPORT _cmsPipelineSetOptimizationParameters(cmsPipeline* Lut, + _cmsOPTeval16Fn Eval16, + void* PrivateData, + _cmsOPTfreeDataFn FreePrivateDataFn, + _cmsOPTdupDataFn DupPrivateDataFn); + +typedef struct { + cmsPluginBase base; + + // Optimize entry point + _cmsOPToptimizeFn OptimizePtr; + +} cmsPluginOptimization; + +//---------------------------------------------------------------------------------------------------------- + +#ifndef CMS_USE_CPP_API +# ifdef __cplusplus + } +# endif +#endif + +#define _lcms_plugin_H +#endif diff --git a/contrib/menuetlibc/openjpeg/libs/lcms2/lcms2_static.lib b/contrib/menuetlibc/openjpeg/libs/lcms2/lcms2_static.lib new file mode 100755 index 0000000000000000000000000000000000000000..3256a167d3a16d6533f65d01482a4a361267c63b GIT binary patch literal 1312736 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
    l% zF@AJQZ{QZr?;(B@Yt7s*2~gMGV!qHLy@OkfnSf;^iHyz60iPw@EW3}S#jcfSax3tX zrN-KORQhl05(1ffU#*iG?UUWo)IQDdHZ?s}(5bUR&2+1&ueFpRU5|5ZV+?O-= zce%9z(Y%_j@#Mv*1u?-cVtXsgp^k#r&hOI4%xnSX>{+-ws>9*UK(I&pfSovYV$7c& z=UIVNBTnwZAcJ7YCPTF8xM>6OTSZo_FYv%~8)g3SMhT@9v5F}j>JaVaWomSts|o&D z>Cg%h)2GsDxXUW%R&Sbl8Czz8oe;-ZYPJqzJ-g&wNljD2|OQ~8+kcZ43 z>C7%Hb`?v+Opu)`)aGaY#jd4^?CwI2#7B)Z3+97rxiH-=ozN;FD&3H_RG98si)!nY z){573&2ADg;0+L+n4)V16075|j_O90Kwr|@er9n&Z~6h?g^{9*6SouqT_4YvPNp&D>&3wAYu3Jp!c?){{ZG%T_pX^aTQLk{wXVKCg8zL#sX;GMdVr$W6}`p3LK}vaS9x#z!4~*bbO#wu}R9dlV;bS z+2=grL|f3-)6==OcOw>|A6);EKxoaW-O^g6iwW z37BcsFIq)Wlk~IgkbHf&gxBls_3a3LogMG5v)8?=4h0q`@mJr5(7&d{f8CuN01QAp zAB7p#HK|i1XubWCW;QIMLz8bA4pOHqol8haoQ2bO1Gtqo&bSp71J9aFr*Z zR(6}UBGJ|r37aYs)GHD&RfG{uprk<{iszDu9;r=U4ooM3>G&$oC96EjDo;wq^kQmp zo6ogtm213Zv-n+?HZ;pFqc-(%ykAdkfp)pXR2@aHPRdjrwOs-z&Dt(<{ZhSMcA~mL zR2R=Bt9yiYiKDiAP}|%p&-5x!c9mypmFG&e!U=2BnTddLQm^HXQ}WiYd5Dn z9@Mzf6ZX8SNA$Kn*IdsN)EA`MI_gTV>NzCeM(uQ)J?W?Lkt%Wx0CPN#j?67e^`g|j zK&c0NJo|e*i)z_Jt`f?oUVJhYeb6YnzQ0H7u8RoOx+_!i)xc*v@WE4~B+;byYm!sj zq#HJnM0?HAkjF|L$}$c-uLGX79?!KZk`u0uo+oa)(J$3bBP44*H@$AdB>w8xYHvwD zqDQVr_DP_H=h2a=x%6Eq{SZpOK`r`nNN%c*YXvnCq*D#6$x{6WgHF^$KkFWOJ<7g9 ztvgV_XS*m&0fpOu!Yw_XH}-gLQW3ezwOVbcGYNrP3Q1ic~ z;tz@9@vaunLrCraAXp44ekg}XD0De~g(3$X&=z2I(6&|S=-r^l(<=rY=!v!grQ_?T z=@In0zJ=;%8HTKqj1$BwSQKBRWYa5XP7z+E;}b>%y`Fq*G^H$6u<9>R zi=S=u{6wwAV*Mu@56SPhZ=*qWGyl4Nj5-AtrP>hH>1P|YVOAsr8@=D2lmn9FN5sf4 z0d^m_7|(X-OIX$5=SH0~Lr1W@XDb~&oAn5KT_Yk~$3}RXVAbvx zEVOoW*mKfms$c!2&7ipWC92n+eJxfO#oM!zw4#HDhThG6!X$v#XB zyP2DzS~iq~W!4j0DMFcN+O3DGjhq;=J|qx+n3Y(0*$oQuZ!`MR*@ zM|L4i&U5|LUVqwt?~U*68xS=2#Vgk|IUC#)a%=6rlU)$Zkv8zEg zFZd?m{x>NFUW?098tiJZpDTR+{twzWv%nQJe3fHa3S~o|vo4QMWnBZUk%7%@>dj=;jN+ z770@wQ}r&SxcLGSHZzb^PjBfvBtL%k@Jis5b`7j~g4(t=j)nc!2{Cd#es&T-GwziR zQ3lBHmo66&zV-Q8wbbAa{cKH&BA`NOLKYr>UVEAV>#DHgm;2?6Wr^9iq= z?p0=31rw|j0c+P%uuKVcSeLm^G{ZUoSa%X$cesap0PAwsJ5{{iX2r{t5U}oW6JA%i zDa)0vm1l~oki(5iKeU!=>gzU9v~~;nI!b)fjuNjY#rXPe0`y97O{b&n9z6@L`QPB0 z4Gzybhi9$BbCSwFdt9eF>L;~epM3pPon^X#(BFat!P_nn)gY&``UZ!l-mK&NjB9-@ z-k)&d{RyWE0q-|oKy|npbvUK{IxM0Nb_d2Zhv!U(XOqLTQLV#1#kOCu9Z+lsF;7!$ zuXZ^d^-YWhX#4uX$RJL+dLuGWaxy3Tb_*FfJ1EG9-SaJVmYa8O_oA^<_| z3mo-xsk-&E=+`;yalq88&ZZpojesdS*U6yNdoKi~?z#Xoe3Z>zmm(LNZ=Fc`05$6a z-L5STJU`y8W*1~a?`2$TG<`AwHuYMeaN37o$~e3p>0D!K55ARpuz`&!6QF-_i_0ZS z6eZucg&L*yMk>hVz*OKu3?Y)H5g-&}&X(amF6CA#UY%7Bl56H z;~d@w&ad4@8P72y)_0NQHwyXL$EbZmzQo9Y!_7HvM~;aV$a)7}Mg|>jfx(>wXo-4S zr3>nLPK$cp#c7XNChg;C{t;;RrK8EY|QW<|qz`$@ub8I{kbDV8r z4z&ucnd5#cr*q^&hucF%kyeYoF~t0 z#{4)UQ4DFbczjYkJ|!NX#=|w?s3(DYQ)7OHA}1a7G$NZC^Peg5GDkgQZp_b7;HBoq zyu#tW(!oJ`V_xB?U&@VnnP|*ca%29Bib))W9kwyKKyJ(l6Tx??jVZD>H0BooyKVqB zNe`A>XxJY?KMKBQix})KB%!)wa^f*#uzten+9is1F$y<2SjK*lY6H?4P?lgHqc)SK z+NdDa>0Kq_x2V)T4(QVAo4YlP6bj=AVJDken~ zc37dq1+vgNfTWr}ca6%pB6~wO{Vl=HIfO_VfV;lyFH}Ln*=}^y&DlsX`yJ&#)eUTx z5E=$H2Tj8nIy~2F z&EJJc6oZqV=y8I0tQ3!K@i-9=*R78Fji^Es7xYl%ZI1fu5!u8At10r$j`|zST(A~_ zB#dhBMb&(ii;P)V+7jxiG>JIZo2UiE{HliCu1C&ryD7s4WI$z3rqVl4hqjN|TrGs% z0eV68>w&J|qchLFLB8<);@r z-F} z5`Yw({|RT3l1ZC~?_-?KBAi-N)Wx+&Msq`KMtWA}?RXh^o5L-@u!-KN*HOvSC6hPG zQ-Q!=cZ(XR1JstoAge0 zF?Gu_#MCfAV3c|gV(J|Z&jSw6{SMFDH8HhA6f+_o7m3Hq#N*}SF^Y%lAxHgw5VJ{4 z`6%*Tj`{; zy~hM3c2v3bRs-L@*OWUhP)HGwN6cdCA06%wI5hVvU@>T$+tjBsjAQBiwjG&jUJ(zBSF zz{|*o9Bu(-lE7H>0?q`{!lgnlFk?-6!Op`JtYYdiH{Pzpr0234n(I=epXhRbi2DBJ zlouRr5Pk_UV-WsbCc>*#u~b3VL0&=SbdG$$;eL#Yx)Pswypl>>f~;zLn6POSGgF7j z%`6EaWz3jU=`-IHnM#&_kN5eh|o@8Q!$zKYX#)4e~!ECjxV4$k>25_BqN_CGL{hS{({4G z$S&6UzDO32Pf%wfz{%k+HAH>N97RUWvH_pEg|KM4ZU?yVLpYan@Kn)VYy^(SZKzUz zf1#-e4m|fzSha%=kTI0_mQI#c5vL@=8g>}KD1iVQ2rdP9(F)jPgH_k&cRcB6Dwu7w zYW(n59PTH%Q||{T*ALGSTKZSeEUy1Wf=u`zz-$W(u(@fdS_deL#l9~Zha0ac^+BX= zYO`w)$fDsjcyWKljI1!d!|n|--o|9SmJ-wK@wIpv`I^K1CC2=9_%c;e$j4^tGJ74i z*;IoW%DaQhyUq$&^#8*EUb5L50pDN+Y?A0&vwhP{36tQ_n(Z47_cyun*kF6C&GvfA za@5Us6H+%d+Zzzb&2}?h+~082KTUm!h+C67u!VH^Ta4VTh&8p0+M*X5Eqa><=S_GS z`L@F?^4(7PbdbKD;qNfGH(P>hbm()>@OP=}-$^lo`3MQMpnXO`cM<&WIozE3?v|;? z)YR_p5yX3thHde0p`1@S+yaHSQdS)^6@`DN4EMDJ`k;Zr+X&EqINY52?JZN^tfBB9 z1o3{PnONa|ir)W<-n-o2ruPTvz0>_QdVdh_cszuMss0ihaD-se%**exCg~DMSj1>a z9=0ZVwMfFX)snp1n#5SMQ@cBcxa(=bsrHDG&?KTCMJUD>i0gJ2=xcuq5Ex&c#`y9B zhv&Z>p6@$6|EY~He}_mE{`cbX590BUc+|g-VdF_Vm_v0x0h(H0`h`%;{9v4s9}!U> zLk9OR9QFS~p0A$k`l-X^=*5t7%ND725m`iAz!KvXyaI07!aqcU#{tImGfnG*bHK-X*ABHLk%DmNB_v)R)d~F(Bt>CQP>$a? z>OTdTTej$C!Wx~y03V6QP;4-_pQ$?Q*FJ{4^jr(_w`fmu$;s0hV zKSgE!xRE*nkcl8fi+`e|KXJHDw-B;r(oZ8P%a+gJW#sn`wdm- z*yp)0_wT9Mzd+f3>Zt#OiKRE=7b!{S$TJT2uPD{O;CseKCx>m5!cA^$Jdr*dAb*eYAdy}?60J1l0f?22dH$X9h){_s%{cxCLP2S~ zw@vAv0|Y4jZFmcu>GW)JdNw*er#d|+J3Z^2o?fSCjnlK*={eEq>2|8lkiS3<(C3%p z@r-!2lEwZ&QQb&^rNexg$yC~ch}h1Q{sRlxs7^7@%tB6WZ{$4Tnx?K&Wa9upu zFrr%%8JTyu8{iuGhtG4m-NZc|lwY9fJ6%O_1;X6tIU&Xcb9%`v>?G$22waDF)>osh zPr`7CA3--VT_$&&&(t`9pj!0R3n-h=SG!nW?PgjDNknv6i7dJ*bA9*7S%h6T0+~`h zgwpv=bTom|J`(kMP3sPD{ViKW&)MN&6jnE(u+>0eRZA33YK6iY4TWAp!P9_(PSLv4 zj6xryu&xP({v)BVz7+}^G!#xH6#AU5vz@L8CO&X}l4>7@X;<(h*J(Y-`U!I6_(XSo z4c?!j_h-5-%_X=U;Tp>~Q3C_m<7ZQ=oQ4wXX9LdTXKN$!AlGdpBCIX!HR^U!6F`D> zI*}?m?%ks!k9;0Er03WGr2q)aOR=tZxw=0k-n9DdcJ4GU6bdHajuB z1#K`ltqp^5O|&r@%itU{8=}_iqE>SPP<=CMP39-`Xo%fmuJzeeg2gXQ&;~dNN3_}& zq-d%nZAaruo`)Cruv3TauP#83`|7zW1M7p88|h4msv?nKF+I`w)YYi7dc&zuNB?@2Ap|AgH?@AFG9Ef@i{7klh_t6%)o+CNe;h^ zn{LEfgE>&^&Df>~fbi9mYHxr&!u14w(R#_`F~El%1OQOh@6N}ljd$Ypi%=T3_{D_z z%bYGZ4fIbyNgXB0C4}b^~P;G?SSSM}j>(%D{qFsuYfr zD#ut@OA>{MMC9xgArg&ZL>%!u-J*`M)^%)X>?77Oz;#TtSI1*4tYsaOS{+kV#{lZ+ z_ET5O5K4w3QGb`HT0Z2+{B1ugaMgl z#_=)|a=L?5{zR)ngxCTLBd0q=$#zjP9Zg@)jtHZ88G^a@9cB^JRE0CaR3GjWosm#_ zg|%>tn+Ekh`*4hlxdQ22W)rjtrfwpI`CJp!{;FWRytpIU zpaDJ;mQ_thnx%9dZs<#G>(;LV2DlS@OgKGbPEW?^Njp7BO`k3!70{`O zM^!u)#bZAn^$ZDpBAevcah22ftYKpVTsEhi?yI_)0f)#Joadz72o)JO%dd{@7{tCiYlu}?}ZAQBdAi!v!2BW>o=_xrq^G?rR zrzh|9?9sUFb|k6iHHw3i7M;eY%1KqHdyyOL4kC_uo*|O9s=<1ONGuXwywJnj>Zx8Z@_qqfmEX)gaNtv%``{cT=<+pE8EO_}O@ zjJ9w+swpBB((XkJ@neH(!;OpWlGH?u{@Z~Fnh5W0H_~3PbDh&ub9%0I zdS31HT;uc{&|2wTqT=tSioc%v8lzUfhC3^U5Y^6TL^GpbYmI&nMO(>sgHD+1^tYP+ z_G3P8Ex!>t|yVG-@({r!WbB|Wpe?nT6`f2g_ zjClOBczhNQ*L$7yhp0{@pbjTU|Ai92+u*5tO-!SPGc!HV9Nta4w_1d+rtr6$(gV>i zP%)1f#k_-XV?nKkav@EjR0P$)W=_iRAJhQ=`WFfMqXzW%l39+23N@6WH-&1@#i*ht zCFoS7KGggx0e_DUTz#dy>T9p@x)HCYO?ni|dZk7zjw;k^z_IZ*Du`(|= zAImBx3%}j3v#Fpjvtj){Jyf)w2))N(WL0QAOeK94CAqoGuTh!SvCb&-|7Y(@;G-&% z|KFP#AYsTs011cWy-Aobz(5FxNj%6TBpe9@2)AGi$&f^HU^3zG92AgML=i>TRm2PN zUd3x*Rq$GMbr%tDWLaHxK}8gA1^(aa?sv@*H2Xh(pUU=y46(rh+g`zQ5qI-Of{B(^DOn_7r+F&;k?~;`x-1@ zw{Ky$9h!;0AyuDug?2DhSpJ&dI`|fqq32O!+^Km90|WC9?mpAB_#7eo4pg3(Tsk2F zkoEU$Cfe^o3oX!2XknwDo(6wF@kG0v7oR4{a)K<&r^QPZe8+oi_A6210{lo<##2vO z9*HWR<$aZn)yPt-EDuL%Im_y%HISvC>X4)an`}EBmA>X0wr4-sQA!2W(%${D?F`gS z#rFSrn#{`s9qn?74rClPU1Z|PTFJ#Iw&DXrj&BUABJmZVGzLD%o1x1q2i;^XwThuS z?Q$>6Q({Xkiz;ZC-NE5QcCUZhhki%uoWOHfgcTpr^aDWw_GWSG1P8%b9b zv@TfSZ#FUKUIpft>&%0Kc{Z}yz$fG2UfpE*5>YzLRLW3Yp*LJ1NKEW??APd2Yob%h z@|CFI*b9~g{8sF%Q5S)oyq7^(uQR_kI&((#N1bXzbShcCo+=tl`1@(Lzg2I1bM(ec z#GN|Trs!0%yfLPTd-TS4#iY4kr`Zyd=3$-Yfk+VDG@DIM)m&~O5-7|@)*R8-K3Oh7 z$t+U|(`|;{pqw>WMGYwSlM{at=J+zdqLgOhRT|{Dk7uoPlyqDfFavXO_KuthDFlqQ&{;CW2&{6**a69W^A=dV$CI#q6w&f*v^j&b7Hi63RVs^OMZsaDSwW-^85q_U9-7euN$pYMra>%w! zupxtTtGCLwbS4g|1Bkci3x!N+!$u~RRaLFb>ns&+)(2$^SSkgid|}O0L?PP%RXWea z-Dc|#An311BnkEeM?weu=YYeG7ls-q3^i65YP4>sGolzOFS?;}q8e&cbVC)W(h?YI z1sO`=hWZhYld#Aeqe_(M#xPW2xaE8?EtenNa%^y(BXpf7be$`7E!TCO97Wej(RD42 zs_TU4y3UBH>+En{XNBuJJ*KYHqU&n2&4f7W`Uu-HGc<^?QqRp{U&zg2KaZQkR?F+< z1-et+$z{wU0HlQ7GT!Ypfav-}~7S+0m~mX%S>a(Q&KTocnQ*M*y9UAS4+ z#xRS`cD+dc8r5HA+tsnGc5N)H*=*|t%V^Ps1wRBn`!-?Mr-WUf5O#fB*!3}C*SmGQ z-Vw#Fo1)uwV^q7|65Xy_V%qioaJ$|YZr6Ka+V#P%d_e6r=l1HkZWmRt_@|2V|RFlxCYs(aRIKMEiJwV5~S6 ziQ^biUm(8w#P`wS`&r_6hB%&%Be{5v_&!1$v&7LWjswNfBaQ?3(Vi*3_vc5spKgi1 zuJ9qE(yh1NF0sP5jssSgifq=@IZ>)kaY>DAK{~mxd{I+N9m^wYHgI>B#B-1fk285A zzjR1(NnzQ0%^vGxi;ZLg5I{CBb5$#=N_0sDlM78;1FX0U#2P*xHUK&Uv{7k_1#zx6 z2fWKA6)mlc;>)TehC{kbDmB*hC`M{+tm#!Wq*P>)qd;$|xOhH!)3uv15^NdZTiFue zMzE}p(_GTh1@LRr0O8kk2t(%ocvzwmK6Ly@%|}C}+QqMct6c1A%66`BoC@JMbKp2O zc11iZ!g1I=+ZkHl5G;N{1b3Pi-JMvAsZrgDRZWi7Gn3lt&(gNL?QECj;>%{6r$L50 z(IrSwg3s{FkjwD|(qXgB6Dg60|-;C!lnUX(-z&P z=SR0`lLpXY(}p%|x-hm)>tfloCbmrzYy@0h1)%)a%8KYfFN+E^*apx`v^vv}<$>U$ z*eYBgsv_DfZL8;Pwkx2auerH$8SiIoJ1PaY;nf2Nbh|;Wvto55_y-0a1!K8I58E=Z%_1 zQMA29tBck6=GaQ#B&uRH-OyIQ%C-kx(wHU|_VpNPv)ya$>}2Zfuc@j{riHBynEm|<@>43vc-j*1*Vnf; z*7zIewp`GkGf%5Swj|8&zHXL)FbIKWsP!$a+P|kvPn6rT&+Ht{#eF!8Jjbn z%{-QQt>*^Mb)MTj8$FvncY0p+931%7z%K?K8F=NO4TClh-ZD726PWEO-4r!F-xp}T zJZ@9m?QuKecE%l!`!?>oxXYBwm6c$=TDcNJu2t468YcI7VR9_2peLFLcN zR^@T!DP^0oU3o^?q3l$iQ+6qDD7%%aC{0MttLD)nmh8udYSm->c!Nc};5+Vz6# zMc2o!Z(K)QPo_VWzAb%w`WnE#DdXmh+cNIRxC;tAknwQFqZyB7Y|Gf5@pQ&B8P8_C zp0PXQ&5X}8zR374*MLb^mMn-`W4J{$KWg$^D-DefJ0Mz3xxl$K5w(KAX8G z^JAD`&w#fEygy)t=UUG?nBoS{tuV&zFve!j^DxMdo{a+!4*VQO`3h$FY2eC1s|H;$ zX!W2!47zgARfDb`w06+CLD$1rHxK&LpdEu=8}$01^@HyoOs0Eq@FRn_4t{L#j=?(z zKj3}byUqKY_g(LM-mksic(2P^pY>qYLs<`JJ(Bfk)?-M+GQ`1TK*VKO+72KXgV;O z(`T?RrVqxa1*vTD*Af4KC%Px1RE9`OnBCAxM{>?k3Imfnkx%<8QCqD3}x1Vsi%b(jaSCYDQ z=_FCzinAs9c{BSn8=MNr+=Ii-fQ-^+qZ1vOyd{h-UrNq58=mMsg`iDgs_JyY_(XR< zth)*!-~6Z3i4LH;tl^S0te2Tel5{%J2~>Mef+SUz#-I}&LA4h_hqyVBbTFxx{I#y$ z-<;zdFdh-fnk=gzNdoLiMW zq`JP|rQixf@&=YI@>kc@OWp+%7>%(6%%bQ4vxo;wq;9qb%$DY=xd@(10*e|0L#ib2 z*p?AlxuYa+byJJvol_@yXG$X^Z&?lg&Ciy+MdMIBaT@5#@o$;rEpGa65x@>SWX~v! z4B1mf$krh?%|8!9tF>|?lzWlpyQ#U^zo@A>kcVlYVNpQpy2?K6ylffwgz;K3Ms2bb zY+5XT1P@A`k$~;xQ-d93iH`Wa3qJ7!DSTq@jN`{s9=HFuQxRE~=B4b4I!tEGjg|F7 zYNcfP%&C94|C{5VT=#j!ck7xi@87`$V+}Go5|SyM^98*~j+pUHQd*qxL1G zba%81`r^uJ{{jy2HQTIX{p`)tn)b`b@4GbcN=m4G5UZL4I?wxN&R4gLz9ezd)&J<^ zc;~w>Ql4rb&z1lNJTv4aGZwA?kqoDI`-Z_{_twb#hu&5w!W^RF2L=1$y)=rEdTJqnLR$2e(7KL=MPdY zX&*~UKhIR3QP%t3moK>X-J$XGPcJ+$XL`yaXS*;iVH~;M(<@g$nX+}+$Mcu%tK7Qs z;Ikks zZKH0;OnH*r=)YPCYh#y%ASOiK^p|JedT8GxXZwG6`NEX17pEk5YnOR}yS{EdV|mt^ zb8h#YbLB5xTO1Py-`e_2%G*8L#j>F?P|FwwGtTw(Uj5FMz1G@$t-A2sXHo*G?P3Uw zmCZGb<#pH8?Qo6tG(7y%$7|+&^Ta19t?gsk;BRPZUdCAFcD!?K{@+SJmu~#zT6sa- z%9Ne$W7)#qeq<~c){dKu{ZsB+GrY$STetrBL&||u+ogCFtqmB*qo3_L?}?6I>{)!{ zym?9e{`El-;MBR90W_G73yPv4L?%8{iUQM~>zjo8G^#|t1K|O-~ z#%IrK=#@U_$x|ldHB(vbKYDaUVSYtcVNw3%aT6y@Dwu6p#yK)!TYN4$@bvFUDlIm1UcXQjlRc(Dm>r?l2pEiA5YYQk$- zatDVZNx^)!gbh~W-Qi#et4G(%$)LykJXU&oiE@b8v^K11-jbJ81bP1wZSJk6Mr?BF}{UrD99;=;TY6&DP0}^kn2? z`ha{b$WuXX&rFbqB*OqbWjeSI*XdjZIr2vg!< zPshg-xLF!}MH-jvaBS(*VOJm9TYcn@``8jcQkZ>>))Ol+DwgUX4sZ~~nP{GgE0VKo zlO3{0l@kk9qaklItqJzlh4<&eTRmvF6Ag36CEFY@-tYu@S0DK!MNT}xMHjTz)mKj) zTab;O3N%+Xw&2~-FcABAN4zo+yv}jr<21Q8*$zcIF)idm;JJ;Nlj$+7X*}*&G}JX# zHqu+lyzd8aJa1*8`Ac0SsTqpcw~!GCj8huySQMyj_E%PGuM$haICz(%KVEO7*=N)U zypxJI@6dc8^E!tOHPv+s7HG8{cI9O$x&+GUHH0(f1Iv-2`~n-r&J)U`CxyMDOqQc3s6Y>wc5tg3^!^)?X7 zDUwsNspHGbrWH+`Tr|};ZTi$A)DA|KQ@XVeq)qfq!_`*sZ|G8|bTgIAC@Q3qzq68K zT~Jauz6e8L+SKurOR4pESl%gpV$`5)FQeWs%4mE^!Fr%{N+TSB%9_%`3OvD;f>*Pm zzt~&wep^LAl3E=H`_P~)udBgYwumklq{})vaJ44|cL}515(diA1y-!$7OcPn1bQk7 z@;;2*F`RWd;F9YwUR3!h^H?|s^H0*SuCXqlSHH-rol>xKpaIkhSjp0tO2%k7FWBUd z9yWS3P>RrzpP!qbE4_RZSvxg&yAg9f)GWJMHDZ z3SS`5JPng2UZ|IX*PyvmI>oWLvVy&O&tJKBN`EJ3DIYenxNfPxde|t@7{dA(9g|Iwnf!(N_&wH%aneJi{X~DDwyD~rdcNfNnD;(;yr15#)f(;* zy`SbFrxJbhw0%icZDlikQysgEmWyCet>IVPt7=W%j(LJZPZrQ$(#&o2km`8L;D@Qv z-`s+iJ%t;8!FbBj*WCM{pxOKAtJ(V`=6y8y9M!$0B~>jJ!{%_q_O(VG)0oK+AosG4 ztKUBN|FOlIV&0#)--4VQH0A(A^En5 z7}VE+y9SL-WcYw139a?EnrXFYX-fc(D6z@W0j_Skx zn}kIe$&tnsiJ`_WGD$&G6K+NZFt14n9+KQ4Zr9e?--X^kG#aN=C`pIubVWkh!`J%{ zj_!nIlw{99OJkzfR!w<|STiZ?P3}$z^~8{KL3HX6H}`=pJ4bZ+D=~C@)Oz%?4|maN z)dkO`Bn|k-vpQ`?K2F!l?|uGZ8l&wo^M;FOI^G~!d*O^HFPOB;pdCT9o67z@e)mX5 z`{2-&_nU_>+Mma4%$PU)4TJV9qD|Yj=^6hdM!Pj5f1>wnMtjAx?uB~_cN?^0h&FTe zwxs;?7;QzyW1q~ulF{bA{bIw2;F|{Rc%pqGH0;dEKQP+Q``RCUXFH>P;>giGOAqWZ zXeSZv+~&QWQy*Zor~fth#dn7o?b_4tzWlpO-_~h^Q;0V8(QR+F>}Is9yFPd4)#*gLSd{?KHrV;JZTkc2?{mN*ce5`lM53?9;$w9}6uA|=9X@fI}_REB4vi>;m zWny;v)sIcvx0ca%y>HJK%V+G>X{Fgj+i~E>|E!tIXrJ{@y79#q80}wXK3MwW-TQRf z{0gG|>R;D=Jm~!iwB_qMS2=xq=(M2lxTEKw&vja2E~vw`T@jcKks`TX9oqk2Mnx>$FNe(N?bQ_w17g7%gx17B#D$x3}27^oUNI-$b+@ zmrHAEcD+UfUF9n#-@Sm*2FE>n@u@jK=(Jhq6K(ISHg8?O^L3&fQDWP(=TS!c+M!pT zFL>}5opwhv(fTg?=&v_z|2xtCFze@C9lm3!cxZ@o;~fl@YxCI^T%?bdDI%-;A9 zqFsD`pM?G1x9N0U(gmaLf5xuU?r$a9^YYWvRTJJ%c?ks(f(z_wMiE|(MhLW zw1j9&Py2)K+)o(ow((tTgRWq-+cT4#k8kdx(@M*Tc7tQfz5a#FX)n3=w$pmt%V=TT zgN{H~o%Y%bh<0SBxKID{HKSd*B((ag7Z`1MhdZy!Ti!#bRW2f0&**!h_s8FH z$bK!Oz2W9FcXjTT{2oV3763!JpTNei5`z)1_7 zw7^LVv}J)Z+vC`KLn<4dupp&xmaAiDd5r9I+LMw~@ucFelv4|e5>JVflFDpP*vo8B z;@?yF7s9`7__v)Ou_Zr5uwpr<%+?({PKs}%8NJ-S%$6Nbg=s-Y@+PTF2_DlVcIp#b zB(>>}y-IT9i@m4Cdq>85hsX1cr`=_8W|=&|eR{n6w0P`SaySm#_Y}AsHtdUanD*cI zxX*}pKNrWhGVO@lBcapdsS4ZE92Ohj(@r)@=rj~Br#+UJE1{9`*q?~)bu%2Lw-fR0 zaoRTF10f8%oV+bX>f*INm!Z-diA) z9d1=*Ty#Z>O^S@s6)7+&!hn`Q(g*;>F(%Lx^~sq)Ivq&MXhl~Of;z@b_FbeG;6;UhGyygG6U+4 zfx0-xRJRSMr+%3LZEK*dKi*pv@2!mYR>XVf3583nUE?GOTZE zA*~c(anv@(!Dy3%{qb@d8+`JaWwwhuYom*ucI6fMWwuL<3OemkW?STpKISY6$6JRv zwedpZ7AN)(bn?-LJ$#+mc<**R^6W}O>3rv^!nM>-YZcmL>h`$209s`OIgY>0%u%F{ zgwzWmb(zz<#OZAnvPZd_AR9Y#1-p~zWrpa`5~ns?TT!YFS7ynJfaf&e!BMj$*(CTq z#i`-aif$CqF8(d%v08_klmq8wz!`LUFA*T8xoys;DTR8lCxHw)S1<229sfd?XlJE9 zROele=FY~GOc~?O8T%kK4 z;A?v!Q~<(SKv?7SUg`9%7C_E*cM%=cmjJ9W0EDj8J8CsbMGyuoB#F2Ns44*m$M(Xh z2At~v=UM@zMzcr~S!APvhsFfxS_2SSWTTR|9AhZ{XmEEI z=IBq-HyF}G*W-L64WErPd|-q>0!Sl_fMa_RoDT%I0Kv^dd_XfoPm2+5Hed)N+zQ!? z4I|)ddm$_ZggXFXlheCVpjhVaYc|3rLwaaqxDoCIkPBc09NUZFA|Tid1a}GX7rWCi zESGnaf&-`z?lOx+ao#-;c?m?~*j|yrAR-FH-UqQ;gxKJ6l(}7I(Ober-w)Bj%RmS5 zIB&Q36ABR8$%^xQ5tGIZa3-N3U2_8i;pHzHU z9D0o11Lvk8$C#Pw+Bd?#@7(`6&1}?W7P64i@wyfNyl%STzC=Pe?!)AVqU%H0xFN81M)Cv1Xix&Rf_CXS0~j@a@qhq93b7VDsKtOZnCod$JXlD^VZxX-48oltM9-j+HdJYE&_2I! z#8DFkos*eR%tHwhm!-SERIu(lsN{XFl*t*8fn$5DOUyID+@mocP$my_4@uyeL*K{C zERc(p=RvGIcj6oE;(AbVe@!dCchYHJ^uhQ7DErd$z5*04py1eED8m3{T|%+eN3s*RE?w*@4?MA^`Ybf87@+g?=GX z9cDYI__H+w@FqehFwlsCD~1pe!vi84mG}GCWBZFLLU3G-O3J?mZ8$)UYT-B6zZE$1 zAE2@c&3t5sg1lpjhrktu>BDem2*@ zVrjlqx1Jxa=Lee8QFtQ`rm+^hDeU{r z`0nnmx=#_QFiA!HqnP_As!CNuPL;xeW~cX*tj(C(G@@IGsF#_DtQAJIiHMR^!$cBw zPpS$*j@kTZvR^7y_F|Q+@6Z^3KazXR?x4xN9YyYB6U#WGRXbVIJnv2vc0j+CQ`JzSiZjZKo#x6(W4ShIP2ldTy5sapUy4FIypz$m_hexupkb%AgF7V# zIrkc+k$vCpo&%weBR z>dearh0&Ab?1GxLaoE_LsrM752+}NuQLf}DYN$J7+k-wk7@TN2ccB{bBKT)&6%W5N z#+3+9r?9r1gNcuQc8A%ao~({h*b$HoXQ369F%lCfQ|O~8V(EY$!-+>xF$O{mk=9AH zgu z*8hr1NPd|gUg3vV`QddO+{4sRCJeVLJ?lR=bsYDP^lZFLJ?^h8ncv^3{w-v8r#qHk z(pq2;MdFv!(Fn&~>7}{Z-2It814+eQXyeJIvp2Yq-Na;zNJah{YcbT+VsE%U*0Df#iY##t?zgKnVFrDfZ^7-qTd?NYy)B3n5>i665(x9NcFJx1b=w zW9_O}rtREv*B7*gf!~w}invUJ;*ozHxZ%+*w3aecB%3G>uOucfJS!+5?2sWW)kOHh zBSRYRl>eg<3So+g;tkgaKV5R(FJZz4m?$!zTXoOOSMSg$AnYqcSeA(pZ)etQJ$R=^ zD1_yhC=TC4uTMS_1}EP{@#OqV-#c>|Tj7y)AnY)=<~KNmMzX*wZU^O@MN#tzVHv4H z7@o}TVqy3@6nV~45#V_wPRB2XL{sKbppAvv2tIj^rLLE+{{vLE!_eedN;n(%nTgD2^yB z!Iq6EKN9I&4^j+`cInAl(DXq$JDC3NVq${vkvpDyC)0Hd>FNMW&v?~6Rt=42#>nEc zn`x5676;Zr3t|&n3_;$Ki=ZCtgcimSWOCwA1e@Z#-8RK53S`p*7=n{jZ>j2?pqaH7 zY9O{ZKlI^;zWi`1KlI}V1qb(ZHB`zhtcCZm#WmfZbk8sonWj8#;X-#S-80qDByie0 zGzKTS6X~91CW^u-gNSCEiD(HLhN(Xh%`p=xkwk7HI@?T?6-ksyM03qVIgvyIiO8}h zIh&S(Y^5<-`84ilzHdkvInxmi1(#|5dS?4p_490@Zn1!i;Jm;!b#IVu6u%N}BYI6(v?>%2z$1zFdD<$T1U9UCg8x$|hW4Fer>6*d4TQ_%<% zdFH8YDKwo7V-L+>huQoXHY1Z>taBKxiNrmH0EpG!X#~@<24l6m)7=a%rrxP0>O7)0 z`v7V+Kj$kYZFvx4CU>x9Q8{@d{}Ux+SS z$HyEoI*pExc|>e{RzE%CH{)y5fulpxV23rex_0!Ynl@ogtxg|XNvr3NCM65Syz8cU zmxoq3-M)0uiF{%(T;7K^m5eTJ_FXz2~albF}H81eF+BrTj37 zNR4}=K|JEIe4iZleM;E(a(uT;x}o`S&4YA*7psYLjdSyaTf>KcX>OBg!d*b)eLC2A znylkJRL!`Mv(wEA)5V*q#x!%Vk#4jJzwD|t4dNMu-ZJD_ErvXUh#_BRqMiln&^Z8e z1j`3p(*g|AzSV^dd(DBgXEC#_tq5q8R+`6Zt>#!;@w+q;va}GRwVI1o1dXrmnMLQJ z2=0V);Z8ii*tsY^nO}?&tDVd*rtfWfGQXI%MeoV{Vlh&foy;#LOTm-*#eQdgG5K?m zS1iHS$@Yc9x8k5ZPEs9w!wvk#9vc9EWuiJvRJ13AprVZtz9uT9y5Wfljw5FoZR>xG z=Pt7y<=^G+!G-U#{;eX>{yQb6+-S1=jUpMp(Z`+wT0Vz&Ab?U8{DekE8aAJd{ASWJ zOTiC{wA51Y3z`hKl>Cemq(0P=x%ss1ZMA{tgTWY%SzK#m0GPO$Z^(cZFLIpSY;)$OkDb=)WU=gctEyD>oHI_RVJmLsH`@1 z=PqWX{;D*_-x7%0;pZij8Pk!ChHbgn28~MFF|o}(upy&K#>>KG2D5rU=RkC)TKT8<=bQqlPVV?_0v<;KV8r+_zsS<5`5v^(@7o=_eq>nt_Rl`-u zoWoJG?HQ_6TG=qQuBIjuJCKbR$j0cd;Inq9ISm~jIHRKrDuSytT8&D(9?7<1RVrw% ztVUvp>PQH(ZEOsi1Kd0TZn6$;5;C|n*EKYob8qa$9!#=astxu?z(|G`%`!7E@)|9p zb2>(_wWM5?ruti2>jTk{pAGW)76wzPhx`kyR-oOZWZN{3yt28@-x7`4ETCz&Fq;YX z){?oPu?n0Gni@;1DViN<`a-~c;v5ECFH4WHD|!(?l~V>eoUK( z=|0G7&yDRnoZuYYo<`JdftS$4QPZ}c)TxvdCYnaIlzAw!LZ37KXYTCY*}Sv++sYSg zclYPg|DOKW^uMLQoxV5yr6I2jxi{;9tV-ATW*r|(IB3uxX+e=q%gVA_|yKmFtM zPt!k3KahSf{fqQ3)4xhT%#iLKx^L)_p?756nRR#8=BzDQ_h#J(>`DJ`H$kV}xUGMY zo1oK9+}1xvW7!0qcHy@EF&fJz==UU8Da3~BV(;xvs6_H;+%>TNVZ|X09g(e=|4y_A z`p6N(M&z&tZSR3z{id-8dOqF*(2UXEJ<#b!drO!G`d;K>^Lf(llM#}%(Pq_Cr!(z= zem#`G{InQ!rajPqXqBX%XT+d0?ScNMzSy#oUKBC?>2gIsP}PlgNxGL_t}y)(9ZdQ^ zcn|c&b=ca=yPYHvLhJe%P48{E6eo`wB{Z`9wa6KAPxb^ho-w(!VdFvt{(rOdoahQ9~cK z^bw$s(OK-1HEgBR7W(iTg$wAEHD`tFqn^qbUpmRBtm6(jo2&N*?h)AVU$VYgdue`g zalzOL<0eeVFRcp%>iwff7EUx9#>rc*6Nc%kx6CdrD;!%kiD}6YF==cs_b_8-YHfxU zl;oF-wZ?I z#Qe!)$|g_rm2#xa!pvfo)STO?-D3N4v7ZXD%XG1YW%-5V24l-gnWCjuIn?Zu(Icx` zk@u%DP`^x!xIvuX)b4!5Z8rE#%pdP78C&X`To%rc@g6<0rM9WH9=QYN!&~S31A^gT z&TtgnXM&GErZF5=I5B@*$%F|7r9~51XBZx|kZeAhxfOFWR@0#OmC+H*5X^V@Fm8{J z3VdIQj(AGLmsKz}e_UY^`k`z>eqH0j(YY*r3z;x#N1Vd-{7Q7hn;IXcXK}&A5?>*Y zJXaD7(2-CB(ON3s+H=(d->_lXVWc@IUP|T)}IrQ=W z2;V>*UjZDi%vVxUQpD}YqV4~-5ET|Hn#^KL3n!IKo;1FMnT3VILbAv>`e4Dh{azO) z_8MI*dSh%MB9w5JNhE7JeK5CSA6zP%s92n0;fT#S%!}BNVP4dJcwx@+oBg%xruzvCNIRY-3(!s2Ea)nO7SQznD~H@L3bahc#hkY&h_!05UPTSR&~E zzHBPuPDZkP)PCW&U9Y_L<_Gd0dhXoy2XDor$#iYZAT~@cDw|X=4ht4S{$D8~B1c!e zL1z2EmSd&ADK$%ZWuUbg$?c+LXZe(}v*dM@q)f`rq98lVAw??p2d4R#2BuZkP+A9` zujE|>P>|~BS+MB_l7_@3B-xUaZ2gmL_b16OB-wse?7t}XqsZFQ5qIPLfpY)(cxYAy zPCBEjFjIih<)`AK5qBnoHxr{yeUogrCCPUu$zW8b$jPd$tJ)#)>txDGQHazZ0Y9E^ zAs^lXBng~0ZYmyK@zf#z=D3z9;M6A$AKQ_B#DN?$HY79ILZISLNtXL1%kE@(NU}UU zS>ByYNktAQ@*zdeM6Q<~qsq_)^gzFX?Uf#U{1`7ueURNm{yJGsJZ@??7O9n^fcp;z zH-d7bRAYDJ;FZV{V|QxEY>~)-X$CMkx*B?$ca@GL>n6=c7$$;Sc8X=-R$ zUX1ZCuB-B+XrbA9UvPlQL%`=|@WFlp0N8bCqMV&5FG`eGCvqFgVMu2&GXiW!RbHmr zE(YY}6HC_N_u}xCY)Jfb7XjbdRZd((PgC^8OnGI)BBX@muA@l73sYEEY^P=t?s(%@ zr{mBW{nPA;Jx$V09HMLeHP?F2NU-=T@fiZ2vG-(J+ZH9-HzvxTx2gESKDLgEjjO*# zmG4k(n^oIms_iM*q3?;1=vL^%t#AqME(bd#2`lu36;u<8(#rYSQ9NrCH$~4g(Y6R} zgAY*tA>>MuH7(%z;cgGFbuzbq6F4)X3(?VibqX`~=lNiM6cT#WB0#7>=dm^%5gXkS zAKKE6MZx=i8@i4Hot!v0x{z>m`9)y99}*Zk56}%YHN>;}DBzlT0D6s@Vz@}y(F3ZT z*mN9RXO}H;SX3E0wtKndmW>DRyCEP2sj1|lz}5@-wJD)eMGIotSmZaYL>nGnzvnLb zJ+*lhZAOlRwf7{*i6cz1Si9I7jVnRpqomQTq*14J3G%@N3U}yt_-ZegJP_cqQrAPO znPE8mwRg) z7m@*aKkEn`vKCZrVY3qOUIVaaM;E1I6z;Wj9z=LxCe}Z*fe~r!$G1!_EZ3*neC~+f z5#=aQ_JmVOiO2zuR7HhN^-ay?iz=(|MgZ-ufxloP*M99eIIjeKa5Lho!_hC<;ZAl8 zNp@^p^Wa}}t03&y2VT$7Q=fwsK7gEBf7QaWM#{;PA2Vk((hQq@a8Pk((vyyGl=-aOHFKP0zG#L{H)-?e(ZQSRQ zA9cwGTy{0x7AI|_tUt)SWmvSR-rq0{$qJ=lD#p_)q>OSX^;L~d={3r4!;*AiN#{r2 zuGqQJoIHbDd7!e!@2f|$o$=MU5l|OcR#=KR8MGWe8E|s?F}+=2&{NidkXCKMFEs!S z&9zldX+R3#XF!vdPmZm(;LP#f<woMwSN(+`)4odj{BHn;!*!pv1l5?EJpdw%6(S(COIFCGEy8-EZpB z;g4N9I%e^;pwOTUnX`lrb%FNZz>5ouR)1rak*{l~u-OesgsZ%0%9x_^LKy6J26rFnGj8(K zvf}Y9bsoi&IO!%~M*dP;6hkfuR5m#JvQC;S7bDZ_I@0<zydvRlr~j?wkvakr&;PS8WQFHng$3*&30B3JK^C^!eCh4>8TJu zV(NXRnX-_g{Y4mhPU)alrknS-r%c>NZH2?Jw28+U%MDb_;+=V1P^5NBD@{$9BbZ6f zWF)f~B7OQb6Let&-_syKZ<}i<3_GPaL=8nKb8RX!{0TBV_BZ+Q%(`l0=-ejefC{Ep zT@77uj-fo3LBhjkpV_{tW1ZOWhU_7NHY`j-xgCikozgQVE9r)9GoNIfG+&@AY*@B1 z3|-0WiG>b7Q?D2!#+XM->spNDlC+)!-Zm3c9%NCGm>98I%QCne+S1@WN}T}f7ffsN zWmyMhmM%?-v3v4PET?+Y_yiW@dc zEQa9bOoi;gf`&LLP3Sq%UtL#eya8@CcVJOqiDM7zR(9RVi4*%o{zms3Tb$p9|oA z`uySNUVDt+&ofqYm@a0FnAS8STc5i}f;o)8-_Uhh<^0xq+&Qb(RYf0Z%AO^ZjZA2I zl^HiDR#%t>sXL0{Ta^LiUuDY*bi(zl ztJ;;d)e)YHny&+RE^5ad9y};*a5mr;HC8oM`>S=tr?9Ir$Nfy}v3~8U7rzS#;AShr zpr$v!c*5?3!kC76vaMFk#x+5lv`UbTZ=^*uTYQ)Xdt+5gob(4lLbw0IDHb-?)jJkh z*5l(FDXls4H648q*29P!Y}B$kw(6thb{gv9q#B9^zG)Q&MPtWL;uAa#R=kVp*vQx$ z&P$gd!$!?V=3h+jY!c*bKm3Y!*98e_7k4BwtfQQsPk z&=Wii9UFf@Mb*NWY($#mD zG@4T@rq0A$ASD&kC^N55kB;=qBrQ4~Wu|aS|0Mq7%soO^KDeVJtVnl@v^Ly)Smjxw zCY#mQp;KZfbaqNBn8WE)y?I4JOGt;`5?<)JP~~F3uO$Z&09SkL;Se9yBOr)8rYhR? zh~p#fkA{u3Un7a@u>-jG329ep5!MKtY$2!(;(LVIDH;U%teedY#gDZCq%@Nk5z7LCn#Opl~|b3gg&39{7daE80yfTI-P= zS?t4eg8u{g!+%$r@S&EG%6dhg{BrmloxnN_man9{ih6CO7!;$T-Fi4t`tiGsRRz|A zbSH)x#6`g)+X9J(s6GUyGDJ?Pj$MY3YnyK_eAbsO4e?VnOe5S)v}xpXV=(Zi8KxD9 z2qu>>-f_~E!r^`5VMX}*DbO;%GETZtP_ZRHhHjLbNr9HdRgQHmTpJfFTAp$J>gZ!0 z!?rLZ^E>TgSWK?R&HCD=dISUA=-N^-Rfwlc_h>WJLdRJaE3&1SHA3;bt#Q(a#&uUg zpvf0@<)!!v8XS0E6OLV2-_)W-OCA2*qDM}UPyUx^mowS8oEgCu^2X9aT+}>f^cV9< zy}O`rBd&1_iyRSAv4hqjG%K;YXY=vmfaQ*Mpt-&(PWnOU>zme85PmsdknM|;I!5D! zTh?LBnsCoG$&|TX?;{nXngWxJ1*Y*u_+7ky-)cO&td66#90nA;lVX^o1K3oF4EI{# zOJ!UfK1(;!RYah9T2padbBkE7YxEs?Sf8vd55(0-Hopqe=8(Q3s;?G0iaYUP^G7qL zC8zXvEoN1>F499*Hu@VES`I{l%6flYs*`G@S}7n6Mro_mBKdJ#fO0?ns|SUIhS-U~?&NPQ zD_Dr4q$^73;bA8!6KB1rN@Jx0G@K6>b!Zllyf{Kb5a1`z_P#aXSP5>?NtS_RNGWUK z2N{970LK81P2du}(Zy)g6IZsztF#Jxlh%u0`*o7;K0q@!Crt>`1`NQd_VpVEWxckC2Po#5m{Mi@)$KCJr_dXdZ2B< zKSJFIqee&l6q=lZ%W<#v+Nl}zo5Zgan$Jh;I;k36(8%}&Vw$eA3r%K8v!yw|xye8@ z>DwZ;)n`paQXmyd8}$Or1Z^dBX1o^`vQo;KE=9@LccQHF{jq&>F7m9O7VjMy?;S2Othh`pX4Pb!Y-lbvcs+E1bU)AITJ{y18I4@cS^jsEZ#d&AUzBD{V2WP%y@Ts)Nb*)XN7gk zOhcPcInFPq4YScNQ%vfV>FP{0sU!NO0Me}eQW%=0_sa~ZI|l0F7*pLgoSyn+0<^7x zw*Gi;RlK({-dhpxohKA7v38B$q)e4bnM#u~6}mF>Ov%P_267yKo0+3X9SNxyLh3T7cZt*6DrApx zH;H87-AVK^Lv(0~o)VmZ8oPeyT?9O*0S}IvCCMf%Ws68_4om(P^H{Az zP0E4uGT;n4y_X1()7&;B)?Vq8f;|aj(1~o?)A28KiFU>_PhXDa(*X;|-)5#r=`$gH z6{N2aqUUHS-8)bhAvy(n5rh?nov4cr$K_oC*>jDQ?)chX2o->^77*4ry;nNDs|ApA z-CaaS^(6pn3;>}k^^RJN(!XqjBqPtFE)&TukD4f6cFwJgiTKGMuB3P zyRX>@n+)lpjp0VP6F@G25pZlTf{TD)GZ5S*#9!=A6Z!7xcXOe;%pxh@{XGzQ2}I)9 zUXj5dRz47WAH;4EVuQ<3=60DyZwVKDKST#F10BTUyxrngaPbd8`~#Z!l_b8u5I=}C ze*ogw)395QVMm%jOyXB@@i-Ua*%ZRFPSH|N_F-`dLNTe(DHd{6QNWYW4=J-Hchl?X z6q62RrOz(2z1>rYbt?*@9wsX6nkkFzvbSQOI;Z~l=gQxU%e+iumTJbwK(&=z2&M8~4AcPxjRZ0sB zB*}-uydz+{7+#EHd+bZ7f~w30QC;t1Z%uEnzc)`<9i-e@A%E{xh0B4CvXlvU)x9~q zT!L5ATZ6|b0dKhp-g&*jKOKw!5$9&ZkK)%pX=Szpr|Qm1r`>o(dYR3Myyn9F=`@j7 zxPPDFSz`DbxCsiW}P!CE+AL^Axt!-Mymxrum+sUCt zj!sG%jFdT@nRcm^s{RoWLrI*s$7h*g9|sGJCIw3N)0BLIF!W60*#&*%o&5-^mO*L9 z@qgyy*MXFlr*tqSydMl$NK;eL$~&LsyH^R{lN=w;+l_BK$JZbD(lva4A$;kkPS}rp zU`c>Oeeg6YL+NI`D8QSFYEC9MK7;2bc+a51lbL3v-hccnXqTQdfKdmJ!-=u!*x!9bao?YWg(AXBum$f6g$^P+`Q{^#hpN8w|S)Ce7xyE z9woD=c*IJ7n+Nm*++Y7L`hlUt;BuQsgt^=wl+f4af}HOa&ksu8j|%QGAd$JdKcG-9 z;azy;CG-U-m(zN3x#Iqrj$0M?FZ?LjqU<(LY3@&)gV*zum4o|ejMf~3X#Fd1J=F87 z;(kHMe*iCH7&4xAv4BFqN0`3K_ho;JDRYnU_F2d%Z*8wj5$)-{%_!}U^Y+=uY%e-d z7M(c4Lxve8faFNXpLLo$Iq7NoDRyuHI?I3vGoX8Nkl0=rI7bF`u9aE`#HsTG9Pl7ll5?S3E9rE#B#^0VUB52BOSBQ z-C1?tMvl1-j`x^uq0T5>r#V_q7gOG`PO!vSPZw1u@v#)@fAVBu z;fNMIoHCGz!{5bG-~!x&R`4Bn;zo{$Mw3q5h?0ce2}#T_mr)kiDJO13Il>+xz_)tH zoVSwVD?~nr)-YUl7@8&-s3jZ1I zGLg)6H;s4RgOGlsCuH`C+!Qsh8~SjTho!hDqiG{#j)yAF7EN=yYKUSKX0dy@qbo!`G-l-^P^<=2-;mJG*ya~I} zEd2Uw^p}izisi=R?O{oTdi3KG_Ygt9hv=bvkbd8XSoCy;kfqZub-M-aTN*9>z7Vu) zB50Sn`$f>={qCr=7rIXov~LT(5}Rehpa!qTJc;>@PXq6P)SXGLyj-yW&2_7J17M8c zH8lUa)lg4ZY+rhgM=eL;I^tmt<&k-UwUCS-{_&7(#*sTva9>Z{2g2Ou?8ICYFd;i} zI$;ypiLWQAC(KUFT3E9ayNHR%-hE>PbeB4q`3q0jLef+{z2VL{VMi91FkrPLyhzFpH^PoFIyp~rXd zOw~%P+3mIEHCw-P9$cpg9+cIzZ60(bE^vr6j^Q{cX=vL#=-NQ=p!CN`AQ{d>ir^8R zQj#t#1P{uN9EC@uF5x`bwLiB9h3qIiB6SJpai4)BD>{!zUBVMx-f!@r{LE2sMCuaG z;{k(5esms@x`gv!mtU4xVmRFXA>l(4(XTnm&>SXw_F(|>3{$PKiSr{vMddd?3culk z-=B%!@TmOAiK6nWiNbHB;76B_o{>CsJVxgT7<~{hjt6*CJ(HP;U5i>w#6xblRcNc6C|xmH$f2uN&uA`Z2c4g(iW$&Y3Iv~{3N{Zu zk26u9lTQ=l3n*~!PUiFIX1wTanLjC-zetVq5in^rVq*Fd%CRKETBE&7qTt`a0?VQw zu`DW9y<=2wftH*2HG=guV6i38Clu|AnS&w99~}@HgY&&ZS>z8D;Cx>?i~bxVPO+Zh zNXL%IIl=q@1!gO=yyqXH&{KZGl^o~8HK$JdC*f#gH5X35pXei2bhJ|kd=D$SaQc4{ zeH*K~aQcskKKjZoob)RqwXE!B(44*;&%{k;%$=_0%_OUR19H!FRpisonZ*Xzx5UG; z8Z)Ka=GoiDYV13rG!H}6h7Up7_JI#U3xYWU!S{q<4j+O)()lbkGzm~Y$jCXHq4_yn zhNupgg8;ZNikx{u&M(A!9+z{J&d*kbNqpp9dCXsM*Gcj)!(a<-&A)QaAxp_9unu*z zI^;DrPMb_$2)1hn&1Z>{QGppETrsDX^`{Lq6RPT_}C9NZ1zBYlC%MYWq} z!CoK@HL#l8^9gis6qrYPJr(vvq38S)j&#n)80q~8N5n{{jTqocxNZxlPa}HsNDtNG zGIvb|ALrrJ3Q?QKd7ISqz#_&d4`MQZR@+NTKsUeslm#jF~1T`}G;beh9H|0{!|7jr|hAK8x5dQQeCY`8D_{gqxFs zHPPdy4y?W|L*PT{Q|WXa9vqIQ))2T%gg~&uW8q||s04d?BKb`FQO2KP>{RK2TJ?s1mADw$DvZlK0Z#CtW2c01j%Wkz%NH$U)+Wl*LrN9AD8gR=3Eh`fA} zl_Oa@7DsDO#N>Fsl_T|1ERNP5jLDG_DVnsVj*Ql?no6x8XNF@pR<9EY90K zFfIlQjM<(Tvp1{Wn^f-xZD3r28pybmAAip(a`7e(tp9lDhnFZW)u(RC<@Fx>UT^WGCKiZ~ym6E>h( zTZ^J_`WuPfvMAzS!52m0)He~eWl_`?_02>b{n96#@kS!u7`E0SS94I`>L;NvgYuQm zZD<_Y2!k3cod?vs2g$T|pvv=r>fRK#-ZH_~*IRcHhTBy4Mr}#73^Teuqpeg!oAjlZ zen!Z;Mz|lknlF;>CSjzvfAR$-MtlU25ctqeI* z-Lm3ofw3|)du8qug3}|!>4~tF;Zr0VD?>|*Cq;|LsKt|EE5mRrJqaSw+{adiEL?`D zDf8TIRL>i6A5?O-kwI z8`$4CFcrXFQoS!|z+OW!1iVi8UKJL>$mTKUA5{8^YQ0mZ2aBTv^wYgVLoXo!?9(p7 z+@1ss&3(9>`xdH}ib{H^4j#2HJ@f*IBkq{(g0#>ptcEjA%h_e=qnF7PyFumI6>G|n zv}d234<9eo<$Fk#i0f$DkO$)%*U{nhZxOwD%Agn$RIqUepESbh-zIwVq;UfJcZuFI z(%%##-OM?6cccM6KugbV6}@G>XeNPnZ6aYO;b!KYx)<$3ufoj6MDn(p_YT>1AF+Nr zEXq2~QC0{+kTrK9%xt;f<=jy!g6w`$)_fOE$OlD4c(SPft^oEg0`_iLunCv)F)7BI z`&h7H{_+VmW!im4^=8GDocBrV|DfC&Y{EGoBp&ap7UxuQ_EO`|sj(&4m=z$;`;r>( zjqJxmC`YgX$aatEZ@>b&vxpOPt%cuVpeiWOh;l^5im(7jo*VDVbCTAhK<Ldw5;)8Xkh_he#wn5BJ09f-9Ps3J57vobfxt1WYq5CxH;K>;)uINyea?pu zcOh<-9t69L3&(l8g;#Omyv?CenX%U)fzXhMqB?_!y_*E0;N#=f=3QG&MCTbq zir|#eee_FvAHT~)R8K^E=t}Ax+~gR7M`%z3#(Pg8$Hz@0EW>-Uu%uh`os7KRWYGpR zMR(%7-4;C`EYO`J5PSP-7HviuxVP{_00*~1h7BMm=uI8R?TjOnT-g1gvH!Z@-=;lLTliOgPdnd#AAY)%_Wr_E}-_aj{ zW>|tpKk~LqLGHmT;hp2*!oyebt(hBXTp=83l zsdBRD<(=a4mbttWUEUIxcf89xR&&qSKnRhq z^TXfy;UE04iyz+Lhu!?}77p$?CIqMzjodl_;p8}vYnxT;@4{R^a_S*#|vf}G$Z6qp0)Oe*{Yg`NsmTUSGz2j@=y z^(kS9yc*JP(}vT3M)Z+aLow+O5PkHgd*Q6VB+}U@z6=U85WfsMgvO!SFpzN>G@s2$ zUlCW!oD?qiFeoBS`85jJoOA>yp7}2KIozk&Ygc*IE{|U;l1IYFN<7uB&^hE4EK0g^ z7P#E=jFJ=wttLX_iGckgF3<1sETAs?mf+2GxgXOWCw_}4q)$Zb?UJyY(%_5kJCqR$ zvjcyY_#OC#=E4rfv&1?er#X(#r_51)B&F(HF&-< z+O%>aD1=s~PEJB8<_UCoyXT2sV1apJ2Ih%NUEYgb-V0scWiIa$m$%jBZP6x)-UM*0 zwvswd%i~K~fP}Y)F4oU3q*%?K*Dce}mgr}#`dN$CLLUa`C$86W8Zv#jUN~>JUMkmX zHuSn&)53)^a8D;?t`JUv_{+mf2CwYT4{oBliU)+u75sH3ybnb$C5d8NSTPt6phm00 zqy6R4qP+*Cp;bKEuOXEOqQE>zR#M?$6nfU2@O~NR!@Zp%{t&`pxj%J{7#C*B+_kQ} zYe`BrNm={9*!%MMD2nv&uAUA|oG>8A0usqwnPieo5`tie2f4T;A%Os1Xbi~&BDqK= zAYMCwA}Z^J_knn!>ni$N&(Xzeb=6(hT~FNgSX8`F6c4<`_xn^;_jFG>5wq`~s~@I2 zUC;B>bJbH%9bIkHr_hHA(DJbKXU3x%CQ=Q(`jo_G`DFM*2)>^_B^mxuf7|8K+EFHxqQq&R@g)Z?0&+`R$=#vIhDQ!NV6eMD?$|ntyC~xO`T@NF+ z&h=S0%YqniX{A>`4z5R-L~nZlqD z4NqkRE+srm{1Fhn;txKj2?}^C->mK_mrC7~flTPqeq$o)>=g|yv@VmhDu~u)Nz;GH zd{+WUvLf0(_xb6B%KdUCm7DG8DZYaIbrzmmqh&JX*+k4c#dF;`vC`~c_4vcd%Q71ts`!Z)#IxD^xw6__Iyz}?gw1?v7++L z7@=;`BjRy*2I|M-65oWNydjX-1?a*2cSi50$OALR@uA8M#MmOi814tmSd(Dvb})9E zFTBMUzS$SPQRgs1tlj35o4-7+;yZX=vILKVn=xNQb3bJ?M827`5C7f}s4BkGXD!@f zEu@)@7NXG4qQZ?lIK$)7HIZAKOz`HAXRa}x484q?%>gfNVxbpwE1*mMK-2`pXNPjX$0WDVz+#>q?gKRD!o~Z6ewW`ZR*JXrw;=Tcy}tO}yaAyTIzN}Dw$9I`R&*g1-k-?5#I)u`c#6V{sqmph;m0|%gMYI8 z37|^_g`^?%y{PQ`TCm=Nu?!QnDs$M5HyiEbgI_)$x!zlU1km4FI8 zYGbHYeELtgm7tLb4_6Ue7Pm^U6a_mkXB8&iF-k_hnvl(Q1KBT#!k_Vu<_=Uh-%;|cFZ5S3-d3vJ zlHG|)le0VedNEuR*`3*2raUJVc^Alpp7RAG^2nES$QptYs{S~KSN(qglIS8McF7K3=xrZCy$L9hchiYK z+xZztv<9>>An9?Zshl0!k$|O17*Fv#+-=@K&GEOmJ8cK4HHG8^G$s1Fr*KQzzdeEC zcLiHKnRv7q@9SxGPgD_t9?5^o;h+#Guhb5KVi%`v3-b6?4)q>oPl8T#A@#}esf>KI_Y$9)Dy_L${GY_oYXq~Y)2V1KYopB5cVzV7hr{kTme zN7Exq4hCj?FaY%lP)~81pHli%B57?q0?gEQcqH~9R%R3r;YbG%(jRH%S6?Kwh#}(O z_hdsCAbC!ghMUk3KNn*t-KY7XsNf`$nC%w`( zSSNVVb0#QFgg^OOh~N`X<+Q_ZK#QwjEb)hW6B3&eo@D-p_rc$A&fmCR{O$W?{^Ybs zGJokhe;(p*xIg%_&-$))f?tz9(S>3Fsb>vd;z#lKg=dn}isvUh<_|8wyWPeJbwBD0 z5T4p6UZ3>^3GXNDck&}7l8X;ZjsL6!kVUeLLKj(@8Y zQ(eU)aEfLuk7%SOqJs#sVLUAvemE`@?W6J-L7w{eKhR~Q00+$8g4=d`QeBI z_cCaHI?Y2)lM1j z7o=*5!g#-BN33Wfd>KVR!$0LD)I5L(Z}*9z$WUrdykYVe4-?@fIZT-RKRMD#eiAjz zCnk;7?sOGrki-k9-Uwx-m~I<}db#UZo2~2?jv>O1+X<3yJ=Orm-@L{oFQ-h(F69$?$W1zp63$ZKgIQAnkAhRU8mq`iZzN z$@GW(BzgTWQ#KBiuuu+4%8Q9|&>zY)caTfbfnQRH(V{-a_7rDxK^l8imoTdd3EI>r z;_=mO*a5>nOYI?9dlS_j5^^=ueYTm6*4}L7ayFLq!-fgT#0I|CZNo;MWMe5+ohR5h zneKDVY@7l%Hj*~V0c2TqFmp@6KMEjYfPkZnc*fa-hZrE> zUJejcIy*SF5|67LtRyu9U*jEuFW4TMs?<;K=xS?-;se==L(>$m5@UE-pRq|O(!Wg4 zOPJEb*hD<7i*~iNFVPX05~E~ih|1K%P*~Qrq_w4+lcO(xqqGyHOg$WB^CEc86!APd z$iZeCjLam|P7_Uz#irx2l|K*^{8gf;H-F`L+6RBAZ=q3N9pGy5v2^-Ux?ZbSi8;9F zbNjBf#8)rxQ$1IalWxh-XO<6M2L83k|3Z z_E3zShXTQS`KoBd%KLhh_2Qkpm$R_ZAbycOaSnBr0d=`O6l0fCL7R#H@w)D>Gmx*g zN9I-BWI%1Uhhl6~pH_KsL!zsO6#iuAht1u~iqOS0h z57PNta!?=G5fs#QHJY#~Xz{v-W$4&LGL#02hl1BAFCA%=9%xfK#wZ6U`EHrf2H+A$ZZjBT*x17?}u%xAtz!+~Wu@bPs)PpmWXr!%ES^pdUe6_M(i5-a& zG&ZkM#rO=R$x^`}hnk%+9$kY&%@S7@1hj+qBz_xc<`vM2y#DMFfA5pmALaEsdHvR- zOzZ0E=mJTH`i*?}wYaj+Ji6XK@hFv%?#8Z`&S*F?x3ro=m4ka1 zQ$P186&;}YjjaFAJAZ*!BU608Zrheg3$Zke2#ndkeqdgiqB|59p1Wp8*y2rvx zZ-UU-NGbgYuau4yI9xtV6IV9ao1v&&k(yVj?r4g%n&cwSV@&n-CzsQk%y+7{AHEOp zDs_?NCUGu?^kBAB@Z*>&`8z`XeYm`q$ZN4IpDh2LB(D?Yb%MMWh^v~9tI8aXuza2) zpNHf%TUQR5J}4gs#FZTk05XUgt1XcDibX;ru&W;rfE2Z<12V22aYpF zxq;fw8-%T9ptz!=wF3-ByCuL(0q{2t;34w1HXF`u6@0-3KdaUeEkLBiiOBQXo@L6t;7mAZ>ZP{QEfh z_c8K%wAt_rjIj^$cF^Hfs#NyW28oHJkLjyzz-rm@H zuTs-v4jh!FGPcgE%rf^xXH&z&i0BfpGOqzqD$xU%G4%ohURKr8))KWmzX&n8r>&xz zXFQ_62K2@H)7d6q@;&uWlKqF|^#OUkUtaH#*FVbZ-ST>;*?I1e4}UMNj@#t*R{8uE zdA(U)ZxB~@t>I)>lQpF*l#_cELjEnUugU9nUAyS+)K}%h7v=Sz;>w;ewD*^O zLIPt?_OGbF+AHc==);r&$wo#FjK;LXko&EEs^%hoE4lt!UcZvpFXi=fT~z9{_sEBz ziYt5H5OHTe^)U8M{~~^9FX9LNiTI--;`jYj%|#sU6DjF1d3DR{5P5a^Oetxqd^lKK znc~y)l70OPq55ncn)&*%(!1%0Loh3z4)p0(hwxO$`EfS4%bt~&B zN6AJCg0~p=BE@hbYJ{W^S@If?!i+bBN$;-;q&YsNa`Gf=Pbm^0ALQwtH>2Ftaz&Qn z@hS5njfWOaNhD^Xqm}8=EbykPUY|0fp{=c_BO<|=^u}!>~S_ZU+#l6t3;l157 zpR%}dY4=K#vcBV4U@6B+W`vMny>@A}R(Wla*Jhs!-r`UrzBKUbP@8<19KqjbXD^<7l5!*AVULqTa0CG%RGS#;45eiC7+0 z3lHjQ0By_Y-KUiEk(cG^ET7VjFwIkPohV6A{v-Lfm{K_Kv1mPgB`wFmx$QFW<8(U;dbOwzBZ42eDHnnNK0Bb* zh713;4^y0BZ;I3UG{vgkrdZjBDSB*8(cOnBc&xli`qCBhdYQalDzBHw>qX|6d4YVm zL0s9{h6Aqc-?-DS7>~*{qMthmVRYyT_2|Zl7{WGnN#{2o@HYdaqAeq1y%-_4(Mh!_g86RA%q}n^CW$^kC)U02kc5LELceFnAaU}sm6IXJ*7g`& z%jA%_hHp&p^K{5jAg*e@{5wznoh$zi$-lGZH7Ku{vOFOF_RFhBUNhu%yu2RlH>FqU z;-TXpSvXc+N6YIdc^x6I!*Qh~`#^aeDxN!r$nrFCW#1b%{I*wX^U|W$*FI$-(xv2% z?JIbdm~FCm=TyH^*4o;!GSXxXRHRF$rufbA3!z91Vt(=|)4SSeu&Bxa*27fAuh1a6 zn-49;b6Rave@1(!=LvBBcps->0wyU`Cy4YpPpML&9@tp6y&a>I`s^=5WPoCd-AMoEBc*6g@|7ri<{IB}o@Lv+x5_mPR zE3hN*Smrx{hchqDye9LJ%)e%S9sDu)Xx6^0i$a%$E(zTb+7#Lnx+(P6(5{@%az4rV zGUvS9%X9yd|7`w_f_DnOE%>1zR(N({>?mybb_^fk@%l^4qCIP!H#l!{KJMJ(-0NKJ zS>svjIUDS(_nZf|F7j;jT<*EjbB%|XyTNm_=T^_{o;y8vd+zbv=Xucckmq5~Bc8`R zk9(f*{MqxY=S2wcFVDX{uX{f9?1Cs?LYT9>XM4~0{?2=$_hRox??1gScwh8>=Dpvy z&G&`xOW*na2mBBEAM-!%e*(fj196{&*#Csk+adN_{&)R5{qOrf@PFjr<=+svIB-c| zW8kvD<$)^$*9NW++!(kSin$|jSKyC9tk`e_8m3@MBmdq`g4`*(Jav#fl zD)Skrcz5QV!L7kZf{zA23hoN-4SpT`Ciq?Od#?DGq53Pc|D63|_Uqa2Wq*+UVfGi< zKW6`w{d0CKv^umVv@Uc`=%UcYFwI67=!(!aq3d9x>tU!HVWusiJ3@Dcwub&M^f*lR zQt0K-E1_3I+e2T5z6$*m+80`#vnJ=PoOL+&AUdpz&iynp2VK73#J$?#`ka*%)I@5ujW!3za17Q9sOa=|MFuNJ&k@UMb@ z7rasMR>6M?$bEJeyjSpk!G{GO73?bbq+oZ!rv;xCd|vQH!IuSJ73?key5Ji)*mrQT z9}D&s{0v8116NyDxW4e*!t)C^6kbqxVc|uE7Z+YqxUulE!Yc}|D!iufy29%VHx~{q zZR}|4%x`JxSaG{T-{y8GrOlCsXntWK{8T>4Z|Xv;S`neGqx96lX3(wWzx>9Q)ebWQdc3!eJ4;Ut7lsYH4Fkrfq;7XNYrDnYo+#!vMvYCuz`pgPTGOs{sX1o{%mhJC^Ss& ziq*fa5?@8hB20uW!GuU#WKnfXV^>FaM|0G(u%)}Fq196t?P+T1fJx9TEUZ|xxTSqj zV^MxnYpc(Ld1@sbUDX+BYH3x%%?b!rT6&#n_Px$D(d$$u_d4BOjf>C&5ykHOMkPF> z`;fvZla+8&N4F9_u0;tStsJ6+YnI^O;vywHZ6+R9&j(x`{;g8N(>wlK4xk6o?=7t8 z-S5ql{hq;M$KsPwX_Nju(I18*v_jhz>Fnr=mY^@ikV`pmonykuMeMl(D2>hp7^cKJ zRpCYFM9A6L9ShTmNNn@7LH?{oaO{W)otI`^V_tms9$Fg(a#stjXC z%sclFU;O;uB_G%Cz4*a1hP^)g{{OnBmiETho~DSbt+TZUgAraA%Xs9UFP=9f{J@*9 zdqxlQbq#-*>Vk5lO_657;&bXT`^G!E=6CF1Ki~e_=(EG)17oqVD{9cZ{piKs+oqoBp7XnZ4A!>q z{bcxq1Ebj;MT6&xJab{^#`nHm@|imO?5pm)u}&RclsX{6yH|E%H(azizooquZg*1n z%|D*dvg-5K)7I_#*FVnv>+mxU7!cW3T2T@DJoA;D+g87M=h34+R({BAx%>6uXAX>H z6fpA04+~c&BSXJg(#vh1?4o);}=(o>lKIUiDVPJ!kKF zbodzqqiG`PoV(%7#t~C5t9)~J!H(zOe`ol810xBW!;iS+!~Rly>rt~lS-vp$kuBFx zzAS6_1LQ{k)o?;@yF3K(O4#N+nij$l&=%x!w|5o*}a>aWWv1aGl z!yg|Q$!@-3m6KeybY`tGKjrof6Gwe>&pqFMGyJ222PAkS_2iu5PanK|^8JH8d3nVZ zC!8>J{M+vhcV!HSVncU#q$|ov&h~CPFRN(q+!ya}x#ZDXhyGPnvizA-r`A`L))y94 z)l|%=nNvD7P*$e@D^=DE!tAzV^DVT{^CIn9P*mj`1E;WJPVJoXvY8beOG2~FnMy25 z>+yj7UWc79LC`NNGioTMxmL`b6Z~KBvW$xVHwAQlDk@87SCmhytu3o8UC_R)y<=tj z)JdIU39755aq6VTo~{*3D6cuSQs*&W55adpznRl?*kg2m+c~oglZSA!3ii+8# zZA7lBqp_hCTTz=9w6{>7JD>B`(L8lhYouLLnDw;HT>LhSU`;NdVsR7doEjqzmL2w@JQ3Anr34*gqr_Y>OUWNaO z;M7SiKu51Xby9avOSAzS`JlaysgoAt+TE~%1eZK!3zC1LH7bxiIm_VjsM5;Wwbj#S zP5-qdLxSYPlB7FZCs}?}X+=%tQFCUNmq|Nw`5Iej+6>}CdBV6&bbM!6r2`D`!>DnLg`RsxZkar-yWTL2_1A z6|q?L-;sRMAXz@Ew0!#P>hkJ26{Yh#V9~aQ_El&g`j#+z4UQ2)Z<0cLatsd3OJ|qQ znqD@2_8c?0rpStxMz~622ew&bwjBGFO@yUcyn^VRlIRn;I?o7WR$uegdVox@Oj#qiSYw zlnH&Ke3(F)GZW4~862)r@HzWn$kbd-HT%Rm?1%RaRb6GoyA^ zBJ@co#&}9ZEOXo=Z`RvxmaxE98DDDhb*klaO3RO`oIY#jG`(e@c~#d=vxZPks<{L6 zpHmMp@p`bJ`n9y{)&$k+(xax$sjZkbZF=c+jy9=BkJh%t6HPc>(9Doc_(y{#j6P>h zRdr=`6~yoE>7*ecMW^#w06$S%A?BX)LOZYHZ0LiW?{Oo4$wUsySFipo!isWxNLeWS}#_2 zQZ$dE#7bdKTpF;h5Q}3n%lFJMrns>m+6qtaRVZhvDJtQV3!LdV)I64s$*r-#VWTsc zJJWyhRax#qy68Kx61_9_6%Un zcH-wJ@HWWt!#H(tx;7(Sb+=)o5Y=dpex*QvF#ybeq~hm9HgniuiM~8tb8p7JM5v@5 z8$s|sPeYTC(WAsN(cJ_7g4SL4{=bap(LzSo4u>lYjYFx&;`|nia;ESUj|d-1jZi;qf25a?tjS&Dwbk8h?Y@WqN{ARP+bVT z{{vp^-%!7%2|bjjYYWo{xqrYuM`SlO?GZB_!-7@91S2K^`(JKFnE>(B<>~5OFy3IS zW|H>Ji1oJW^iBqP{!mPTqJFhCUH!r9aF4M=w^8ltVj#Z?WJ9&s*VMaWI~|u!0jeKO z($H~^jw*Zqnyx0%tZX&6o$%{{e+v1}58Qudz*5uuq+%=n+QUI66LGScylFWIV26s3 zpcfl93b^1%ppU__x1oThKGE&8P(2m+5#SqIXqWhP6DCb>IVI9GVY03GI|-3Kx7Lyn ze<8R(r#HH-+~doEe+F{esU&v{m{;`1v=KN`0lW!t`tf>W!qyM2FB8Ldl8&wf;+a4+ zB*jJ#j<{gLzWKD|S#+=@x#qH>QoGch3Y~E0PgI zQfya9X4p>B#j}7I2cjYA2NJQaWeKv+p00?kNxvh!y}&yhjH;iFV>Ov0kOS2et+Q^t&1vGm1-H>reFEl$5-z2<6z%xV~E%D~#r661BqSZjTlKSf# zDAElYGL#J)%F>522s$`j&GI|klg%`2#r(Jy_+99R$?LVkp`;~*=PbYGo?%9|5%uso zpdN~zID;H_#8Bp*YsRpX@>@bV3n&LuHvn$k$N6P9Kw^?FB=-Y%&j-qOprrGjyIEF& z#g7JCtt?*v`0?XJ^mPbn$n0mD5p7lR)6u~EH!#uNi@wA3V31}M=oHFb8j11{xWZvW8BbnRce=VHof4qs>5dKQEZqzL81#)_{T{W93y4^~P#*-b zr~4pgqrHEg3Mv&@Chfh@2eO?WH=G9Si-65z6zTCTiA@Wx^m4kb(^Q@gwD*8E7v`oY z8i%33OvbboedL)WH4b8g6*P7)@YGCU2%|*`T*B1|Q=nI3LDfAhsPwdScHlJ!RaCoFV9dXcFp3lgGA zqCAN6o)SwR{tc(F4njO&CSv0ZpWO%S3o$(8&M?W%+>e_v?7ZO*_XFh(pm1-1DDHm* zxuqsd?ro}ep|h$7fHQ`Mf-gYJDJf=C!QtJzgThXBB$f*j6CVb4YYBd0AmP9em>ut7 z?m=0G`uiAy#kT>c{xJOfjoifDTmNEI3gz>TCKU`p|NnsYW?P8c+Q9QP2)}m(e%>J) z98m0Lhq)QI1iEJp#z2zAm6Yp405*x#m*x4y$T$EnaLs# zWpRsCH(*WY6l2=zOrgnz+W}q=@Yw5IlkmfZ>1pnF1&(~}L%95D0^_;Y0UV*B=s2h_ zCFNc&ArwZo%U0bZvw3yXFnfv>>n7g68@2Wb8W+3`^g}BZr5??OTyXYv@`-H;SfyO*$Ky&D_(n4M#vUvTcd$ z-v{chY51AJgD*Ux)17iey2!#(9?D|xX0dR#!`+=N+)>w`j63HDHrDS3g{NlVXD{gw zqw+NO28m(eUZSlQXpt{~v4KXbJYc6j&y{#(I@`n*;r6ga0k)NN!Q6LBa>5vr&RK%a z3txl8C$sQ#07*eP&64yKcp2!pf%~FW5w>3I{1NC=X5;5r@>-Yh+SA<{Cq`{+dHMm} z*=$3$=Gj*zwh z>6h$SZ>43cisvvR9a~KU*17wkiqk`?`(`Uu8&#wp44NlkSZYMotyUa6RXjyVw*$#g z#X}N_?|;Y947?k()kyPr;Jy#s*cNIT&c#DnWGGuclmZdPsc5DcSUm~eU$Z4?tC)AZ zpgD#HzN>j_iwv+xdBj_vQSa{)Kr#YaQ>4ms+~p_WdiqF;Bt*X zAa`nx@WMHGPqc}v#a10Z5#nn=j18eCGT5pP$KrI=lcTzedlR!&#BJE?8+-Z~P}@z4 zND+#7U@Y=23|v+B@xAHTDB?V9IgYhpq-`joxi_Aj7EYJ|#OHu$XrU{|5^iabY~)5X zxdcx45t8$G+|gQwmNIOp1MzmWpIz@~b26FxLRmNVR?=}ZI8mi1(%u-M(XOpVgOfn- zGotrT?hMxtgz=r(cbMji>uz z!`2q>9|l5KfKcrB#D@bZ?`as#fr+>JA!TEZ+NmIP(TTE&-U#3Nupa_;c1bG*g*QQg z+vOHe_*&Qn%B1slC~AAKoFz1HCqa*`=hK@h&>C~6P6M_#3zf4rFFQDw zxex1;jE%xmXM)H#Ai`rJDSTR==yvLUitsBJo76p5;xB0IDqmu&wB}jBi2)}zisC>j zCR{M!5|f!?2?r}^hz2yVb*6=ytsV+%KFZWKhmITl2wH!Dgjxu8jSPU1}| zKt)&6EF4W}YmeGRpzs4I#MY1k<>>d`+?2O-)t$NO`?>0ex#}+Pvp0#DtvL>=2etc_ zC`yEk@f=ZMJ9F9lx$MJSwhR6_C{MI7oh2J{R5yS|%Tno;G~GNb3CYeBsf&SiKd^Yy zry1vTiB;E#b;@>Fz*hd-3GWNw#r}^+QQZeISLNg>$K0dBqBQ}dvCmoV7tR3MM?j1HjXZp?7@~;*Hb&Rzt_Fvh z`_Qo7UGd$KhBPv0Js{$ZvIev&Xac$!(Obm~m$p28@QQSYyItb<#r$8^1G4~g$@v(q zvO`hh>B-F7de>jh1>V!Z(tckL5NK30w9@-2@u9p8*;} zXfQWKjBAhN{D>_x&?cNn47mkwTfy72Cc-u`WzvQjh}!aO(}zv$|Sz(*i3 zdg(Bxe&u1!1}77q;9PI~5eA$EnYWDblmTsiaBJO1@>d zx_OBWV0&AWQ+ZWti8I0%D`R7zQqJd!uAWAxa)=~lWNtR3x*EG(O17J{i_MXgMh79R zc6NGV!yh)B&EdO84Nb284QWz4-Xk|VVgd&{_ZQ+2kh4@xMNzD31VOlzEH`b35Lt~6`RAOIo?KqVWC1Zwxl2~fz)_L+^(qT>Q z{0L4L#!jVnP{<=A?HNLfLOh$_fem_;xS(+f_0&oIf0AM7zXB(vfFBG~V;_K3OfDo$ zykJ&)bn+odRz5>m`Ll5xuDSuoYS7`yqJmnk5ts5;62XG5_+82q`qN@bQ}JladD|@O z?2NQGC0eMVzMEw0{L2s!ObCQ2R1$TrV0Io_t)()(Z7=7%x|9ws@0_ygX_XZjEz2 zXkur6q;Y9GHV!UXWsXeOK{l5%%0u3ux2$P!C+ul%h;olA0M{-hlebqLBGF_I;iXRz z2OPz47Nra;+gw8UVKpUC(m^T@Bv*GS>xThnR?W<^Ih9q@$R2mVHC@V+2C0cfx{s8) zl*=e~*49m%TRE++0>C$bZ>N%~>sbuIt+KZ?bv0^7B(zNap}U>#9?OJ=H}c5BqY)hv z(^#!9A_Ad0K80+pxw5+aT)-0pVT*upt z=EJe*OILMv(7A3RUWH}rd^DZZ$+v{_Sf#|aLPl+g&=%+3PF*Xxx}3^jUGKCJ6;6rq zK_j$_9Ap;GFpofy*x+I5!@65q8nxd`hu{aE&+jPadn=2LzCrAQ$NC|68_q;uE#tS6 zk+G7I88iivSTitp&G^3c5~uQ-Y$JN$O$w-Zf49k{Y|p1=KrbxJD66h6gPT1Hlev_g zeFjUHvLjI@>?uR(+q_}Dktj7nSGRv(pze)z{_7beD}eIFc8nZ)uvTAWLHh@Qz=Z%mXUvE{+; zPI|1nq#o^J@9?tQs0_?YZ<){QyNT1L9^E#>yqt=87&FIs+63-WzNQuc4>6Ze{_0X* zkR{|A=2GhST*@I@v|&kAMLlQxcU+pw$Mg>ED#`7&y_&}(#A&kCo%oQXs62`GtR`yEi7`b} z3u1g4`hJ|8PyK#9?FJI+94ENU;N2Dt;`BT((GPL4b@(!P6vBIiOGQK0M4nYe-~Z9` z&vm@ta4Nr%93rEroM`20Vr5Y|b|H}dh>%gUL1Q(1iu&fCq$wyXDYVik;#C?q@M?xa4OmM8tpx-SstPE>|M!P zLR)rYCA=2h=~BA-3anZOOtZ4LZANh0AX@T9V#G$LlA|-p^TuSA@Vs%01WB6mG!14k zQgSIbaYnCC}4=dvk2p; z0N!9|pwQD0#oUb&TSDHqp_ljR?*odswMsbOCKFg$D_ofO+Iq0MSqguXqpqyJEE?^a zk5en~F)~aep=oKu^lqbBEFy@Jb3|mkUzx|G{ODO-rD9yF?MN5^TT6Ock*GEq`kye_ z2=LE0I;-P2{J& zvR9{)C0$K+RHn|)>e`LnktS`0$*6oNXpG-Zg(i;^?Pb%2PwQYd7-68)Ke{W)7Unc!^w%W5XKCTN@ge@k6bxqD4EG zEp{oX`;jJURSCK5EVo zoP(4pp|@nG!Z)#ANU?};`oSIp*$v1HO*&^_Euwaz4J zbaYBxlqMDRzGjs4=NtKq7BAzI5HzEe!HurPCy*OQofz&8almi6Ph=O&O83mw|-Ty*QPLQoh8o_46?9cUqvj!5j%G~uH?-nd+GdkkGy;K`iS%=&DRp!L;DxR5YDy z%L~~SC+)zOdsQWnAE?vM+`tNc6vWU52PvwCecjZ|@h&4YnLhOLw3I8-*p+GQsx)?W z8oMTqU7P3FlIIu|W~YbQC1LhRn7tEbu6!&pYuXcu29B|+(Wr;=rsz_NHS4&2DbL~f ztRIxhJweO_Xru8u^Pb~Ks#EAY1>_cUURAcb{+7#>wq_0jyGL{-*U14xKehwobR~UyDn{~ zi@oP!AGp|uF7}a2+vOVcv1`z77yH7+zH|-x%Ei8R9r2Beed}W1x!CtE_M?ma}MBK(ilr)Y8rE-;kzv?C5;VAV}sL}GmWLDF;^N(OJhUQ*w8dKER7wQ#)hY{5ov5> z8XJ|yev`&Vr?D|YG0W8O68Ph){JmYK$aX)G&^Wv8)F8p}yz zxoIpfjfK-#ei|!CV})s~D2+`_V~3=%Noj0y8ap(N6{oQ&X{;oT{oU(0&d>4#S}dS# z&2+>w2cKGSxKnvgTCw-6iM3_Yw24b;w3|J}ZXm;_ESWG8av|NF3Gj=u6bgOEP6@=iR@@e z#irMeVub*knz$j1g$5(7(k*d=w8SV$h%(jW21c3cQqv@i5&wqqzQCpYh1j&rf>b-;w6;n7e`e?)k zntOFB-%Hx%=&Sk+xahD-bbqB(#S#H|rgEpq(NSVlQB;RD8+;dB&%nQyDe`t%Bh5M| zg-ATX8c79D(d(n&S5Dg{6hen@;7dlj2f_2i(A~-s&e@H+l*0(h%n^hZ)6viB%i1)+ zCqDQxvF1TS~Vd3<_+Raex3nr z(R*Q-!cV8}D6wV+1&Un@v~uQDCQGRk%dA$Zmo`$nNS9DmJ#8)R4S4&&3eTz8~S;VQlBMp^k&qYc0D&j-E0!a+3h)EfBQq@>dbScjgRm(63 zOotOBu;86MAB+UmrG)jZGi{5-SK2W@3uQVLm&CPC=ESnwUanb@zD{o!nWGYW2J*U; zLa*hJr)jhn#{Hp!a)biQP>PREj37|VJz5*0=g!s{lm;H|w7aC+$Q4OrOl}N+#A#ld z4?fejY)PBG{X=d{$&wCpOJdxLJd9R!IgdWDpcPqovXziE}v5wBkP%gv%&0A?q%AM7A4h1F$T7FPx`i=H>KNSj9(t@C`)pAPgyx8 zim&gra+$8-AoTVQ>IV^e{*##WGR7@^qrw~M{*VsE(En=Zz)H@3sYc=pDu*&EyCVjsKMCoZNZa106DX0Lj$ zSAEp0KJ8Wig+0VRHpa(1K9=KS(|v4_k2U#NyN{jYV^{dtCLg=a$DZ`DSAFbFAN#`Xs9-_I`NZ$<6&vvC2I8NeH<>Y{+!7Eo6PRJ@vs zH!`0NuonXCtpNKnz|>53KqecR$#OH<;hC&5lU}F7t4!BsvMrfxe2^^-vIm0f@gN(N z#b#%*Em`dDEH*8hy_n6$hL}IZ3PP+t#BL6;ts(YMh`knKUxe6CA(ooMigVcUIjlK{ zU6{k3&S7umun%)sN-oRGWryXmX}N4}E;}=qZOmmi<+3+(+1^|>D31-xW9fP9@H{p* zj~$!G8uQp0d2B--yEKp0=d&~O*|YiVrF^zCpM?upT>)z>z|O^kwR;ne%7cY5RRqs$ z$7C>VLKNxHm*~nUetj$bjpk>QN5+_+bt)-(8?p>8tbH&aTkNuLLt+?B&B&#=(x%>8xuRdN4I4zb=rMdfLX z-8#6F22Mzhz^KTIK9Gzij^65HYhAaNf-2=QnxXzNGO)hh$Bv9oEnNoY?eTUpf{j!8 zSk_CKsVOr~iW4+p?NXlC6Ai3X8+k?%$hedOjc>T((?W^-CJkI^Zn3$M$0#hl)?$64 zLl2+^|9+WGzaiN{xGIZwlqa#_DKA5~x-HRpQ1moCaz7g zbUo&2lyw~7015nkB`cHgFA-n_qbw5>tHN0;=^(p!#@Z9;YLfrzrllX?6%_Y z%Tu;JoyN+Uhc8BWqUcjRS(!~)AaNfj(Fd6aLFNdqCkqucWGap+a3A~Av^^co9;DPB?-8B}MV^*!56-jp7)QkB1D^#IM=qWA z;o-+;dvJQThqfi*@N7>x`kQ1k4d!il08b2D_)6nf9 zqNw2HEX5JpKX5em!HPRuaf}tZrP{^8)+C42s2}B{Ww}M)-K6i&QA*>avw20b~7!)p|aW1sYT_xarf+!t8|K@*AO%3FylWS9P#9T!8yttSbN0Bb7cxy^i@%E9X;x#c%#hYIm2bs@7Xmg{A zw~I6tF9#)qbP6iiAFJZ!AMCo$w}Q~yQiGM6e9U<3f?+zPCC_899l}sYc3G#=d;N;jZ{-{n5d@WKu`@|50)Up z1lX?LjV}+Q00(YrD$dT-R2+mUs0b6#j&>DiTxu##s?<~*I;qhIF9nD+0j6R`0v2KgrnapIY#;-oT7#ff8*+72CzMvW@Y64O*13#O?!<4aRORFS6QSRqZtu|S%NlYS)F7$(7J3x|p$bu<-6-@sex2j|a7utRh(njltj zI)$d%V;v+|tqw+mZWTv1Xey3c&{Uk00OR3DD5O;fqn+d`4$jhWBmjPJ zd=+XoM8K(rbU{CO-(OSl&c38}vkpd!I4Vx^)Kr|wsi`<$Q&VwTrUb(~ zOoAG1qfv24nWo~HF-^r$VVa6#za-cjIvCCKs5l-{Q*qRzrsC{IO~rAH66{+YjFK01 zS~d!C`iiFFuoO+j=_e9wB>F~fdK!|cIN(H6aWaXf;vf-N*8nRtz-YtH+*}mmrF2cj zJLQ^s6Mlr=s&p`#PE+yPwWi{AX-G=(1#d4)u%$W}WgIGAz5_M-!K-eXir3d9*jYLl zEf1)8jTyS2AG}YjsdzhBf^F8pD6dfQ_OGVm&0S5!tGAkp7icBepL8%?<8i`Sg@a`))GBkc@C@G~2DFkS_A*2geg=>NNa_ zO7nCung&#Nk{a;doTlQvH%-NRYycAx^;8jo3NfT%DhR7QnTb)`pr}u_rYkimXQhgx z&@}bbf+o(vgkOaddq!`bMZXR&Pxm|8JZQ@!9L>Zd4qqc4V;AXo6Mh}uS2`ZOLh&o= zJ4QDkyrE0tsa%J6Kv%NAbEb-8yE%V``=EHqe!zQllLCJ6e!!ol!(-c|&JQK3F^b7_ zrJze!ayZyFMj;h?`_P1^^R+*CRhTU0eu4UQ{`Lp&ZXJ&nc%@vFRL3aVJF6(qAht%P zNb)p`YzE`&4hGmMIvA}m0xXq-f*SRX32JZXVAS=Rsqy7qgIehzSt)hDW-$6YLG5N8 zjQR>Q82z09a}Ji&Xu#b!SgQesB^L?C6-knkVyF+{SM(NgbZ%(j`3iBMQ$6BV=P($Hk`&US_fcM&gTRs=M8W1bB4iFN5#V!HbX% zn3 z=b8*^0j&6OFeEAcfUVcTkdyQS_K6NQv0t!SOdAQ_ut426Z};k86Z!=kgXuO-t*BqH z({(Uq>R^=9n!)IA0mhTnp~uHc`J@~&$^ZTLKMnj(1OL;&|1|JF4g607|I@(# zH1IzS{GtYG)cYJb*0g5gkmlj(g}y-tuuA4~Iff3ynt=P};RlybbN|Mv46RY`chsm4 z;NOGz7stPc@b6)9WwFhuhd*Y;HR?!>2oeyR%Hi3_8nq~u9%jU}VVjj2Pi&uF)LSy%4U)FQf{ zUBg1b!&8G#IJd1Uiz=}}81%&tOQoU(^fPf?#agF=+qItfp?JL7gZtH<_@vZzHaP;EE&!)> zso}Y);hNNNwdC|jvN$UZ9-SJjvo%Xu@R%gC9G#FRUWfa&WDD43u1TC4L!4@pIMOcV zsLg7Ziuf^xT^2&zN{EYVpW^<4U5ar?>e@za0q?L;Q(Ep?S8)N^=>ktx89gtF0;>p| zRu#e2MhRfpe)pbg$uyK23PnzS9rZ-+w_uVX%d` zc_FxJ06Vx2l$|E9a|zhFNHVfS*T_)P$R>{x^ASTAB^V-&Z1R+BMBOb3jo{CLvd{_^ zt^^C0yTX@BF4}@4r8+XH_RABs$1lbGCTc#LsQEw%SAmgsC;``ja@v6rlxGuoI_-y@7 z#M|02Aak=26ZZqrGUw!0!N~$}Qa2_%SLft5;v{R#wsq4=anJ;DQa1+o3-B*KSHD9$ zn^sz~kU06h-~{)&!bw>ZYt$%8p=J8(kQ%i|{6$GN-9qP7FsVj;JW)WmBY&Mv2_*_w z{Q^?#8590gO3@Slbj-Sndpr}Vlg;42!QGIlya(UbCYkn((Ysjz2sgUNQ&mx}C}k)p z`4VJTz>RPnh<=Hyn3wTJ)N;`D@REbVk%OeAeRv#?97MUfNZBQOO$Q0~rVx8e4$|2Z zkYI1MiM^8#0)0OSfkoV#6+c;weKKm)j}A7Rm2O9f0)LI_$}kG()-4KxzfSQqz=~Za zTxe*<^ze`jk}p0a0~!~;MO^b0pO{^1rC_dQs)W;UTq};K9Q5S?ekucg9C$P+K3HLD(4aon1yGwpzg+CWjub zWGhM`luLpRJAg|!26n{f7q~;}NP}0^>2l z$j*Sewvphm3Q`WQjB6tS_&5OJeyB!os@J0VjQe#hj!?>BoUc67!(Vv9dpzM!JtC%5 z1i$vgKlQAuxFZwO2Jw6v%*XQ~er51G8D#Ke8$FpJ;biD3{?UVphgtDGK;D)g|H1>a zky|kbIa;~~PoqD_z(pU+7dSelqc|M*zP+9rHhVtUs}B9>34ZHAt&$=K)-mRU6mR@n zUXvi@DP~?&UmO1#596Q@e@0Dz%!YSgna%ykfQL^d6=f8wggrM22IgD&UN9dMJ4c69FEK5c)A>CHqL_#aB@~jPbckc;J4zI9h0P{TTE zSZ8pkH}3K#v|4hYH#FQ!PlxiS2{uit4;`2&CM|l3N02Xc#Z$cr*Gb^_cAb$4e4*kS zvoU^pDyzf|4Rwb`dSTh&-p~mAg$6-YB#J390N6maK?!|2v~iF(JjNUTja0}PHSD)_ z6W0uOD7+p8N%Sb>^~T40aTgy$zrJEWDJ8a+ zP+QYQ0AGX^{rEx9>}rpIg?@*t)X)oW_QgCrf-gWci~j~N*JdH{xHhY5N~Xz24~9-+ zl%j_+NlQL&$WKow@g`ddui-%F;1P6%`+@2zb`3~CUq?V+hk3(Oyx~K=;Yr@`L~nS4 zR9x&@fS~^Ca0!-zPcjx7=w9dSV7cW_0BsgP!5_xShWfH>s2ZOkokVIAbERB*l1D?> zdC>#kTT5e&wN7fyd-WPX@&=HMmjZmRoPy0Lp5ZN-Nh+cAAT+}ZHvWHBNNGj9+)`nc ztdMeyP?a}0)$AwL-q0NJ$ncYDZ+t5E6E3i?xQ6=)&-`adKluP#VWe0Bmi$B`KYrJa>kV3n2v&cY$XrR}4@6|H*S_-jp~Ux4{6i>@-2qUz;2dwLhV*?G z{sl6_v1?DM(olsie8$mp?QNUo{B$tqk|d1IDnIyd&Il0vK7$VRh33Un_C zw7?rb%)74g&-sEDz1%L1n4}ql7Pk<0#wpOX^ggrR;}h`wDQcomp@}Y(wNVNeT1YLk z&KsIfYI%@kGkd6~_!w_+aQZfiHZj^`CQG@0o3zl&^-1S(qJNCn;(?yxD++#)TIFgvAtS-b`5l`W)>@P~HO_c6eZ9L0cl+6B#Nd$id`;QW%CyEBgJ50|0 zV|a?thx-ACzQ2J4LSGv~-!gBw#T#DY4M)7;MsK*m8?M)*-*bS1y8bRM&*Kv8wnV*P zkL6Fmz94}5ib)Y82sZFGzCS_mMUael13VD~PxY3ZMuvPDMWIu@VB`O1g|ASBJ(dc8 zD=U1BD*UZC*y)WY1c=ewKxokSQiHw~4Vq>GZlwk-VBkCG=Xl2oo?i!vV27}&=xk%& z&}uJ#WCYQeH{QX6C|8)TcnuFEZxZTq8AK^!kopia(J7m2nzB}M`xbG#*1JC_XGxU* z5XxE9!dH7kYe>iM^y2qyZ)jZ-zh@`$dk*J!C!ux?TvhJ@Us_(M!{{gCU0gd$=+~iZ z_Co?+mK+Eh4VU8@<=Se2arK~Q(pipaZ|c>Y@K>;}Ag+e45TTNHf1G`Wr|AB0 zKj7|fC`h3D+l=mSlQ(>=H+;1>e5Ky&QJaC5hT{^yR`vpV8^H4scpkjb8~jR7^XDST zq4D?_9$K#CA%p_+NSoyTOAienzT{JQBdLNL0sf^&m^!0)i|kIzC_I(iK*stFph8=` z!Q*9fs-)yjV8I2x^u(_Q1!F9A8*hK3iA75eW+1F}#{1!raxm)5j8Uo1#aKL~NtoC; zV&^umNij?hzv(EFoM9LvMzuOVzP7H!H&Juq!_G>oD1&IKAxJr3JJK{Y?07Hi_(yN} zZf|(2H++X~#{de0XG^tBBemTPRjqY`IhX;;+vSOGH7SpK*nOn)AaVOgE4Nwn><)lG zm6Z@78xJ7@kOnLQy_pCR9)$?oyy1tv;keF!7$reB_$OV)rr`~UgqJ-GMz;AN!!}<$ zE|{|OxH9fXkC99T#Q!#{Oof7dlndZBOi!uOx%vxQI7gl%jtRq#5%pOzD_8O3i~LeRfSJNN*% z5_%g`4YDmQ#57Ov4KKX!250;wU>o7*U2n-w!obI~mC(E1_#0l#_Q*MV@Sjoqo;SXo z`yj;e(4RDibPS1OCN9E{4gC)!eSBA234O3X9DOJ;jw6f@kp-Z>MRX5NtlT*~#UDxF z6A9p>B=T?C3A{^UoJ1JAyupQ1MMqJ%(G?5H(G@)Ffk0S`u_)|giQho@ANPsx>0pLk7G(q#AJPJJOoQTAZrLSOlb0J<+$Y1Y=3)!nkHW~yp;pR9WN!v9p_FD3j> z&8%kk!z#Xm-6yMseO2|DtZErm^;w^+7Waj}N8+~;{vI={rTwtl0ccZeHTuO)dM?x$f>YmS11x##9Jtf1OOn=?Y&N<2dpL-~NC*l8ev zDE0%Q*mvIWH{S4GJ%pW(63d7)c$aJxe0^^(MOnUt#becX=J4^8Db@Rt;t0Ntt%QEE zjsdLXzUhbDzGQO0C351aNQZePF+7Dfa6e#eoCOll#$ey{aEdSN@P(N#{Ijl*vr!mK z^~D`NGGbB$K8Fg;^XC-k9ek3U0p5tLE+6j!c#h)qK{e}v7;^b~;VQjx(~@z|Biu9} ztS2T6t0`KUs*9(hYU&coq7-=^cNSvFm~R(J6i`S@6jV(al3dC8RLPM2s)S-jf|jXv z3Py>7swwW|N;Xg>?)|ESTKoTF?aBkKn!bO%LMe@+Oug=K?mhRuQwh26R#Y@lB*{?t zk}+gRg+xy@sU%5}Mwv2GI4ClfSt6N=3>i}9A;a(U+3QUE+O>>uon65&i|C zlKtx@K)}D6!@qWmSi457CK2bv$4unpP7-Avuq#^8og_BFJ!Y@KWzhwGzgnl{b?-Q~1a=FhXcWs%n4_LaB#JvhLX0V$lv|9ZKS`P}X6lf(Q zmJzXH5i8=7dkC3O^RQf&;9?tK6q<=GMY<7uB4JpZmE##k428Yk+Zrx~it#xgRzzu< z`cX)lts}Ojtc`YQ6w9>DE%rEzwT&1R@Nsv+={{Gg$q33OZKOhJq_DvdbmptaO7nTt zzY0HXUc;_H@%i3kr2}$RKSk9{$9(xdEbTj!JeMF!ol544zd!OFFf~f`riSIzASO@+ z>*H^9vxm4tI?vf5oyQ$gReh-kHa}H8gqVzYK`Tnx@=Rrflg4L&s5_6y$q*~j)mVfi zR{$cXUGU@SveJDXH)drd(CXfZ{sOX`DhEe&)voy6@fvng??NkyS!N=?#MIJ)94woyP`?e2or4V*O7_JzQr=VBgWyXLDi0)?CKp6F^`mF zZ}<6#h<&){mUx1v489rwc2DIrUT%|`>f!E~Cgt8FzluIlo;fN4WpoyKdJF<@L*6_p zf_=CnBW53Vfp= z=ym!+=p(;m`rios(?New#5%?0{w=v{gTWxMbO(b|3NvO;-Ym4v_z$#x6y=6AVl!^J)aj6#FKpGY@`M(p#H&EUzkcW_Kc3zU z^_=g_!WBiRS)qdX3KhivCW{ME9IHGU3ajf&;H{nNZGVqZiOLM4*9T=n@fNb3tlQ7C26xti2*p4ww!dp5XuU3Qd`$4`%i8dc;a zJXcd!HtG%#&Z*CiNaU%is-19Sj$$|&88I(sRqGD}C&id*|PU9ykkC3un1GRP5T=rGLHkulUZ4+q0-GF9J zrA?5b4`>f-0qt(KTPKtkFaSi(ZeZ!kt-IYe-=yK}2F$HPvHtb^$~% zhN&uaMWTvf-Ed<*7I7*qe7!zv-$VKp=(#llyLdP-yu%6YkVy3I1ge!?8ZjTGX?o&M zrx~TzZU8)t8A0wcKqxYY6Qj(;eaZdcNI;_KV7i zq_}5K#z5VWwf#SNth-E(nFCy&cZ1lmMAv4huTr^k?Bzj+d0oh>8R`pci{l_^zRpnk za>RUvDJLMs52dQmKqT2u0VfzrPedXb1O-ZNkW&GH26-0^vL<4!j#zKHt%0944u{e; ztWhA8t_B}Bl)fq43Ww6QtQmfxj*M|%GUKy^@ke0%LBv|;(&Z;v^&a>E7`dTzU14_Y z9fO6|$Nz!W2%+^QXnh{BHb$&ZBG!7B+$ALURm9lhuFKsA!7?PRFU$@BBzVg6QUKXs zp*X`YYKNKJX805Dq@!-4l}DnKxjCXmFGmWY2s;j+0Kto3TXF#|C%~47z0uKxQQZv? zSNIG98b>qrbLAf1W>yu_(AHp7a$EBQy710FVAS6t)-Mt3r-=1~Yt*sGH2#d(zks9) z7ePafXQtL2|5SDH4uJd=FoEie+i1Co5VL>N>v1j9en9bH*PDbyR1QKVS8ggGP`MqW z-L2YDt1N2Oh&nrU*CQu1i>V!Tx?XK@nX;(g^=jZA+zNNSoua7PG+~VUk{Qns#=C%V zy{J{!rF#?UYJ*=rFmk(I-NNkH^=1mK2LFN9BB8ZAXf=ykO`}%hsMXLVcRR_oh)N&9 zfeQ5ni>f=Ax~HEy&m@<-CDquaA)chqGiy{0YUTuD6~-GDt_gqzVlg1>JyCF;>2}b4 z95vEinzJqLMJaQisNEC=Lldb7$e~444;6MZX@2y>vVWt3h!OaXM%9BP)B<|kPjj@) zM55U!Sv*V@k*M7mxwk6+sVcbnrU+2A+CNbo1XSiW0)cy+UKFzBnYg27Db>WI4hgR+ zvLQsTt4 zl6#Q2=vF8lf#Q6Yp<3$nf_22{5VhMv#_5p-cO*Sr>`3~YMH0qP$B5O(b*erfs^&nR zEF8a@T9VR-5Vku+VLab+%Ec>?1{L ze+2}14*>7uqt>x5@878I*r>J+YNXykJ&|mFM>hMD`ZPHF0*9jpGJPA;%@b8utK#Rp z16h9&@px1qct+}PB%%V4Ex7`9YN-mGi3*$^wFX74Q=-<%ZZ+y66SQ`gOMP7IL7)&C za(6+xF*s_UF7X1JvEG^MhRixU6e2hT*0%?5W!!dz|5sO`e2Q%*H*!O4IkAYmD6ZdG|-X`RHFL*8i(rHCy-r9!(rb8(c< z!Xc8lf^mLXC`VP&osNR)G@tjWdEKudcQiM^5K*fSU{l>9!FFEepp zvM)vffzEU#d~sCN8X2`NjanmIUyLEssEXPn(GV&W1Ut!_eV9%#*pTC=0p%~5NnORhV~EpXzDx9;k})Z6@2Sv2vd zPC@A~xg0K+UUE4C7kf795(?T!F@25~u_KxLw3s%Z&Cw5K%=@BRcrAv}RQF)c7Q8#%fd|7zWpj|D)msQ0%W6?P&H1nsgAg*-^)O)ejSj zfIdtJs08_71BfllGfz2cPNSNqXne_Wt$(J^OftYA&q8uAis=hRPqDvHbZ6s^i9w1B z#$^tJbI4#>Xu&8bGIU5Ksxd0P_Mr7M}0ciDXtpv(M7H7f|Vnki*`Y&tac) zBrc@Hb0LYl@<}}JNL)mT=Uu<9<68D&kCT0u+pEfIM=~!tV#6u+Qq;Hu9>^s-yF+$m z)LbP=-roDlsC@_J1tpSsSq=9ih%OCYt-f@?MU#Kk<8U0)4d%v*Mv;>wqrUP;gCq?9mQ@eNpG*^lnL`&Zmr|r z<49_4^qAV&HBs{&T5dd2)C6iGv)+uF$|WaJzaM|SsnleqOK_3_P(|G9D5?U*ROU;6 z$-MVpyV3Q8eJ|?h%e)`emrX(gE#NGhrm^_@xuNm~q+=)s(~^hcS%AP${29i)Povg` zsP%Ew`p_NoZbqi@MbzGa(3!K^yM>vX98%tZIGd?o`>6}mfsI>{iWZr}%q?z*lg0d8 z$y$Jm>PgyhyF(?~qJQ$Jov~HAj#^4CBG$JhY_EKw1|S$Wu)XpC!8S+jZ{0{y3-cy? zY3a{@{`se#yE1u@g}#g0n^ibaMZI;^Bgk{5!M0WAC*|x*DY7Y=J6RKl{+0E?Wb8vw zDsE%uQ38IQ2T)?mA4LJ;+pK6WX_?0Ws5;5xxXEsdnnL^uhj{*jmr_%;PAZ=IlYq20 zX@l@T(QJ(v{9+lh%zvV+SdKy&>y@>OP#CP*aw_~93Kw|KmTJdD;R-6O9n-hCyvDC7 zk0gXES}4yRUC@a*EnF^auTWNjs- z{7>29V^q$Y^6li*?G4s#rqcdt>d zDlb(3`i}eul&>E%COgCA01lH|qnJCv=g_S941lU`As!7JoR5jqAXebz1&w+`M`S%k z8pe#X9MuD%TI__=r@EaQIU=7>q|tV@77-80wR~d-aU&5M$DHtuVN=5Q=S)_e_zT=Q z{X5enrmy2XKf}DInux)k^d$kC#GIzdGz}qnE%xt7UlFNk%--T{_I}O|^$mG`ssg>Y zVfro7Fpwg@m{>-#ykPYrb{DMSqhfvAf{{RHI$H6@svs$^tw;|a`#Ox?E<_!OTF;m;@O`uqC zv-fY5$QrCmjoRSdD#W`c62Thxs*vj;YN z+c14+q?>JHl7(OOlFeR~RiB6zs6cSDcNZk00w_>&1$F}jDv(75GBK-t%-TO@wR5Yn zJ2FA5xm;S{VjQH{)ks{U#xyQl@RDgSC%Mc^R^L-pS&-igf_8gw4{bQ?O~BwrtI;ur zIEI~s{ZZH(Rt|t!Mgzh9sERe@BuOF_?UHU%sR&H;N6jFoE)={hli{9ir(VcxF-pntbCu8 z`Oy^FyH@VdGIL5SkjqyUC(@)FSugb^TNY#TPuOXfZ`#(R5S_jk^`06t?%pf#eN|so z0kB2@TSaGdK9uXc%Ib!hBM2Itrz)OmK5;B+;l-0d(gJG3{UlocNC=vP^a+uDs@rdD zP5891a32aws+`kSkbRM=7B&5teM)G$=+~5yC-6W(Q+0Y+)iK06U7r93nn3qz%m#~6 zvA6M?2ALZhaeHW zQJ`ermjVL3tHArpm^I4feHoICF){l}XmqXY#emDnWmN7&CX%^Ed8hg*a+#)FMed_e z-n=Gek5RQ_2MmRc^32%0f>%&*Y*4U35YQt^jYwu(UcAx7bF%m|=>d*a$bu=sw`5aZ z0|=OMDoi;gW=)D&6JyqR*PvsO2~&)d%Xqm=kjq55Ou|JU=5KU{`H3)`7pZ2UYQCdi zPXkYeq&X|5346mRrU{z->|FWlC_g)9-^lRhy*F4pmYJgh^YtY5^`7FVZ}9_?e!>3Z zY78^xlBaxrU*4V?FOG_q&Y4AV0yPbQIhD8pi7GnYNH%k%0kv(nqZqd7KCp)$nH6b*h*#F*}skY94gxDycQ z826)N+#9nN$E>?z)*WugxC@!agE4zC$mB%GyO9awESAfCxY!RW(s_bNtn#r~Ah)PU zQ4?>W#LUN3<32zlK`%ER_uX3de(r$o0vn=q!Uut%+*1vo53pGuLXvXoM{r|48Z#b= z8B4d9W*#SAO0vO^RBU(6Yx&=Pz6;gz!pjrVGyEz%O6E`K6CqVg^;ru|_Q|m9h;+B*szsh)CAC-S{KhZPyfPaUFp!i!>3u6hBl~oi z?2{z>G&|+8n7N#-w+tz)s?6b3gFcNU`(C|^JcBfJ5#*QLMVyw@NRyiuTJ-d_R&ygvr- z4`bH*G3&jU^{&f)6EdOuE4h4wi~T+*gf=U_MY{0`b|1qpoFH;w-T1DMh6m*ggP5$& zRbL*QtG+zAnF>BZ@wr&aaCFC)xZt0>llZ)zme_()=I1f{Jrw+xljO>6WxT{GI^Gx? zWW02w;W#+Es*06oHs$L2p1L;04BPo|^v8TXUl>AkZn?mHkWj<#kEHM0#~WsT@~ai7 z#xG3$Pk%sm}HA`;KKLLUE{1NT>eazYtvo^=9Z`}6$3z^2x*mZ^Jls5*g|2HyW z-Wofg%o3-*KeN6+s}@0he@Ga=(tPWszBN(O-t4zRp(hz4gxxvVUp0awB*w4&JrII^ zVguI#t|_S!b5!aM)b_n@uN|584HyL1U^^iZMubqwMyv-27_ltg-Kr6{{*GCHx)!XD zoZKgd;^=>ai2H`xpF%31(~A$(ile3t$iGIM6FM&zH5B^DFPVN*p}#Ze*NIy@#+|+H zUCCWL!c`|uKR`QR!+uBHS2L_P6I%8D1Fg8w+7+~##H~hgt3lkV?~*f+35z7jQQP?3 zEza)ALv!xw(gtAajnum%+Yb=UXjKy!=I(Lr)1-#LaKPNa^P>1bsRq*`7bZoR7V&&+ z$_ugCGZ!XJm_6hAj9J(u0pottPGhroE=&bs_Rh)II=HFt}{W_V~=zp#^tTdM}x7f5y!-L2ap4ZRZiCA;;3fIzQI!+*@Um55vMxD|E% zCqwpD+)jX@3T>aMGti%@GtgOP2KT>g3&lQDUlQ|=W2(_AjttMa+Q5MDJv9xiplfvi zkl7}#f41)SZ^fQTE%+Y70}al8}Vq8IsR^*Z$y`p7St{!v2zP|)uhw>rDr z`;xmB$Gd{18^=2rX3XW;(L$@+f1ou;XdMY!z2ny5ajR$C>h6*|4Vh4Lx?IkX%b9XH zOD<>2Ww2b%#l=1xq(igH^N_B`-o6Y%cm&oHg}p9%BD~Iz|9#jRLm+9M7z&j~=Mz3T zSNH-7pB%T3R;`J4uV0=yCC;7si%3XY8lOtc;EqrC>TN$12svyoMxt6A52xl+;>J;N z{T#2|msC`6ssT1Yqo=K*T@DdwOm)FQu~6<6c4cd4wo)cZo)#lyQve*Yzc* zHYag)@LPRyK>2bO7^n(h8%ffxVA^qkwCq`N^X#}v@=k7^6}OLLwFEVi8LUh^nxete zkpX`75qjQA;W5f0Q$!J(o7CrLe%$%NBm>QXjXupk&WUHwrBhS^+B_#-8hROY=S4ry zLBE>l=Y?FZe?FHR;z(RWi6OxTsJ?<6THyQrX*Ac;<7h5zvUF@dmFGJuCs5`2apQ!z zeXO$mG5o(4%~!`eEH@E_inhA!VB04INlhlH0dYwbzMi{GA@~5Ldm#UhWiDXbTt|_C zamjHjHx-HI1#xUdoEcR;?~~ zn1J2Y>XhbevU9t&{AM8BLDkbW#jSb~d4Q%Dnad)6u=SRx^L)|Z10)qr7a-46eQ2Ry zDl;OkA21PWsIqe`_BKk5$PGM;kd9Fu$R!VpcL4&UdKJc>E92IvxHU3vUFwcMcO%mn z6Sqg9A=NxE_%85bWWtf|k;{E7s?7?=IAPO`hI~4!yl5mcydh`2#5Of6yo!!_KY+~f z`lN}yN*24C?1ZrFgOr^RH?C0`_3eBVLP7Uo@*XEZvUh)N+?*75lAO)NYvcB~I5^}5 zjASOOc)Ns1+6JnxJ{XP^QYhZ?m`hvd0EMm9aZ0$3OIgP$@zONO$(j6`t_y2=l$x&7 zTOweA>gyySwyhgEv^q@~av8CLry&C*CBCR1_mc>SPK!t4e#`q$-X+fE_JHYO22YcLq{>uZ z^@|lqwXb9){OyfrnRY3c}C{( zC>I(V$z^do=b#_nVN` zlhsbo`T|*M3jHN+vP29LyLJg8eWi+C+h#;xb$*0XWz8P`OO zkO?)7aWP&&y||8p|H#Lnn@DC;xirJYevtzjN#mQ;Zw5lpDw5qDB}_@xKMUQN@rzRO z!2AtPk(~$TEg%EU`s7hrr3SuYs^Z==Xar|z&9gPZFBtDZPOl)}|6KLkVOD#Q)!T97 zHOY|SdQIGX$4zpE>osxvH8otTIz}?@DmU1h{N8Y~z)PNi>ZdowY$}Eam}B4%GKW>= z)aE{U5iuC7bsm1S%&d!N-={%alKMK1D(}S2cbU?P!dgu}h?^gVYVtv-CLgJqL?LQF z3tJWc#0DMLYXz~gYB&c4_x_Wcj~&W!QvNt@ydJdn`nb8lO>(TgK5oD6`jS!-$$Y{J z8mwTBy&dalha)|C`5j@$4g6I91Jsxzxjzq&X=UANO43E^s|V8R++KD=+*GU*V1-ur zFm8TCk|s%N+do0;1Y4b9xPql$jvEsi;Kc9rSdFSGoEt+OVZXnU(xYiSlUq_0&@3+pW2eRJ=K=6IUw(Q#s-BbWOG=s> zeHk}5h1}@NkQ;r)s<)$L@PTQ8#)2-M9m{Ttn@Vnf$SFc<&aT2md-7L)eqaurujA%7 zAv#}&=zOcZIz!R?{*u`o-wvjzTO|o?W_SB0Zhp(!c0h{bE}8G*#W#6JB7GN*M4ga| zV2;X{9L&1{0wdk82tsmpo_i<~B8_W+uCP*JDmu_Q(a;Ul)IsyUFisjP_aA@_>E0;B$AHV0XIkC z#>8G(ZQLKt`+wrb?{2+$ysFGFYZ*?G6NSnQ`}a^3s;#&k0|2M$65Y!)I~oA)k91>O z+{-G;27$A$o;v5p&x7aOs%qi``B-Q&>ej&Lxp~)oXZ1I~oL{d3uQTD>X-(9F`eQ*P zTh}lZtK%G2sxE#pvo0y0z|6A(??&0%;sEK-m!rOieZ56>JtJh=0gyE7!J^q(hFP0f z1CfI6@mJjZo3=j@e^N#k9I81^Vu>;n_a*!IsepiwH!`|g4GgQk;XFGXgk+vNEq^d49>PBRQ3l*}Rg;{E{6U$?GZEA+KcH{E{6V$!V1Am{&5BU$T=Uc>^Uo z<(2H5U-BSF@+L|i6!zO%Ei;`BV-=2RVGyhO8Nb|Vqzx=;Rz}&vZ$^7pc2?uhEJzy( z!Q8BI8>*H_k+Lki{P<)>P7Tt+%|V^{CNGON59@OAad_WC-iH|atWt_X zqs%I~jKi!_x&Tt0S>zyj?DL;$rkP+;Z3_^yKem zR(HebVHA27UxEKyERk(LM3e<})PJ1ZEC#gQ1C8Q8{W#L8^}Wb4k2Ek)=nG|GScJ0R zqWM1Ri9(ORXzuIid4PKQ8cwUwrwV=|mYM1^4FL`U3Wva9rr;=}%9dx2cC*)iWW_S`==73O7m!ix2L0%|7olArHR{ZBHCcFrQZ zADbv_j+GQX$(gPNKwl=*UMkplXKG$S8s?QyTJpT|O+a8?c{b*iXByV&hBe5rPI2dz zZy^))SuK~haWRG%_UZ5dwQU{TA6_G6-eH*w9rkdXb!IPPsP-rD-esX-e(HMl1?{y= z9pR^LRH^R??gz}gz_5ovx9l+Upx0Wi7pKQO2mKJG>7vwqC8#eqr z&>OAjZKBE%K@pwaMnzAW@vEZfeeKfwmh=K_gx;8-uKe_r^~NZAo2hbWP(-H}wBC0` z(c9wE`+@WVY=querS?ZcX*&_)IK2v?CBJhpH0&`KA zA9zL>xDJ756bsBXV}9V9!oYP2d{eQ&TvFx-o*4$-nZPrP1?Gw~Kk%$Da6JOgDi)Xv z()_?Thk@%8_~v4Pxn9i=d`lR37Xsf>EHIa|`GIGLfg2KdwxPz%M!3)3YM9b*n&2}_G$7L>iMDA`3}**z$`C|5R5eQyuT?n&9(;WFl} z9GLdOpLmENy94KO(S9MK@H+mg!#XoCVe|(nwZ;wjfqe=D3T)I>-Vs(`PW5*f#<{`S zs6Sxo`v>{PNTps4O}z8B6QTh224|U4+@(g4IBR&0@KC1%vv(WjVnZc)3*5U6`y92v zJ(vGSGWRIa1VzvD=L<6AIG=$2neja9>dCOsbM{0SP!|&t_*UF1KjQ9@%%E#BdE7J;)FF992+mB zV%Nuek@9gGE=!tAb($TR_K zis0>R?sY}E?6V|&DDLcKA%fkI2!be3GQlGO0fKLU;A@8UiearXtd|Vy1(#_bY za_K9VV{oxwH6`u@}l zs&Rw_*3fdK4}Bp2n-*=U%bh3ISy(fM5Y(NK!!r;z!=*bb(s+r=dG1)J_O!~C4J9gY;$ ztJE4$^^*}uLN~{K$=!S;AkfV>qnm$YSYH{|mu?5Y963-sN-kH(rw3F| zL#ZlBx4%K-uEX+8R>sb01a_$!93G_$1dk!O@?$8!)$P4}8vLVS{$!{mZ-D;Mu(zrK z+SkJ6pRAiBnV(f7TtlQSE)q`~{9>5DVy9juIdR|@!``Cezz_UClKD-Ej)SOI1DQVj zLCcRP%L7O`?o;V*Psqvk>(aj<13-;ZHG%a-Q!fIT@1XpPV@SYM8$ahKi_KS+LT}Q|L%RNGy$*k;2hY6e zPF@sk>gbX!WIiK+Exx$Mmyt^*!J%J1}-y>K4 zPRj3*uy;-bAKafF%j}iN?#-&*#R7XJZ2TIH{$zh2r@-ATuusCS8!ph&DR3_fv`nCl zLQnRUgc?>9xVrlrPE=sQ;I-|20JQ6&Nw{ClR&SYU<>-2lx>_alC;N?1?ckGrtu-T# z}!%yNAh7xM)OMgPxdv*m?QZJC1ZId{U`gHWZaQlLdkeuNp8cyYgdH4 z)^H@3QW6iXwGUH?h5RS`n$CnH`6wk5c_sZP``PH-)MiZ51(51Y{-1@YTHrlT4Ae9DhN#h)j4?OV?A$gt zBD_H1wjtpr`Gni$3a_GYy9Aa8vTJYwcMTdRIPze`kRYP&0^Ea)>}sr6xxZtgSE*$G zgwZe)s<{(#zJjR(}#xB`v(K7^IGe@p@g zgnX`v=W|Zw;eDm}+(Aw)H&DqziNLhMdsO`ivK;KdlwczT)Cl^SpYJ}Z?wrsU^8se+ z$^GXP?ws4bz9ba3+u*t0ro$$rVVZ?`NXgTzEr7r@s~4tOhb62Y39DPeIwawo=-i4- znEQKNj3X0v4>*Cl@8FHdKS-G$S*EW;8<~7Y-B0@yKtHiie?L_o0{_g^4xcQ6V z{?5#!684eMUHBRGA1GxX74XsW%t;9^p}D5LlMQ=ya3$PJ-rv>Hn(^C(vPgC@EqRQifB09a`L+d(4(W~pyt4DePHbU>rpsxJ% zl=aS3^y*V(zo3XtFKE48ilW!RrPrAB0&IldV5PPRp|pqA=Wr+uKD74RsD|%uDC2Bk zH3fnir_>UyH|ONLx|(;R=D`W$goKg7t|ot>c?~x;rK11?+nMfCdUrAzkT5#@Tfr76 zXdeeE{$ud-sC5ql3`7?VJO))ADs)Prt~|FE!ZjIzTL zc7N2;f6zTbIgx=p?SY+Fs`>}rn#N1Q8WYrbNuo$#E`q!#j~ei$Vc;ZzFD(|BYoz?Z zmxX~%0$)}vFqcsIfk%dcQv@DaEHGDC`GGGF1E&dmd9lD;faM1s6$Y*#@Tg*exjxGe zd_@@8BJdT(0(1G6ANa~JaBBizSu8MDclm)whk@G=cyvMyWNmSutxA~EZ`$E6&Ar(f zSL_ao$0I#=n)e9*1QjtR@|PuVd=$zC0nJ%F-T7bSa5ShhW7ugR6oQ{S;+ z*#jv%Hdj_2bZhk;7naRXc3e@icmpyP2wXM^eFNXCGoH_aUV1Fe}38g+OcAhrl)k_8co` zh1K_=`dLs9-FaM--A%o7qwHMCK37`#4)5DoMe?}Zc()RleYFn61S9g z!T`0v!u|*@1(k|GeR@~U4wF8XL}v@>6L^11!fR{s_c==W04mpPCVsPhHk%t(KaeWt ziu#jzKS!022MB6LdkRwR!}NvisYt`Z7WpMFY|j7$7Pfa_VY?_{ElgPR-Bs$%mm~1k!-=-z4qcd#?ZSn8vh}#<)KVIC!WRrGpN7xSSFy)3J(hiv zHJboP^Xbs;@Kf}yzyV_Rlt6{2Eu?7 zs?H>WypR`!bJ;u~FXe(vCdf;9LCW)ktjYzMLXcH?L6Z4FUdaWyjv%k(1>t-&Pjz0) z1(`~a*YbjJ?wJSVja-oH3Gzl>kk0u*-pU2Jfgo>%K$f9gL1%kA7i2m?-p&hBz}eo( z1-X$R@8kt3;B0GiL2e?*+Jvz@^pL|?CQmkur{v0EIrQ%05{V_q$oWvcw_!XB@b+>P zoE{5w*qf1xsDsX1a@1J}2t=KYh&rDntn~@&qlEQA!dmCXp4*U*(6C4@x69=Yx!ft2 zyK%8UC?XPli1pDUROkSc@#Q~uM_rHs>iTh_1($f=BbUc_9pFVJAM`KA2oq{5_xFmWrWlGqh``9 zOR6N#KWZk$KkToelzV;hHAnZ@Os%AP5K3i%zEXr&LxJ+@8p(oQy+blM_^BTB3>29= zBm-nPJ8;j_x{mC8MW{xShY_$6(!LlZsi;Qi9nlql#&MRiq**Ho<2=VdIemW~H`%&L z^B?w%7w|{Os%0%RJ1Zl+ggpHToo})LOH>!nSN*Ke;aRPp)XTNNN@y|bB^9+*q_#`a z6#Xw#e{d5yK(s%9QmX+?9o$o{#^?C#>=gj!w7{!K#HtEf>(Web;7`XNC4#GFdXt69 zOx%|o!Pfu+5q#Gqe%>HyHA*_qnchJ%)V?d1_i!)c+^gPY7F1*iUh%-ciIAe|}Ca_qCLd zM;%BbNLBF^9bZmrMfzLiSIxd)$)J}Y7xcICm%VG?=ij4YCy{!x-{*|uwCk6^Q{U;? zgd5LWTswTl+*;WdNuznPBjXhu8ZV-c7&`p4PJ78ce>AVtKFQu@3)bsv3gCwglBIhN zszT4P;5q4}WhSje(u%wO^F1=5<_Ed_D3@PwvD5Gk_j7pd6g6iN(VDz|LlLuG(oQJf zQk5vUG%=IzdRt1v_?!^zmjn6-LHA1ej9hFN=E^)aSa!JS~DHl^NDY>L^F^)ppuw`L9IR@F9 zsXdbR!M<}hmwD+D&P(rf=B0PCm8FchwEB9z_pS4`L9BgmHiy;h?ZB^ z$#!QG>TW1qIzSjiPhwpWQ{d%I+hB-z19yH|khIf`r_hwKxsjYreQ zLQ$12lHyS%Qtaze>_>{{B<;fk6wg%@k8vngZ%-vxB-#EYl0DWXdpyaWo3y*Y)k8mK zbpo=S9vTSS1DSe=s+zZ@eIn7yOoa84$G=knf${HRjDHs;tqYRY5O?q!gdAgd(!NM_ zM#cbr{TuvV$QdlF{m|!dNb$@BA_vxtg82Bs#Us^0MH}LWUUls;Fo4}V93*5XQ@W?RmU;>XU7P!11@a19Pa|nES zvB1fKz@x&z=Ms2SvA}H$0$&jZK99gx6bqaw2z+H2cnE>7EEc$PLEzD0;0p*mx*#ym z$raT>s=~k*61b{Z;KCi`sxa_H1iq?R;KChbOc?lL0!ykqYE&J4I8yB)hy{28;{~@7 zNJMZ$fs%vUC_o^%O-69LHfc>rTH}(|HEw*n0+|RhSIT9yT*lyHOidcEJ16p`h5im74PJ@Z3k6Xke+fkss4hkM;=4Wceio{#7HAnMtkJ71DY=GR&Dt z^QNRR%UKW{!0nXlRdunQGAn713l0&p0{%3G&^HhPr9?vZnr>F6yOB9_SY`&*pNLH% zFsd@0ttPb}T8$0S+SvUMD7UXs{)u$VT`T8?iQGhWbCcOysBsqmn8&-Dsr&x_U)}S= zx^JPn`Ht>e`Nsn4o`XB?TFu23m-)EpyH?^=vTL=F>k((yY5_}XyH*RU-?b9cu*vi8 zS}g>g`qK1mxKWOw#(33$i(vc+T16M+yF* zSV5xAlBBsbsgk^Cvm|LhsG`k7pdil~7%&2#$MQGIBbi5Owa1A2fFlRh^07#}AV4GF zO-_g!7I$8`?K)hY9#&uD&Mr-w3fl&@eW&W^s;&ipjagMxevMg~z!5_2x#wpG+WvlW zeiFDQKH{hyVZK`}m$7)(g`W%yKSkjubzw1ij_gxm*=3Y{swmlIVcF%BT~?Ir^04d* z$}UgZs*c|0P4Fn{X%!QnL$>Z4&m_$iA>Vi=*EfRB@T@|5fk>KJeMbm9e({^%d!5>2 zRn%A8)hTW945yKw57+rc*7^A)g2;-b`7E3LC8Vg0ft9$)zK}GZX6h>Z5i$&(CcUVt z^9u6x6JB|%0}6Ps=x6zMQ9B(P&zHhHUxg0yC3%+g8i}n;nxg%6Y7fTS0L}c*l5SUH z5xp^QzK~J*aqUYz+SKS@4g~gMWMx_yamO0tc5b2=`^u ze$|h51$Td?jQG92`@0D!_8LIsym}>eD9?P$R{o00Mqw(;na@g0P+=K3)LOMJuj1D? z>0YdwOos#!3h|CgS0m1kl>Yb;_ zyC|ubtB(L%f#64gw^`-yk))#HPq;C+Ce1BL^Sh+EIca{IG~P|>Zz}~!sV8Ls_?fKM zCiSq&tZf=i12e#J0`BI zp}w`DY5yfG`xj+@NgA8BzmK|W!x}rI{=r{E6y03iX}W(6>#hkw^VeiCvcH98%P9L> zQL?{>WouFP_o8I~2+P){>>owRZVSuqNZD;k`#m@_xB3~v%QJteK2QgF#uwY)2=&>Jnx$o>edej^WOk1A>obrg?9-HCn>y3Ncgk-!VSX0CWRY>gg?(O+%PPhqHx2I z@E7@o8-;}{DBQ>_su8}*kJ&hk*_xP=DoYAA__sx>{U#y&o#1_uhGhowOI~KQ2LzTG zEzIuL?xxkuw3?dE8MgzG6ME~UnOWUiCwrI(?3JXsyQ$I4GOa0OgS*%rkO=M&Dw+Gi zfB^R>xVJK`mM-zmNY>vvX$9TxG6@~nc}(5~<+3r7J_L7m%MigskqCk)P%^<@fB?ZZ zAZVFZ+O$m5O1Lz8BNMuhkjs&B=_8k;7Jq4*Skwd|G?BK zXKTgVdN><^b`}NwGcm0<`-p+M^xXx{ZC>;t)!%NU~KW zlD*0$do{`SH|;cBJ#>cV8e};=G!VAOG1XF4^ByygCt8__uwL@`Hyscd|Ne*Z?5Q%!pyNVDh~D}?xOo0FQZ%cyHXj;=Et9Yg+2SHb;1 z*$CBijij!H(1puw|EjX+>K3F>*buTgsgb)}1%gGSrEN}*f(5kA$>Y#em;~n=LwO+L zb|5HUR9gg=HV0>{X^QeEWNz zyOMs0_0PXEsp%dQ*8MPbkI`3;stMIDJy@&Vb*gsHlh#H5xpprQMr$Hbwp~p$HC%}oNqnkQVkPgdGwpM= zN=#FgSVip@{^v@(Oc-rvQj|#(6}0^gVcM^d>J38sHQrA%?Xxu6H!9k1P~Qdrnf9B6 z(QGfuw#)W2!j*W7#Aiq)-sb&{rZHmsxw`T69Y6%9K?QdvhqLSF#>$(*{MM4wO?u3- zFUT)EGc5cbg=dC@FU&7ID=fT@!m~oc7v&eeIV}7>g>McC56v%pOIY{=3f~eEzBs?| z?6B}h6rQcMV8KQhkstHcFy?w})>#h;rEnNcv~o*^5I2e?cM$qCm+6cdDldJ^_M{ zo7SVIwZya@c4^i@CUn=8%g%DCCzl4e=o@UyILXBZ+Y+$!URhWH*Wt#btTCTtRT@Fk zTw&VFR1;w6!>{H%rvhVRVg@J9QU)uP;l}g+6k1l#4~sDhO`)3rD@S!xB&tbtGje#& zG?tsjpoTb~{7njPKJoa+uTfOuk#hIy&)^hW6`!h6jFss(DNf*bV@;ltZlgkB_C?ct z$y7<+8N(M%`zhK$Y8lC_R7PkHQOAbV{_nq%%~I+;H{)sA2#0cmEx_EG<(XAx_GKEs z1uMSFL{VfkX@w*DEKsA}n8p{9_nzcE$T>TDA|BEi&k%D#9hQ>SSP;DO6$f^2!oGqC z1!M9#@wzDXhPn^f=0*Bp?R1bGcZPxd9#TuHXAkYYcIvZ2k3 z2-5{4;8-!rt6Ii&IXRXDJOk;*84cyV^zl589wb5oBv2y9ZA`*Fu1Aa%($M$d(Ixl2 zeF1^s@E-c!yQa0qv{swen{MB0hfL#r(_VwxtH1yk_1tSeWPR58{DLt z2LPy-xgHO|2`Rvl%qPm1I|$E?ayf`BCO97Q!fvji#X~l_e#U5lq^)o{@7DN~xm)Xq z4n;dy&B`ysv=1ijFHOkN&H1*E=H^|HZA-d-~#yEr+U$GZ#FwIZc2HlWCX&Gu&v-DsE-qk&_C)3_UYX--# z!;lC!g;2?EdL$s=ra!<>ruD7sqkWKL{AAkSL8%&agFbo`GtYK|>qNTdPXX7& zM;^Rk;YZf;Xq30N>Q(B;v~NRIItGcT5`;>w(g}b-mHtANwwc!NZhZzISq~4}pxf8rkn?|!;lHx z!{stUE|CC zHc9Ei_45hunk!sI;ax+*yW|tzEmwF9g?CFi3{~$f;`2W42-$#IFhU0Fr@B^org^Te ztEsDbsk#~#*0o2juCdg$N6Kh`tS(JjB4Qa0y<1XLW3)R?k4I^vQ7SZfQ5rFMQMJS< zyGzPlQ`PtGYNBNe>^yqI%LJg?jZp9#hiA*o-nopgCF8wQqJ<1Gk87FYp{_|}r_JLW zCYZ;S(<<`SADPEhLx_ECGO$$jWuRByHw9^G8h0Hjv`iU|X({LQakf>;j7X9<(`uEn z8`A=|vO^>jRWz@MG&D?;%MEh55f_5#ual_xmC~VJCy7hbs$eh!0wsE*QP@Kgx%R#Z zip&JsJUBgz5h6G}3wm~?naZZvU1w6%42h~r;ENQ#muRwSNA_mQrc>I~&TwQ6N4=qH z0*@1?0VU4sDjbAch)|Kjh!#niQS!MJDS?3G{VK^ErVB=Jd{B)(k0`1(^Kqw#>7ZIV z%>tCjiCMQ1d?&hrzdT)pG=yp>C^=Lw1_VNN2BErr%Gy6=wM$uT-B5iGGL3A?-XERG z9Y?%wb}uqP_CC4XFP8@?ad1kX(`8j(gjoY~x`$aXIHz;m6JFj9#l7g=S^9?Bqpzg# zAAz9R84c?A(L(hdl@xqlO{_HGE@9y%6z&od7JAeldf!9C>Kev+lvrI;#$zq80>fvL zs%~#2eNVpH;iJ}1j5*}j6g=XQa!w5q;X2aootN<*qapqk!^*+v6u_{F(TM~l^mg=a zl~oyb-O&3aiaHi%Ug5c;;uxGeYS!o$w#HMmMz>T^(29CN=kCc57{lGq$|3@;1sWABrq~SIz^k^bKJs zOW-vq-+`;^7DtCMR}%ARhRdEQ^Dy?_yu(a=0dP_vjs*k!iLB*X zl($dNtMnez`iH8t4vDA|gi5Z`$ACbU&P0_?Pg#T9`m9H?KC+w+-EQE9Gdl}_4JemA zi=;orojoW-a3c~y5Cuvm_$?qna3}~~n6l1KS?8s!b6lF6kqO=3$z>}p#;{cAtApo( zlRE}@FR}lCqV_O!ZuhH$BUBIn3CZS2R_A9HI3J=5O}x53&&*t&G8#GiC1-L87s!J- z=9y{=^b6%LPdS;!?oq^Zbbj^KLi<9tD0{jwoP8gQivTtI9A!GB<5?X%VxD@jcb>^X z{MQf{2_xldAiJ1kf2Z0jdG|-CXl8UVw6{@yv`2g1{}1gyLtJubm(_>bF{E7!cR`D0 zt}cdlZOUKm(LOT%|6=VOLR@la??koZ0>MhPK^>$bQeBcVMx^*fMJZ5q+Qny_-swtJ zxazdw=MCvJM(&4Qdd9F$BU8Q2OIZK96fQFXRB}IQ00{JxspuzDQr4uDH8Ew4cl$|0 zWI|0NxirDWo&= zA04+j0jH&mdEES%X4a^>pPy`)?)C$Fyz+Sl^n3>>rzz)eL9)|Oa2oc9sJ3NhRxW`( zNnlpWD~L4^UT{GdQ_9?Da4pH_2Gszv^v~XsGH0h$lD9;&%U><$EeVdshBE!rvBxUz7`oCRhKEF0Raxk?GYO~M` z8q4udr1Sj5J-JHTQt3UZe^-z!M!|i#3ihRf`#1xdoicA_PumYEfxhc4824wobdx~8 zJOHVPE9j#o$CVC%KwMdhxbjHKdMIT*;0BeBRQU)TdY;!aA6I?lU}R`tX;I4qMnZXc z?jgvyBXXsUTBEnB!R%4iurs7hJ7s)^Q3x6OXILZzphd8C6@alH0HpiTUmvO~pw#xr zp~QSV<*^Naex_!t%#(_Gx9y?+RG4~qs(Gpabw_!z+?Qcw3n}Zll(iydJ?*;M z(a1DbrR?X>%xV&f!30rOMu>jM1c&}Cqb=oEp)^MgcQ9y+sIFF8D}oOAYQRVj8J9aF!u5=%J{GHWTb;J!#zgy1 z7!$QM6TcnCI+<8+7v#n8{}6`OE_3j-3nQ@xwk8aA3c=Q-5TeAXr|ZNR+?`20`rbS< zh-N(DSCyr$a>O%{WWPWc z^H;HFAq_nZ`6c(X^8kUK_Az?ehbim*l=Yt5&4wVySm;jHZsBC@eHchBXwlaad=1^S3PwF&^+-$J$5@%{|M z&mg>{N`FvFZ$c`X2lpj6&#iz!^X!oBZq-U#HPhBVDeEt{ZRQ{ob(<@fd2(5Ri(NC# zK&eI&cP+69=|vgQ+%EHiOmvTHpD2)NeXaIHPlR*ST?d)jK2wwk7$ zht7s;v_a-2?F=p2UK(rFf%!Mf|u7BsOpkC4`NI<#y9OMe#y zFe1-vv_g}*6YqWKQLDhgY?ao>(PH(npKD`bK$qPVq`l4_3G01@dL>mlyJGViEwZPo zm%oLJG_(@(OKzprfIur%pp{Z-E19;8v=wuk=xt;gtIl05aR9jUi4iyqUdlZ^RJxLcxT7 zMD?~_FD#@|NtL!!q&`8aozmOxQ>3BokY94!eE|rxT?e#X zW!gG0Z5`k?+?U7+O7~5oxPe z+B(doSqqs)zqIkwp3W9)U-f{p>+t%@Uk(#G`34ot7H7BNT5WclUSMAvK)CE6mz{92 zkAQG!Y^}reen_9)#@+K90MCP6oK450X^DC$We!N|!{@Qi@YxH}-X6n=xx)1+d}7+@ zgRH>t*&wJ{){X09#)e%`ZTyf>)xmf|EIiOOc(8S>bSgY3ti}YWy!@m~!+hZCH%#1G zo|;RvF^Qg<)($&(ws9FcAYFzvM;LZ~bqfq}romx|MU-Zd({dFxp`z1h5fP$Y%Dj!V zX2{hoeOx|EpP7rh8*$Ifv2=4J2kOD4Xmyr8Zo4eqA|JSB>2q_5?m?pG7PPc5ENp3q zVc60`auw}KMMIROm5^@feRS?z0W36)UAQX4L!qicSluvE%V+qicRP7})DnQk@o8gA zxbxPu`>5bYw6fYo^kf`OfHQBc!=7ADn&MNWQ}A@Q=pZ<&DXfo2=iFLH#-*TJO4;(v z#kn?XMVnomwnfwgS_QQP@({^!UveZ*0|Ghdb!plf;YRWbWExdzdnB4b4Ku;$Y#|f8Tgzo%7S-k`RZd9G2|HX%1U8Z` z4F=z9(3lWVyRxGhx7z{Nye6$3H?Rvr>k$nxw_wTYNQ@1WIDjO^rVG_C)Y+?p9v6mg zPv~(4>lcEqrhcK4)sYw0v>?F7if60UR{oEb+vSO?jHr?NCzSXDF#rk28xOk z+ecCm$}`u7jnaumxi)Q!f2y!maG~YtUKR;3(mZ=o82=#RPfF_n!vjLVsKzV|7@Z+c zRx*`Vouw<1>`^LAd&{6hkcJq6{E}lt4?rMBOh=5EmbRv*ttoDR=!qO-M%tbV+pGC= zFhCr}%$Wt}fm5n&^&n6$0NFE9+@ImihBf^e-i?eDN1&8BJM9(hGEBOJvDKZBP2wKq z3a*!N|g zWbRCBzs{Gx6k1_zOdX9m5lH5p=|HhSc+1>X5G+v22Rn&icLl)$md@Or){pA=`~#%` z=8Wu-a>= z_UW`OwNU}R(Dt`fK%a*Sx-@doAX2tGvqEh~j)fB4If8Q4REW+o4#MOm^B>hNR0NeU|NuwEK}3oXAclg682K z0zCX*Dsdfz9ba%+(huB|98;0)4_m5^*CPpi0{10{s~Z7VR**#_l@@lICi?QnoMr285lt(Z5zp`BKZw+hG;+sN(IkEkszV;300?(}($x z&qAxhnlS!+;;#usRu2e%SB)Lnc@{$6cPwR<+mHmu!hOk(btfR;SRcW$K1f^Z($?Cv z^^WUUcOlbQpUz!x%SVphDctawYRJ&O7!dY46b$WZ-9zXlX<3-g=RWNx(pilUoS?iO zLQbc(*W%uB4qLRMWAh2ghIIB*`p3P1GdHAl#Lr4W+~^?QN5qXG#4k!g{MA_@#sR01>|oA%0y7;#UshLqz;49cVFcq5d$kY-yC>B<*9Ge+k7@LoCIeKH&(o zqni6XiW0%etpa!)iST6Hm+Z+;0Ro=iFVq0bjI#4fx=efDdlQz4r{~_jL9T8es)s%-_>GlH-HLA#HPzo+Z+@5R&72 z#UcIaAU#K zpTr!!^2mE{8sU4CGGi5Xa}*4XR6mkU@Kl0_CM#$6VDWAc^(HVzMK(d)pNMNz6q4t9 zF0Xvjk^hDA$qJ(!l%YlMPQMFqBetxGBAIjr4-)*wnjGt#SUa4X z!LD880s1{{1O%#@H0RlEr4ul#IGvs8tdW;6Yblt9~iV_uC0o{`YH-V-AI-dTU4Y z)@+59sj%8tSo^!ZwIMQ%gDUKdG6Mb!cCbds1m7ksqs{FPQUzTf3haotM~2r^x`=11 zSl@|OYYHHp?3(6G9Ov6>O9YlYD{*nJMEFb|a^ulpQQVRu&D$LH+piDbH| z?z1~P)SdAu|q4&Zfw@QkV0ROAz!uhK1i~&x+}M2+Wv5m;BZ-vMEEy^ zO7`zKAmHD9;op5KtRpI{UaoT+$T1oqDzbl9b!$wTU5EQa%@H88EP_6ZwO%hFmT%aR z!Q^OGHOV^k(d%VO6_8(Y6R>t4<(a<&X9O0heQ`m2KNoE(eOW(+b2QP z3t8t?WQP#98*$I8C?wB^S$XBpcjUWM{`}AY=j(3^d3SQ4>A%2{?@9R!g7xwSuEUY# zR0YhvflHaAH^o#1j_^yl1J_Vi>`0{RE+wpF;Hsv1=u$@!erRqh98G1X>b;^L($KL% ztK?pBJRs1quYmhqUSVBUVO>&T4R_t|1Y{bcE9}dZ5%6Eoc?L3btkd@0*!H7U33tR& zZTEG#eF;*%w!bP6>8_-$P6Ud1RYf5n&k4dnW5Pfu5ok;(F8hq=4T12hk-9pJ^*>@s zs>EAG^;D$Vm+LJsh-t%7!(hBU4T)$L2$kF{X9EJwG8xTsZG|BBCOq2q>~3 zASiOEh>GHYf}-Muc;LZ<%KNSE+S!@O4EoFS{`ug?)J}I-b)DVSJv}q`fXnE3JI9@4 z3XV$2*1Z3Mts5m<4}z_Q+4_QPeSVa)n~1Zm_-rL!y{yzUp_Bg$gfj65C5Ya+sg_0S zL!`YLU_};MwKs*z=1WnGMe9@)!YhDOXO+$b33$ch;C*Sfz9h={Ehr9bYa|brq&7p} zOVPL3r!n{@?ae~F+$V_X+4vP%Vq@?&6oNrCs567}K>`du0|r-Q>&v4I-iKoJxa zC0HoI0}?z45Lk;qys*21e{cR!^NJTUUhnS2_`_6bUPA_+%?9(v1Dz{yVGJ?rK!k_v zeW|%CN!%sC53b9OJd3XYufe0Bn4D;osu@#JUFgeMUmIa5A*{DfEs`p{0P7-4hZ}3- zKSuZ)vn}7+39QKmGLF$%kT=&xew>guTak^Ai$UvUqSb?)W;ouS8TiO4N zeB>jFN@H-Ur$s+Au^srfN-Z_#AXDE-)DLC{R+}U4)9m19vdDj`%x=&aS}*sr?BF4apf~9<4nOwbNA5lm}tJVSDT+>5kYOT)Zen?|~MvZ==%0u`?d$6Aa0(=P&csfaDJe}yAl$_e} z-1?EUz|UlVevjEzre2jYW=KU+<&G z>AFYPRb4-st^XNKwmqm1B z&Qck*`}R@a8M^f$;QA1i9zT@WGWJ@L7YP<(%$W2Tk&H=y&B@eh-be;*ctT)Sba`Jx zlZHVQ-%*c|I)z+@52b*fICqzdAGuk2Pq%NEqEl1ohmX@{f@ZL-jv+Rr2gAf= zHgRbgVhvSch&_dZXvEfuMHxzwvtV@NLslfT_&U5oUx$w-R3U0E+nM~nEtNL64j1R5 z48sNDqRzubCy>B!(Fwyv2VHL;9Vl{849+_P1iI*v4&ZuUDzQtc`K}}&f8Ou zbQaDl_z*V7s=l}I-kzWln8?emwKUIkfhG>6N({7(E%8aGa(O)rOKhtYxXCIs){9u` zLyp@^5B4S<_N5Li9QM_N{cIfejdB>XbIgKxL91Z3KT*0+cVG|;Gxmgw&?a)BkbvZr z>o~k>rb?(XDd!?V>0+W}^#$A@8-qNswl551$?|~{9QcoX;bKM^L?{WnoT@N4-S?^hKUF1kz8Tom;z0K;$X~J=gB#j2&D`mrC2;6rbknX zDElGD;8kkx?zP=v2(v$w*dL+~jmsUZ2QMLa7><&mUi=t=AGt&IptQ)PxI*D&0D<9B zR}4>K!FJRQXtSa~IMP^9b8{r#aS*-= zrsR$T9VVbX2MnwBaix$s97h}$k|SNE2MfrNN>DP?8yrf%$J1}TM_3Q`r^|9&lEm^( zQ4SSdOZZ}hs^Cg_WM5QP61o<|?>f(7H-H3Yu`H=wE~z!R7!c~8;OlZQ{N55a6&_KEZEGHI?s?}lu-7Kr0lyvEjYs(b^jNF zx7Z2JC4#pQ>3fM$%Nsz-I0c^q1$;oyGb07Oi3}}TZVH2{K(>iX8*o)jE_9CAH$;ka^ zzQx#WTvD6EwZ!2PJ+RQVZ^5nbo`2r=3)J^QOW#k32_QmpTGlF(L+Ple=zylk^+2v= zpA9G!i@S~Z5qv@qERc>WlKb2z_26<@WaL9n>X8Mc&WKQIa?VqNvCY6n7h3=De|yasZR^nEA`;B zHm+AjxsEwca?UEj`VQcO%q}8hzNHpe?Zo<;+N{3@%-|ZG4Q6M3wVCzT(G;vds|QyR z>u*w@_v(SU(Up3TZfHxxLv0`USRL}W2m#?q|H!9|31AQPQdg&Ws}{1s9)`xh@wj(@ z9Jv#IEE7oM$kDr0elN=B(#GVp_*^km?4!~-*0Jw>lws^ceVxa?{UCv{ZxhD87j=ET zuCLSewb8NfV^qQrp8y25>XG%}DSDQ`(BA>7d_|9J6%5nZVVyt^h=k*SNH{*Fww9?c zh83GLVpHEb(2V96owv)-6I0)2@{i9zEx6q_^~DHM$|ukHxDecFC-^xL+^Gk)n5BvF zWfCz)+ZbfOB-vh)B<1k1OAo%Liy~uq*ri8a62rq5`incMN9|IQugKKf!u(!4^FI*tdv&pT`w_o$-_?VXBOlnSk|3jp- zAdu=Dy9(YMgV_BHv3pS0KhgF5y8dA_c2!gcK8HM%av0I7p%jdJB=AZQCqaDxYZ~(< zXCnK}ad?Dj%CYGX=^-AN!6UXb=CBj;(b~wT5%N(zB0C{THtHx7c#Do>A_!g zQDnsRF+K9Ni0f};T>q*EzU3nHz_(StGL@*}PW#kmK1uQyJ@_l}*o->+Tn}uHPIE%RJFW;fdLt;RaJ0|jw!JlGaIGZS$bBjo< zwSv*)UfOj2s1q`y%xw0~f3YOzkR*T6X!nO6{FC(B3MG+Gz=Lh7ZB6A;9VT~9 zB7EU9J}aKFQ|*u8N$dD>l#un{oumpbaa54f#8#ch zhD?ya*pL|NqbG#)`XN0oq*ZAi8q$&YY4O54 zx&SB8NK%qR!r7tVIU!MGj5243B8@_{xNs6TIj1G5^n4=JkQ-94h>^ymVVa*mr2p~N6OzO6il+o-zF-5%wNo-i7!O=_j-^5EXh=?wRtoVnlwqw+sPJA{dP`!5~uzU zMwX;d&`0|2jS^CZOaX*f_eD`8feaOUPPHGEdEkfU6reu}5#~UubC_QR5(x9I2=gu> zy>m$K6w*6{^!Cw6FF-xG94$d1Kp+o7S#p9RSy@b#y+V;r;8JAy>ryChSeHVh7rmq| z(3dx@4&x|Fpj!yLW5&7L4(1T+Yf{?&;1{oY28c3x1;Lt>BX*oDFkYqOw4&_r@^TDC^+^fSxOq^W@dgL;4AQTFkgd(xe za07k>2ZRj9aTfvsx;vxo%wCUYM5mg;LXMk>tvr{e{18@v?rnD=R}`5-PvX?7?}%g; zn(*x-z6+ z5z;RU=_8^cbT=wtwR5H1j=^b_G<)0wO}Iuy-0 z3yfbQ++ExlGad%PNRcqQR98~Y_}bk*LfwwHjtzlAc2tYN<+YI?CFJsu^`J;sAk#q+ z*)=qW<-wR}3`7czUnb%aDG%DxyHKtb@wL>>KHeZ23bbQCA3~ZjdSH)!jM%9RMXrF* zw$nq8qe^PQWUnVsC?a4vAzo`nG;q)&_n!dg_q$zG6Podgkpz%6VUnEsdeivqV=E`hRMw%tH&?+8V%hk9zw zFfUT&U7^Sw>@XM~G4kybpF*P(7xKi`MoDQiHJ%cROhV(o3pClrDbThMmFb~C4&0qy zWx1C|OW8k~zd`T$lebT|Qo|XcK$pL3_%bz|846tB-cWwSZW}ecCFFLrYNp|&6CojT z1~5`(#~9^3LV1jG)+M3fqvQ@B)Z+K?Q1A&GzmMDaT_*Vb2&n92 zQXF(Hw>SRJu^5>`>M*`p@-Z=Wdnj@j97?7Ql=-|)-)mZc_{Sg0oeof|Ic|yI?M{i{ zL1K9hhmnknr-Uq@p#mg7Cz6&EaQ#L|)9S9)G3YGYh_E);y;7U$2|;(V=$jXy{V^SI<3 z^u{4F3kxqW3x5&|FIfH3*;3AQ)-j#Gh|W41!JZEV*OHPIyj0Rw=V4#YMjJsnY5pUEULv?r%q?~FU9_J3eMp6G72v%keg@c+Pm0ukIIr$({wC)iIUrf(qA#FlmqP=@Rk^>xl( zn}P(g*PX~-w}e>u7fez7C%`KGYZNrQp-a>|T4lIFe5BZdFI%5}U`E+7) zyOqr|sO)7qn;55?&O{-22U4ARKL;eh`#a$Mt&sj^l<}4*wyrteLf_Hk8GQ4~qZQia z?j@$%;8)~L8-qzG1cPW$X9hcg1Q`4r41N~U4~FzlLi+wFn>naN-<>7s0uVU}7Hn&v z3s7#^0}6b}>%33U*w~@{hL;a=x$^}Hl?Tk=H=)4SZV4<+cOEg(?3bduB+TY#5qc1t zU!(Z}?1ak1;Arix={+{VqoK%`yKZw>v$m`z(4@&>ibuc5KDK9 zgvUd<{~_#rqH{bH`IXky#`B&YU(N~9%^;#?&NoaA@yuFP;17GkaSGun;TQ~pvgb?i zOFXEVR&rw!wGCyc)s<1)hdD-<{^#{s#&domPM!lKAXkxzyq zhefoJF_UxDFlqJ*AhVT>TE3y?`T?EalH!M{* zilp&|BflF)>k=n89ZeMpVenjtUxBa8(w-I$CWb|kA?<15$X6t7L~tvtpPbV`P$~vK z$c!a2T{#CDPCK3r>2uPHZQj&~85>9aHwrr|i$$?~%SZN48N4PQz-<`DcE4CI8NL{w z5Rs*{wrL>h+QC=JnM%;z(E7QF;a~%j`D$F|)}vqJiI1lAs|>%apBR$iW;3J{Z!&7w zkWi8(ewwkw<MkM zcwV($I1m@6hdZ0&jfhBeyCw*zb!{3R5EML3q=s?1N;s$zW7p9o9YUW(q<*3y;NSQa zJcBB4z%O$68vy}o0IU&nRyf$g7BOdq4OLRaoGrX(sw6O-2n=WMp_dc}&WyEoel4Lz z$t_vQGe9TUGW-un(ao6XiwG^GS~01aM5@(4Aw{>P97(liQuh+6*5SZ8r1EA8o*#D? zPrlJDdO&U-=|!T&1C1wlpngq|1HJ1%ji{f&i#@AvR~(V z(v__D2r2`j?9Gp{*M!+qqILJh>RQ`ap*rCIKMo3y5q&Y4KaO8mqWlyJ{1`ePE4bXiATao!%#@Tn>=tR8%BDD^M2{-8_R|fg=s&1Mjy}CM!{(roj9ha_!PTNwAqPl91$Ms;cQhTLxj^QgSB;2;n+V6F%S~ zyfG=Keb}wNIG#hZ|37R`BZ(7z8ql{8U*@$m^)7cs(!rpS_ns#mMl6#;|YfP07y*m&wsivBurW`2*UGcy(=ceWe(4G;--4m;6_btztXYN3;Br?Z>r#V?oz#tAGzm;gYAWby^E__ZY{U2Eu40>_wXL| z&^2s1!9zCnh=)`yxEI)Q_Yv*|wQ*|{dZ9Hk(})GXn;rjs!tYiaU#pGV-H!Vq;dZx$ zV_rDe!xoNt)^O}8wDl2?1MMV98OXiD!QNp}WCU`raHL%{kcC9aIei57$AsNC97x3I zhUe94X4BnA(KH(wh+?EI2g|$1D{+^_js?31f*jbQugv;{I_Mt`q$O>H5|x^s*m8^X z4Wlzl2M13cMF(DTqXE%%z(GQ_9O~{L294SZz0j`EPk|Y{kf!b4;b0$fwa-uj&+8Em z_N2>0bm0%CG$je6qR89M`|-7>~i-_IzKH12TEZerqkU% zGvS{=F){+pW1AOOK)|PMoM@5aU zqS%^+6+nw(Uk+A^>oR5&W(*Bda7MUBSpxQASo1BhQ2*PYLPa@vn$CHoqcX{k#U1=z1*xH;8Ujtr1hk zIzql4Lqd<_nh7v6;*G|ct7u`(0|nx0hoBWf+t}FpG>NnxMPkx_5kG=!!hvVQfmLA; z6i5cXWD2QGQ|79qob`gj zOGF_`I!_#ho1bAKNrU8k+;glqa$ZI|@t4A83$Sd`Y(Q1T(S^W+vG|_&Q2zheXg@X~&(hi9f$V%b^ch8}K!l{VDiS8)u5GIpq-ibF z+rz;fVU$F+u`p5IO%@Jrk5!X_d^tO1{sm%@tqA_8@5X4<_T61E8qyN4hcQ;n&&Yj+ zT;>yy3hoNSiFSm8JE`O#N{pF1+U!#lLRCOvRcQ};(Dri_5A>+H2}z2oHdIx$Q-U(8 zPkF`of+}UENAY;Q3bHp9*_*0%KvmE3>N3=5qDED!Rkb}zhg4ORl#Puds7j6Bt0)aM zRqKMvyo#}G2ZEBn zUZ|?gUk{YJ@Q40}8~qJIyFsPpg(YQU%A>vd74c+~st$JVHQ%wETI}3PRTsH-@q~fA z)V0l1Mw?}>ZB`m>R@7#qc~obET0~uLU<+l`Wy-8LwsoGWUWAfMO(jCM;ReDGfiRO0 zXzb~ZSQZGe5`pluf$#&W2Nq1K9TnfB0#RX7c>AcruRbTr-`I0pu!~VKq@vJ-O@o%` zyGc?MyJ3=2K;xn0wMx{UZqzn)sBK}?o{^+XEGV@oLeIUwA>Y`s;Yhu?1C!jR!(Ucs8(R&qZ#UVpEAKbH;MMz zuRdi^Y4zBWGQ!|lt20s3j{B6nvZ~^Wl5*h*Tt`?9J^0UC&*M3rg=)@1HDjTg`Y}AI z9<`A_NzsIg68)!QI>E10mS9$m`a?|%?9LOH^scCYRXp&r9;G-G z+4ZteEi-I(jUlar%}U&CHrCZ<#ZERW^ed$N{4qld5Njq27dRSol&dkT4Q`!{S#CGx z1i#X&q@uX6s=Q+IpmLEza4@ObwP3Znq5|$}uc_JMALy^F5c?Nil=JFy)grig)jn;loO z_p&?gZiA86;0D&YNp`%`uk`QPb9iw@Wl4FNecJtj&3KgI_Y99P{Ep$b48LLcwS=Cp z7#`;GF90kDxvxzc$U7h&&^lfjako_YNfBd<7le4Tr{L=AN!S|1;|;H z>Ey&3mZ5%C`^c{pj;jz!FVDPv#jLy^-S!+;P*!PbEk?q>ScE@Wgg*=sjyv-6n_ro1 z(zUAo0+%%vP)epXPL^3rBZdtbHei@2p&FkY)mL1y5ke-X_9QzxwVGUe##Pmmu9`|n zc2WwQ{cQ9vgX&E5ZyDT9w|6alu3574R7GhZh)HK}W5<=w-pUnM>&%Mjz_2aD5GyLn zP*g^;%V->kY0&0asgCMOcHu_V^yJvgO-|&;E{2v(g{9>c1!YzF6-9E@$sXpTRS3e!Bz`Fi7 z>-u`u^<=4Q?K)YnmK!=Rb@QaFW5%#~(l|%Wk8$A&6D{i`Hf!5WF(FwgpfsD;U#6Ka zPk5DBFWkkl-N~}u!Lr@Xel!a*$@RjF80#iKn&zy{DUQ?+M|cIIzQR)!apR*UT& zjs?jzY`MU2jCpp)m}_T8I>y~D9fR1zhGRTv$CZw;&=uG70xNGVEAM$$-gE32tJyK0 zG#uk`H^*2S)2_`imN=?%u?ttK_EfSmF&au@czN3HDJ$&CUj9!!Wj71^8VkFNh26=X zvd!?6tua|lp7N5jdN(gFk`=XH}RFc87o`wZ9FYj>Tu?fgmC+2g_q zh<#$X&PR4!={g^{;%Y}(n@8A1zA{|o3pW=z6jQ6sMLu=Z;Q^Q4Rqbo)Vl3yh99@(s zL8cRif_{&6XR_k2&XOK;#iY;f6CQ?#d6Ng41CKHE5 zJFYZQf-A0;ogy=>Oojo5X$(_ROpE?xE^H&A+5#QRboGoBm#m^W#B*NSG)-|z!Wz4< zs%kA$l<}q2rUCw8Y}Q}{E=3tyJjuMlL>s|KCN5wmJAp|#xSto}#boSu&N^%B$X>{m zy&Pxux}+$yCu!V)QMFu0|qeukg)w);s>JKxez@?1EC+h1Z3%eUi7 zKN;wPt7=1>q=S-2vXZYblzeH5^I~gw$|)9GmF!p(7?v^Fu^=lQtjNv5M#qe58!)bN zwBWy7Wh_Zi1{9a&kCAIdBTZAaaVbiVlCtO$l82JPVnY%tn997~Y^dOd7)vHUyWUyn zlN`C6=*ne{8#6HQ?S_GGwR_7g_THtp%y8}Jj#KnAAN|MyXRe*Bbfmjo$UtA8`GQ+L# z&+@WjxRpoS!etv7zQ}OBdC-e+;qwevGhE5=X$jTEhOa*4=Bp3H9K+_T_d9yQeJ*NL zwdIhadi?mwrq#HrJ?a#s$d$lOVMWOV?CBR3%PrNZ%mqbKlqWm!p~ zXk28BQzFY+W~$=b)D#Y)?n!Gmz?^Q{S9mN%$*U|ZDKWNm4ZKGj$G+%Zzt%iePEgGl zHf7j^VPl4k7&c&-$nZ3V2@K;I)|b%ZVx~03_(A7z z_{7n=`(3U3rL!TA+U62X`yoZ?Q&L)r)%4VQuxKyk5hY%!iQpCWs;YgLqLdbkO$j+< zVU7AtiZY^vY-((S`!QLn+V`UAs4;@psDjdxv1PQ8Z*hwwvW=)LF0xd8A& zpTazY*`M+m4op2=(KL_uBEIgI+8m1Zc>3^lZ+Wftz(=3y_Fi6UQ!yrWll5vBup_6w zoK%XcixbJb1PRORC0>-rXqA206U@f0@#ckndrf>gSNR$Ne_OeY@` z$5o~v^}-#h^HXbW^w1qT)!Uy~E*o1~EJ*e#nFNP1jRxKeE%mhfNB2r`#|-u;Vg(g4 z94(=C6(BZH)hi9fTpp9(6oZ#KJH~KFl?-)N$-f|5b;U$;tdKq$V%{jQaBq@Hto=T6SUV_okRizALV|Qq{^MVM^fcZ-r`g-%WDsD{R0daFh6q)e(rFKg4<$VV4GBL zbu{@cuIjqaH40R1zA&UIjh_eNro6tsc6aKaf{KFil|3d8ojd_c=(2!#moDQp3SU}O{}+#thX0gZyUINJ;N6mu9Z+- zY3Of7OiiX>S?=so%N#ZLxU1&YfH+GMTk6!;o~xyj7EsA3sN{K4$!e<#Rqa`4|B<>- zcNl@NO&G%@#>;jwWK?Z&VHi>Mwn6MoJFbkXH(YR4?H$*s`iiyx1#AC+q5b`C-uq$9 zEH>|b-_Zu|xw7@C@LsG^ilZmSco?TsOR9D-RjI;BvdXFg96}Kzc>}oHET!f%+$zV2 zaGZHQ2A<_K_+yMUld6w8tLum(x8J&Q`->P}oLT+t)U2wWv}i`5q}eixzwF#eNBF~q z4>&?1h{?4~e3~sAk&aL=%`F?zlG0>u+L~cYhG#Q8OG5Pw^daZ+W@#>Sc@s$DJeN00 zbDGN=xNxOvXQnCRar}q|lpJZ{LIfNv+@85=$M9T+Z5f6oRI?3kgE6K|9+2*=r!+@C zQ(XDf1)s4@v`BENb~TKfYd3C=y<=(IjxJrmxV;VI_ORnh<92t&)h4o9su)&C=qYDd z#&A5tQVF$d(o749tGTcwP0oAc(&W51HcifZMO=Rs!+$XxDWRHg*kXX2=Uf;wl5GU( z=V*~WE+VVi6=})<9MZuUfg=$mRdiE4cDG8^hNmg9V>&Vs#FAoYl&^lp1>&}zY2#!N zOzf~_Hv)WFC|?ehl@;ND$heZq=&@K6nZaqb(o9tw24-Wc8?getBu%-bxX@mDSsD&& z;Gmf+`5|e_#nt2U$BZZ(ha}f5@ufh;f#qv#>m@lKX>+BGJaZV{#qdsscSxw+&bGge zZ9kiBKa1;ckx-pt*!rfJNlkHggR=`??`Y*ou2!C5H>22roSvpg1JcnNixQ?f8*!#E zqLC1ZGbRrivAfV7y9?~h%h;Xo!X{$(34_>DJFbk~C9b&Ib8Lb&tm4(I;+2MqSEMrA}OEg5_)aazD z{=Fz#8HF5$j#9p1byih-Ee&@KkO;-5AD`F=*#&2(vt|uXe{$ zwdT+nih?9|cbamwX&pfBK(XLW42ayoo4~N1gdT4|?sIwqa-UNRh?&5vaQ#Wv)L*R0 zKUtH1NKLB08=Cti#*`uO2Xs$F{n;LUKRPPy=&6l+iTONL%4Smj(ekoNW}4;hF`M3gbpE1}YG~ zQYuQjf)#c-!(pu0p{&>;vO~`$TtArM#S&`08TR7xo_yUMkPd2Hz}H8{5Gv#_wopn7(2mo9VM9%^ zCIVdZ1(g0}Ze64VoZ?o~vI5G$0z4yylVlX2{p3peVyt}PRV@h3Abe}hY{>zoCpef; zUQ$+7sl+6q2v$9P(Uplgu~F*jheG?^J5QegEgVMJ8jC1cDedQdMncb1?4--tNuQKX zsx4#VKhEtQW4M&zqYRfYe1zd*h7U7b#PA^rwFmk70fq}1-p_CW!}}P{XE=}Hy$t6{ zsNKVG4#T?`-ofxThPN`D#c&40selw*H#59};bd8_mcY;DN@+~YosAJeRf~kGNz&sM>f}zpOyl<&{+f2lX}?T8y{a1XNWNJJpnn2rwbY zIGQN?H8}^b)jDGoejZdzgRZKs zv8z~SYO7q731V9fVw>%_GE>{=itG7O8eaQ?r;E>dx;Vsv@fnwY%H;>S{D8#se9ZX! zO{1pgBQAWOk@qq3dyM=p*YA~3-D7y&8_-7YG7Ka%)ti!$*HCVZdFG0p0mm$5yQ4#H z!+>*&Eah!6ei|vYs=ejpJ(~6o1|i36gj0_{q*&e)4F4mc=XV}_e&fOCS60U_tfphE zrk`cG`aRSlC!KF&JsOcGQ;n}31wDLfL4UGpSxyX9s`i6WfZ@5S_M`NA-ZRDKx~d%& z-fbueBEz4x?&)$T<^l;lT^V*^n9KDY7@o(l9mBQ~dcu624M^iuCSL~`W-v@=7+{#j zFqL5n!(@hjhDi+DFl?P}n(SL~;W-S?Vt59_<`Sy))1!l=H{B%}(9+$K0VUlj8TiX3 zLXm-`^OPSAi`WLXsx?e^%M=o#Xhzh;=2ul~B=8&)gT!>V#2`NX6p2AouB^?arZq`F zMRL#>nsQ1GPD?*ka?mloR&s#59E;dc4@u~GfUg(w^#Z=WkFV$P^}T#Om#^>U>$~{+ zPQJc_uW#e)TN%z`cnias3}-N$&TtyTsSKw`sMYZG%?xj1cq79b82+2#^$aI7oW$@t z3AKp~s~A=?yp~}(!|@DD8I~{{14z+V$nYwLS4yZ3Fan@|%+F0(Lf>@9o!s7zuHQ4= zEf2oDmJgdVg)7qCa)`_9j%r4`*ww#>fNPfoV=$_m6O2J3l1zz&OfW`B=1k=>!5Ah& z!70HQ=okm4v_ULv&DXR?14GDTj7x!TNh6lnZ6MQ##V*gxE_bt!rc3-IT>q_v>gR^GK6MHunZjeM z=YT`N7?mG8D*7WwMStL;XifVfT^UVTpLG%slOVlWuG}@?w~xk`|jv2F|m`nl|*x zRLGj$BSuQo{&8=Lp*>h?^#FF zD)At+s-2Z#WDznc!!|o5T$lX@Wb<^e`#H$e`&eWzdW7U|8m$b zJ94`Y-0nQ~!}eU?PC_+gNS6hU#IX!(dLGPh3dVFtRiwG900PmrQu;ma8(kbl z$g?0^7%lE$Deeb8qnkpeI8n7h8E)xfeul$VE}q?rb}-P=L4On*J6on6ViO+xdMc}a z3d0(PH#5A6;f)M$VEAu_*E5{Va1z7oBvh*mQ(kK@&-)x=T35>*%{AWDT-6|Ba$nj? zK$^N#cISOW4ldrseEqN-T)d0;`XL^47Gki$80EQN4mO?zvfgta!}$#7NvPe+VLg|_ z`W_k9>K%r7vz^78l_Af_7z=DU4yiL8#h&ge_8bwQ^lZ1|uyz;1A!>Ya^XpE~w-nqR zi*Vykz$kJ03nO!!7PsV-!{1KU!w%NVcD{a<;Wi1quW$zgPXbiCWads zzQ}L`!wAE*toP?x@6WN`pE30Ql(XKS%%Jo#Heq>iHkh{e)h8Sk|Cp=dpS3Dd(^h7f zrd_95cNH{k-369YVsr-7ng(TN*MwnXhK(3DWY~aVqJ*B)_&R~F>+^LzzV`C9hp$z> zR`~iaR_dP&PcZxs!{ZEpXZRb#Um5Ch(RzP|f`L~C z6>g%*)yiklw#J|@+P(*wj6vVLhWaYQ{k;w!g8y0_d~FN}_Ln_;9_`wg4n)`cP#l{M z%zYoUI;a3t`8Ffa`W^TERY94gX=dg@Q zHHi7`xN;el+hCLW|W7t(fwJms++x>db zC3ne!Mw|~u1%pnRZn}$fs@5UslDl+@Rv3=$rw6**2W_vWF>;rjD1zbJ0^z)9vEjy| z_+0R5xN$7U$CF?|x7?+3&@p%E812AtR?$H_6vv!3)sbtEGMvG1I>TuUr!t(vu!iAH4FApW zdWMr3PLfc)%5bSGW1eFgKd*2Oipw0GX@sjYO)yMh8$YXDy{00HVz`+~ZdMR<96u|g ztqmU&txJLq<7auat>Jj0ZK2um%wt$}(0%+I3;u1Rm8wk)y1gvt+Gy8?ONy?GP#kkf zbKm1Z$~55{ z8`23qud!3^3dXkgJv+H@M^NsbY!AxalUIXs_vB@+-y)&9!SLjDZiD06n2XyMcF#Hb z^J*8?HSHzH+H;6J7+g=T=C8#87aYOZ1pl8sxXmG+>aDCfPH4oqRb z*V%S&JE~=mi&|7|zYsFIErMHAAEP(%9uu(vA!h^>e<;N)5>*cBYUt5Chg?*wc|Hp& z73JksQb~TPB>G-B_EOZJ4R`#(?%UtnWt6`CovSp*K%p=i+^SMThC~;C8C{&PQQ=xJwJ)-TQfX|VGD+5GCZAOGYQqx zGNb83{Y;niAuiJ`eeh&Dr4MSRb7G}xO)}|~6UK5-20?>NrO@W{s@4>gEs>E3)Z((D z@`^sC@)c-Ccr?mXCR7yTrIFJ1K56@Dw2!7~jlm1v(CSo)TW=7oSMkJ>LOjwLeYq=> zrO?tmshQ3Zt$6~O$|a8Org_pb5ySE=J#s8yj(*3^0bb1HxkPH-GnnBZhWQd|{n^6( z*us6;!hN{DH^Uwb^B8uQQ0;73v}4S0rm#K_LOHB{+Bw>?t*b3B5Ee4RTGP%yl^wdC z$`0MYr^A4dn<>V{&}yM-<~wT0A?(4f2}a~U`zHvyDn31cu&lf z8{U2uygTS6yk)KW)Zx!Q$gRjbN$-yp9xJE;+U5c6qf|0#yc7%pY_ z2*X7ZY7cVUJiu|YkmF_n*WW9lI>!+E4mYuHi}7U332t?i{1#Wq?-5aAI*u`ye9!*e z_uZLvKwwDmwWh)GZoaMY5YaY!&|J9#xrxQvD52*?zTUvs5x!n0p}N)(drc+|0Ls^W zuvNutK-5)^vaNKHO|Fb!r}wzScNy+w_zuIj8NMZ<_9okDH{0nAw$tmfUfp3Zx-Dh~ zQwYB7957oPx!>%<6QkVd6tOk8+rJ--R0_5MLX_ zzO>`Y0pW93T*4eJ4PIjJTn00XJ9bwkTAlB24E5j_$6<4cd zjg4n`4Z|@E3mFzL9Lex<3Drvs4d=VL!N8d6Z4=K$j(YCz!Y$r5By?q@+7IA%JHF|_ zuG~YsM3^UARl77x$s5wMfB)!nV+NM^nuRu;v4#~Ik9J{Q3KzPK1)RES%H4fgv||Zfk`W9|O9tn`FXZd@$u?MBQZW?$Br9?m!zY-prQl0G zc>9Q*4e8AfyRz|^OIKUCi_HvQWVoJTL_+m>!^)jdEV{f zh;KTw4F~v|nLW(#3xo&qrK&{>_%0fBMekKgph_FT*~}c5jxo7t7j{W$nTBc@nB!4Y6`#+?#wS$Jq)U9R)hiRiN&6 zfi7?nNWH{xfPA|*4Yczjz3C#CUg1rbgP0ugN7!+tHw|;e)hbw1@wldM|6f5QQH;s9k%5Vzvc9X%|zhf+zOg-6I zMb|lURqe{v&8Vr(m3oI^*V%Tv&a!tb?K;z?3)pp@Vb^=?xYDk3+;JZ=7+Gj%WPzQS zWMsZOu_p{-OYOLlktMFU+6ieF&wtoX$2nww=aBtPhOGCeY_Wk=??>4#?g!Z}?x<`R z_q}WvcZBP|lF<8Qw%F*Z_XU?9V!Y27?^DJ*$n^&pe$4nEN_@}0Y#y=<`&=6P4v zd)|>ydyDzr!+gKVL(Ohepm^Tk#;GgBwZw;v0T9~w=cw&!=;sU&of!-JwX@@FL*oGupV}xJIlep2Lt3?I)JY7K-OwS7+CLgiaj%+7BjdZ+TL^4U{SL+P&vN z)~m*Slx=^}Q^R^{z0b21e4j>g?N_=tj8o$dgKyhzTElvDy6k6gCcpPr>u{|&E)uUt zr}#MCW%Bdrwz*%`U6$l09S!!UtHBa3ZV0G*imb%%MFpRE~od9E~j^0 zm(zO|*Jm=!V3@+t&oD_s^-KsWU8}j9uuUPX^Gx4Zcbe%N>dpy|sFzSjP6y&6-teG3#4YfS4qu!M@h|k|HbuJGQ5J} z862GppP|blG$W?3yT@i~<-u|VR^5Gkq4u+=p2XwZZ?R@x3EbL8t z+g;#YZo@&YUTZi|Js0XqUSU;rK`GEoi(wi-=#VI#k{_=B-Du$*rW;3I<$zYzFb-2{ zxe?-}ZeD-2J;cYkh4>f;<=|0j*C?0(LiFlG+~PK(o1XT>if9(w=oW@E*gQ8HQF?tW z7){yCBxu6nzTHGe&Z=BFyU8^^Z*~sHDXyY;*02bx*gclH#ALII;&4cex z-1sQNBND2I45b}(bL~%J+O)a$en-`P=&HJ}t*X3iNGrucm#a<9Hhq zNP7ON((zfZ&z-gZoh}~fG!1+5sma6cLGTUa#K%mDA#31#=^6t_lKj$InlB`iq@<8c zlG=o1lGK{(TXOw5Tz@v#x8V9S8J^CtxrAziP&8>u2pPGN$*b#!9Ean$kW;$k3Av?9 zjnLjST4-9s(BEmkamX=kY8rCVyx3D2%CZe+IDlb)hJ7VeFEC{85^~9kJ3|@7uW=%x zQ^+MN?%=42_O6=f9um`dzk;$NdK-6a-lPvvs#>p*+ezO%XMJ=FIWJvWP`0D>G#i!D z2JDB@k)MGO{1giZPbI7DT88Be$1}W|;W!D^s|=N1>88>vVyxKW{4z%sj&N0Bp&_z; zRitWTLT-6^k*j7$hg>u9f{MT5 zUowome=RNAtL>uu~ovgmeze>h!Qv9+wt&%j3>Pd&_7ThFa}A z0Mgd&!uG8YSUHCbvtt3hd9MZbLh(}Z&CowqC)fv3E% z9SV8nG&Gpnm{YZUyQp#?8t5w2u&|O}TI3?eh%hB&j+Gd~iok}vQB`2?RSsdJTzUm= zDRAXjdUe=%+XL@at)RUj9HUkz7>&x@8&w&ND$t$7cj_rwVTaiyp=Ui`N2G&k>!gEe zYgoZggQna~eafX{Y@3Ib3Ff!l?hxDM&p;EU)p(DxX&QV*)T|0Cd3g0|MF~C)A4_}* zORi6`-r2=$?PRugFk9QD->a{HEot|yc2SQAovGS32d=O_XrP=X(s@NmteL5tamMh~ zU;CH5*8Rd4ikIXL?7Z}SO;MD>+>u4)*HqIjg<@ZIS&^@}q^z>4xU{soY;1Aa$ja-h zueq*m+qNT%OK@52D=MfeE6pdDXtbayus_%B+Exz0Q5BV1R-t&Fu`_p%a|Amz2Qn#k; zPT8LFTFQGV`%~^oeLVHO)NfJ`roNQ+S?Y$gr_!ED+myB|?Sb?a>6_F4N`EDNRmKPD zpQX>sSd=j*I4^il@R8u6;N!tZgS&$72R{ma68tpyS@3Z1o6Mt`-(~)sxh}LJ^kQgp z=+)59(4NrV(5In8p@rdx!b`(Xh93_<9eyUfD*R%2bNJ=(tKse8*TOaLs*2)i*4*b$ zPU)UEp{jaX{NngW;vbEFDSk`*5Anz1e~GX0P4P|jP4mrwFtdEKA=Dh-T;F`(0^b9^ zhkT15+#|lFz9)RkeNX$I^{w$e?_1|v@7v(pvTvtvmv6UkkMAwt+fc*@ zz7KteeP8*$fl7XcQfByX^WWjW%Rkq@$iLM8nEz@29{*eZxBb8Rrzbz0yfS%J^2X#X z$*&}DOWu`yEO}bW3n}YTwnBkBpu*iLdxRQ~rTmg|cj`Tg)Rn2LQ=dy+ml{cZBlYdnccAutsUM{tfa*U@{VerR>gTD4VTkWj ze@{K0Iwfst+O27`VU86r$eOh0($=L#(l(@RgmGR<+m^NiCVD4rZ`zTxU(;?4+!nYa zaBtwr!1BP;foB4n0-FO{0$T&G2i^$09e5{jd-?K6^ykwzq`wG5zmmQ!eOLPX=^vzjl>Tx0C+P=Z@-Nd5r~j0GEd7`C6L5r+aDn+5 z3o;&nBP`BXlJQu^;~C2`p3HbE{3uV!q|cs*lx#@iWxW}M8Z z2~G*l4BisFEqHryPVjEH&s;dseZl*K3xf{?AA&1A42N0*cUlUkS{7U$d@A^K@R{JM z;QHW(;Ktx4xY_H$cY=F^``~ULz~T18q==VU&T`Do@- znQvu&n)zAg7nxsXev|nvobqVqk8sT2GLL7T$owO7YSy%@nOV1F&C0qpYhl&{Sr27B zn)O)LrmW3bJF*UCy_&r}``zsKvOmh+pZ#t2k?f<{KW6`&{Y&<5*~ha_WdE6cGJA@C ztNx50(O=TH>96YRLJ{Hc8{zUVg|>!X4!siE2It=n_umzIJ@iIscj!$7!dnQ1cSG-m z-Vc2c`Y`lSXn*MA&?lh-p@SkoJ`a5vIvn~c^mXXl(08HlLq|hDhJFhD9Qq~nYv}jT z@z9CTAECcOCqq-hQ^V84Gs3roXN7MK&ko-fz9W2R_^$Ar@IB$V;d$Zt;RWIQ!wbU? zAmAPjFAgsWKZ?M641xD#_$d*5D-nKc!q0`D53dcs5MCEvAKrj)+=zhO65fiSd_{!i zj_^)|=Ih}%!n?z7h8uS;EFV81R8mwvak+BxB*IncKBl;!D%7?uVwX!oMYL|gmx}O@ zN#&s>`S8SU5zR5uWhouyuC zZlx$jJ2nK>u0X%nmeg(smFncLCD;PXP41aHa!^J2SbP#`eDTPEC508`mE~iqe8WpB zanH;*q^i28q#P!}{5rhn$k8QbBMaMwib_k9ec(dTtMCn_qLNZYAESU!FU$1Z+j;u# zEvIk#0*+<+uB<2=iK)DDe5g>-`&ORUwsS{CFDkE8^vg>WeS~tJqUVpr|D)R}dhdQH z9yk>3hT#9nir%OEzwI7MklDlVp0%@wOE`Ow{FRTs8a)<83u7sTUQDaVisA|76;-)N zN5&&TYdX_&?$zzolYXeH9pbf#Qd2%rZ3W+HF}z{T$&)Q=;;f#@o->E!e_*G)fu@A&x(S}ouEWV7{k>#CB~bj4lo z_tf{c`|IHT8Q(4M_(|htr+e$f`b2zjWsGF;b?wr>+IT94mLF74F2A{IXR}D%SS+ll zGH5OzG1|YZ+f9uwzT?gM-hID(*KA$gXjWDs)P*8%8a`p}7r&1^s$DeW{->7=(VDeO zsFUE8*G;H^G>WbpucKo~9 zj}x0UXfM^Z-2&bYu5b!TeGiQ z*Gcd~$_fOoKrb_sR+5u$fX=P};4-#Ddc5;%*)ADi!=0)2%~A0d_39rRL>zr}qVT)z*t2 zqmzff(gQ1srra5$*RT7<124WXuh+mn-Me+Twz{AQs6@n#(pi$yTtTVPSxL$$%)Q;PQs;Phmi*QY2o-9-{yQ_upxBgpQPcQjFzMm~G{5qKp5w)o;S!s#J#`kam5 zt&r`X4IK5XB(+h3Uv!gKRZ!LrAA$A6BbBMqW$VM|;P*JR&gs`gQyQJ_SB91kiE2if zS|1q?8Z^c(6F}=$__Gy_E74d@@N13QPb^2g98b&Ve4BnrN|sno0o${^80f4|bRw7e3ZW244H%LU3z zm3APNnk;gx{?bVQy+(zm?jkCMFDMOP*Ru zp7O$IT!6+k4?($}ddpg>-?Y?D_p7>Jo$c4|gmu1`o%QOGS0rD_EBuQ(Y$s_NUJ)7><9#jI=v1=36RO7H9CQ&ZTT(Wr9Juiy;Ke7SM$uf}@jPXgDp4|p0lgY( zib}?eiPkc~GevE@@{_Ocpiu+!d-WdByBA){2ib756enpE?^!@ZF9oHHIg_@s(Vt&n zCMw$!;bj;i3aUDuhp*_3#^DDgFJAeP2o4$4yJ!DC{VgOxHo1i|YTV=rCb?wDCo11J z0I{C^dk-iWjV>O*QYKOP!-q2A`dGSP5u2#|P9=SNVNqMt5S%6|$GAW`g;H~dC_U;! z8&M?gOi8g4m2aqVY#>o;jtim-TcVis4XV3g7<X<~(mz!Po&kN8ux5O3fWmL89`a zhrS0is!CC+z2CG{h&aBUUQjCU`%SIy#S&Vn*~993(AJH&0rZRK56Nbu$T_8UTXOT? z93=BDi#bP0Sqa`6gg(e5+k`(QDmAB7jmM=AG`!^?e_d_*&6)ns&N^!29mRe`ay9p^ zjP*Faq^ug>O5!dD2#1VUejs!A9yn;|WhU<-?L6ukk~b=^s;XirGL~WxtGSEVIwlDY zETFOJ^5Tkej3H9;LCo2i-iZaHO6k2*7_1;)qOzMjZOFMD#P_z(?HF~os(9sD>O>sN zFGkeLE`F~m)H6CJjYrHaQVsyDp%JdomSx}1G3uEvi|BC8D;{G-?fonUto%cu!1?|d8i|JmMR6qwo(VHF( z5_)Pt*0klma=c~_j8~o^@dp-HjVmuQ$=)5Eo}^AKv6JK_UlUeMR5p69E5s)+>B_Gu zPy17cOem=+fN)4HyfrV8Px+Oa4v40B#XHXANrttWFiWpSl^nB+-&=H!a$RAiMYtR( zTr2CKVsiXcCb(Y&pZr!1*r53(QTdn(`{iBSYd~+KY$x?>v2InOqDRNa@uQ>TBevr( z@}S@G*Nhz>9R+!eOy^Epd9lq>R!;h;@-{|Wqh-`P<*4V4LmdZ|p^6qvBi6>_|es6Fe+H3vvWp?jKbtZHKf5_QJ%jAiGpN zt&L>TCvr(257 z1M-^=$yWpUYI?q!5$KW-=#-E>v*!=-O8c2TlD%3x`h8Kp8VsDD5ZD^Oab{i>wn?$v ziF8Szs$uk}{mh=z;uZXy=8JSf@f06^Pw_=MB+TqlJq-Ux+N1OlYWzt2fOen(ikavP zi0CQWM^@zg1k~l>|J+=#nmtqt0ygVAR2}Lh>M4{5|&OnnmY?mJB&1#pPkxLD`42QVAATFS* zxPN1p3nA@TNL!qs7bfTh3Hqo6{Yn=2BCBbNO~MqKgefoyGs+O=N|P|cHsiqT05A*4 z%u=+eHE9|}7lKdiny=k>S~R-E&!)1Xd%kv4tb%@?k*`fibdEWTzzNncCmbCTS0?t+ zuT7NE);2IMaU;coQqz<|>Dt7ZJ?|tt-RT>UN9DOyz-kB10sonr9eVA6UjL0=CnxIH zCF<4OcgH|E`lcv8ow}YJ>pF5>Vl-Te{si}7FBhdRy^gf-tz8oVri4%w;6Jd0!Ih$CR9@7(<=!f{+ThRANmK`kMvaT$Q z0t&i|M*trMn z%wa~xMm5ryG_uI2)Fcx_b7BmUMi%*U=c4bDm_~3}R~Aaa!UC``KT*GzxfmZfoz;;> zz0Z&J9=R947g6{uqVRzd?gt}fPy%3GIk*-aJO~aJa`#nHC7fkZ!onCEtb~Wq_r#bI za9LLtCV_<|U}15hzKFS)9B5@$!s1x(kwtbTJPJmxhY|qm%E1lb;Bj!Ul)Jw%kc6-0?FpCm)X01>i@C#Ch$>J z=im6fHv=RLgs^EuH1|xB38PHNLLiAtGBe3!n`9yZ6*r6!AQ}?Pq9AHVQHm9-t!v%) zrHi$-t&SEIZPi+96w4&X9mb&1A)LQHNea<;|of*XF`+xiS{6lN*opYY^?B_Yl zz4tsIoj4zGAdmY|lfOWazZc}cYmmQ?$QMiUhmz#q1^LTqI&*n80udztK9S!f$m3p; z=R-*16BLU1mYj+!KH6|%+iqrvw4U|YTzj1sqzc)olQZ%awM_Iw1_CHODdX55K*+nEnEw+k_G zKN>A_PVN$%ECDB7`N5+MPVOd7O7gdEYOGfh<-|!>KJJ&`zvNNI9r{^geeKc2$vuJ- z+#3ofWmU$tVbns)^lN@x8xg-~l1;bJIaO4}wQW`f-Ol)YI;AGVaMkx9#jgC|+fs^= z|h;J`^W=X3^YSOxY!SD`pAyYKXm6vkdkGB-lI8#@?y3fWHuk zz#{JLieDhsJ_T{@?+2OAO1INRMPXd?7MK-un=2~(pHK0$z)D;xTxd!`G&s3{4`G-F@LhdK+q~kK%HNxZEi& z)ay`4y~cl#Fn!6U$hPd{%mV7`2NY0itoSYr5sG`AU=Nc+PeUSOr3}g?LGvbZ>GEO6 z#18-rA#pz%pXG}EF;Jj4=@9Z@L&%>H5BnF0`D%!~^I&4t5c;uCchqMqSrn;ab1(2Q zWiHsFh3kkgeh6i?jQD#%@Q3?R^Y^geuNeFl8vOl~_$#y-;k7!f?ZFNya4Ra4g?4^X zfM>0&x!)!fp35vI311Kkk)7t zHv?Lm#)5fLYiGsPv;F(A z&1X2v+@ZKA4%Rn2c@dLHPBdEEr(H62rB>O?(6(-3L52C4PqAJU*4A^VrI} zzxI$02>dHEhX?+XNBMC}xd-#vf!yUxd`Lenu^_zcX!+`_#umzFVub3TturfY7np0>GBnYpm$TAOyRFzkpr-2Pj~d z7TBeU1sho~V%X(n)WFGK5tl!T%d6t@8ZQ3t%WkRRt-xfH!%oi}fy-jLiPWpBBu*`qEc@ET2WcMQs;Z3mW{y4ge5Plzdwtw&vfv(9)=U zhbot_WZWQ0Ep|~M_~7gsknf_9Pqg2|P3=+^5TrjK*hNgr#L;*}!(<1SHfyPYVK;$- zme7R+6}oVP?g40W5w*A2CYgNI$8mu_5>%a)2AzLNIu4mWrb4$&|3=|rJW}Tyv$e;w zz;R4aO?DCOqUsYkwf_ieqR^m%HMpfYA--nR(di5+#8eb=Vj6A&C$PZrY;jg#DUIhI zlq8p=6Zb^Uz<9#9B!hjksWDezwo@Oz>XQh04mHl?91~GlyNm@+ViJY0PEqyA)YL1Q zIt8CZO}bg&WX{@T2_hIU6p%}$UDDJ>;S>}u_5{#$86n5#WWu4Q;->Z#7C4a!9VCwy z%3sb2Oea+E8eV9i+7E>W!`y>3z6}7A@PFheD~QJa)EKhUPJ_`FZ(k_2JuI-o6j@?0 zL|;iQ4-hS#qR*nHt5{$q=j=cUB1D%iV0!y(s&%X2AQVCcK+!`)4yK>9c-3(eSk3~c zF#l1U+o^np%XwhtINoY1)wBklKM-XNxc z<7s#}imb)wdSalUUE>A=iw0L4 zBjr5e@HFQC;6Oa1#LFm&qp%^ycLK9@Md9zDtOj!%>7mWW>=<5g*<4C5o@_3q*hj~$ zBu_*AW=wOac|r96^hb9g`dfP{v0eeFzyLD=;a(UTx9drP8Q3<`t1^lC7B-Py z3tYqlS{HG;Q_dq_fEW0`MskP;SQ_s+XK}YMxJz+@#lT>8mT#2So=48L1cls4bc{`4 zGs7ZZI9fg_;{qb_LAHORxLQj2SSaNnwRwfrTUg){ zF5B@yRN-4194Jx)vF6UH-ogk!pFnbOA z#WkBg3|2fve~GyffN^u3ft%XvSwIjt3%?+t;nt#?*eF_Etf=}1&eGXVdK3Em72E`FpgH07q@(ljlgntS?R)~&0#Ma%T|I&+8}BlVSz`PEK;lB?QMZaSTf0YBn*$_`>G$~ zuJ|ame269QqZk%AP`5@*%-2?B}cA#=s;85yd7WPXjWrjU^wp0Y8q#wgl$ICh#)^jM|^F zRDp$r_u>Cc$Z%N1Xu5K1p6bv-c%|r$c+KI(>y$y z3p^(7Ujv@^=jVylC(xg3A7z2Z$gj5(ss~BT5dN!ufXZGZa4mrQQG4DWfC8TP3_R~? z7JQNge`dJd|DXmmUKW>E#O06T@~XJ(5SQ1)<#loSleqj9m*mgfYJOVU$)@HfjUqmv zkx4{Abj5SM`uE(ZVh!+168{a52>hP;pJ(Vf;^DrJhMVmaPi`tra$-w>Fv)4~JHe4L z>f|<`iX+4t` zOHq0VVWNE7LP-k3!&WTo1RTvB4a)Bl*uip=R7~o4melca(ElsC%H8h|2+F?S&Gk<6 zRO`lpo~r!M*)Z%T3^kI@9HJv@4Lbf`6Z9uyBKA*$evzx#%{47C1mcn1{}RsV%aC~NtVt{aJ0Ijr8md(G0q z%+0wqHD_N;kAzuBtf4<$bP&;CFFd%Lr{#fOCGohC5D)aW!%WiJi!AvYIWOh2Q<|6V zhl<7HaI-&d0)JtPJ+(Vn;5CYn`Barv`w9#Ek$%p?&*bQ0GVzZ|@r&+B@qwd9DZ)G{ zf_j^niXQ}YTs0vS*YYS|Kr(0n+>d&YqYpJO$i0t=>;JOgUyTvYk78)01Q-9CEcsUq zRw>Jy05!Gk70e~zo%Sg64h!sJvPedmcUW>K#R!rlk5#|R?N>@IpOL++484qMv89Ay z#DV$Un|#1TH^Qo@<~>1%tK#ouzj;6rc#mcUyI9~|Dyc|e=Y1CVz{Sq{PIh*4cIKyJ zXUg8#`OwWy6|wUnvGV~7>?U?<29M8HArq zk9Y4>Y?`QQ6{^f^FlGv>N|bhqq)oDcsw9|)5(TK*VWS5C)?FN<*;kIhKAP#4b-akdGyK0TDGo{0*|m(a!qYUT?+5yy_|*1P2`uQN6w+XWkOw*9!gcOpo%p%{tq^Ee}mch+VqV% ziQ7!5o6|$7>Wvvm++{YtJtNF_Oqjbf!hGL^`EDu`(+!<<<{K{8j$@^k;ygKN>yWCp zq2yRw3773?vq2Ycfb1>8wd&EAc>}A2H+bJ{unW~lh?v?d-bMv_g-zj=hQd#sW$?FZ zR)*F+sOTExnd}88JZN#+c?Cx6$puO`#X|ux%xh0Z^loWSVtD8z_b3UJy%1YXASUwc%y!}Z7&63&jsQhEml!nc_s&!9)~MdHe~fT04B% z!9biTJ&uCKAm;=*3Ow3Nj7-8jXBYBz!J7x9T2F;qMQ*0mIFMEx$%peVEnmvw!;Gq( z#*|g3te^@pA5CP#U4UqvL^N!=+8|R_<7C=2I7TwyxCA(m5KY@6aA_CeiomCBmblLY zZV@)mb#)wyP^x-1Ix7wpwV1vNhl{G}StdC-s1VB(Vm6xnQp~QQK;(#|aAc%8vzh1u z)bdz_p@&4rPp;1_`iqWngJk-8dA&|vua(SSVQToB>Djz2qrR>*1+eK{)vn=6aIi|p zoT}Q@=(}PJmhe+aU}Dq*OWh+GyIV4LtEttS(=&EsM#gSS&)A)r7`r1KW6<3bf|abt z<#n56@i93PJ}O7TM;OllsXhRfMG*LrJU-cG^a38gerPk7oGGa4eKv!eh4-35xZLAG zru16}3QK>7hdjiiuel&owIrj=dbWa}lAOenP5-L)Fj%sI33GV<0$JhoS+5CMvvvqs zvtAXlYJZeEctz^qWm*1vp(FK|re8gsPUI)kiTtxnBL4;`FvIC{b^zg3FCqfbN!3>6 zc@)4z<*yN1yVuKRWeV>%bdayAJqHURC);3;6Q_uK&!+bjP1|nTmGTXqjNXq2Mgs{V{N6{!`I$BobOd?J1Q-_q_MOS}I|+V>-A_kT*e?-Au$AIiS5Th@Od>))64 z@5%aiW&JK$|Bk3v|892o|HT+{X0)$+m2*}3*Nol$P19{0acHN_#Y6=<$ve>068d37|NlWkKd(KZA0_jnM1EHkUswEL@T1_rgP#V!T6#(8MWt7k-e3Aa>6u8X z$3m1(Pvp@%U(b|5&z?W;-n1F?ej#(`QRcjtdG5SD$eU+m&7*92AF}6s@A)1te4_B@ zg-;ef3%<64v#Y?{?fz#DdG?U!4*4*+2V8y(K0g7c=arscy0P@a(oLmbE!_;BFDbpW z^s>@#lwJ<*uP(i&^xD$vOK&K>vGk_WTS{*&y}k5~(z{CUF1@GpJEh+({a)$!OYbZF zA*B2<||l6;zn$H+W(nww(Mkt>NQt#I1|p6o$T5}6y^0yaJKAZn{n#y zh9m7%6~)9S4MDZ*Ksc)<6%Ho&Z_ZBEjXZz<-TBFg!_j0Yt6?yPm7(lN_|I5|GD?a! zmZ5A^`P#-Zl<|B;V;RcEGL(&FC>zUA_JtDZ85zpN>;t)-9+}&G*bU#m>7vumd%yU? z6DItBl?m)^U5Ox}(QwbA0VHV0 z8EWr_&DM3T?p{kzoM}}LhVKx#N0ma#v(Co*Vpwo!CH%q8`E4A#S9z6Zh3Q-rkG7b3 zVLoS$sdTBH{z_<(i)!8ar4Z#6nAEGhCd-apdK}97u;TJ67gCv2Y@`qQ1bOM=HHPeRgaF^a|DyeMc6k-CTBWu>5 zh7`%&N`h!(E6d|)TiPD^Txp|R`JueZ-=$*g%1WR5$*Z_CJ9!$V4^hsw{^72XwUp(! z2M-dY8-0BS^;pjvTnh~YrZbpXs4nH6;MpMnkWqQKClyF!vKwU@DFhnwb4uSQx{&=j zh;Vk1ST9?-Na`7BmrmpUAiRJp`n3MuzVsQXyvnH3PF+I843^S4pC`bT3&tCI&gfm< zBRDcNdn8w!SNV%HpWUxNBcqiEsgQ(5c!cGSZCb2W801UHZsiG0CNdPfh&dzg*eAjz za2%oFp|PK`IIn1lM9%0L975h^Go995JQjPE9VBA&;zgm3u4sHwJNhOK2YXANbpcn( zUV3fDTw0!GoG-JN)FcyO&(`M;m$3)@}FSh6WH{Mf%S4UB1EOao&Y7}LO*2F5fnrh$Fd zfH*$gNd2^zqswvN{aCW8v1C(}7Hcfo)L62qv1C(Y$)?7VP05sHW67qxB2U3svMKsp z|2)jT#*$6NjVx7T$)?7VO=ZksJC(`nKYaI)xO%AneVrfCf|GAV z_7I%0g(FR5F`aLhrkKvjNmD$@RgA3E{try__OrbB0qb-emaG>C2U&*#x$EUgSmt3} z?s__tJ}v&Z8jK@Vq&m;PNB4hcid4uDo`ffN>elhRhDOT$yNO?(S}M7V1BfbF&X2Pb z4ISk?BSV_L6L|2^IR ziedHR@VJ=(67~2BfR3i+Kk}8<^gm=NJOg+53(MfTEgPKSx;q;lfh&%o-A&i+B*Uh8n~5K;wbhvTGigiLkvJ>Din1-0+!akU0L0oTzUeiTL*P;t87 zr+V-cJ@~O6{780$2r_WT)yB9QjjK&@wK=Y~#MRcg+J@|AE`RtajTjyNMk&Unc+G-D zR``)SACrl=@b*?Uljy9T&g3V+WOXa#473V_quUDHo^2cyN5{d*BjJwXbol{E8jk5% zM8~r(pVA)K7lt5{Nw4=GdMvOT`xxZHR&f8`;+5v%+Z!2sAWr0tR|NPNV^t)T2 zQd2*#79vF+DNFdi5ocB>vw5k2E2y4EYU};7**(?C?rFqse_$GXXu$7b{&fb&w{wnd zks@jOH(^K^F+(!VMG;DOJ6T#`*E(Z?kX+~kjy9O|I8-r%R59{ptKtl&D$XQToE4bC z{BKMZCv9IQb)b?+NNFd8%mQmXxBFI~WYgsP8~_ng;m`7i>%>OcfzOq-);WOINJpny z7FEw=4iLgyVH^laYiuOM^Y4(Ho=Jn3(3#0h;sRQThb9YI{)1Qre5k#u*gui36pdt$ z#S{Tr=lPdSB~z7Nolj?geHDmgd2%A1gZGkN!T(aDi-?tcaq^iNj}jMClTRrkT4#i9 zK^a0i;?-zFdg2P8Kv;L@@w*bmVC5=txmsMV#U*{H=62_9I@{I{Yl_Irc-A?d7S0i^ zX8}+Y$XI0+>_fCpP+mHsD$a04#y2%_BZ|o55;x-}P{fdA5HmJM@&!J!AePy=G@?b~ z7BoY`JTjpXG5lPBTdBfgPX;-wU{nI!2BchV+{9df+fl>?pzOE-KcbyDT#iq>w4TSKS3$F z8SY2j%^m{^nmtXA2FqD+9t#E;@(ao&*iWF+AE3#?R!kP^5F?X8TQ@QfqEFE4yam6BK%zVs@}QD!-1CF$!a6mh3~7B_+URP-z2w?@v1HXsZ-*roOf zKzItPt5|ZLF>6o?Y8KdjY6YkbEa0L%PxzWi{$VA-XR>zjs}~Z@7YIg`M_%scOD&@_ z3lU}fMMU6n$c};cFfPn*fF-a{q%*YZjYf)}uK#wVf75A{l#13&p!r)s^UR0#I7Ohl z9&A7H#-TnN=u1veOV@Y4cg6)Tp1;Zl`g?$qjzr|*Z2bX6T*oRF5rHa_SHm4HS-4m_ zR12!B**UVhF)FV%N+qi4OTEB)dtF?`=6Px(aX*{Lh5%@0D%11stKp2?b~ z?Y3%hnh~8Dm8am$sCO}G!I@Ee@ZqWbOgnKP5&t+y(>~M{LC$P=3qBc2{2BXB9!>i| zSGtDr$?A}@nXu|O+6t8i&%|z)s_g<*dE%S{<@>r4?u;0G@D}e0PTtd%b@Yv+?Qk#> z0mriC%X6D%%IgeyohGkS$wefTq*Xr*6{+>R5 z;1p?$DI@%((oEJ-wQQV5m8xP@8^;vm^C9DuHTu+1)pF7t>vbKk@!-_dG`d%{3H%@| zd7if>(T$kLRnf_*he)lL$g5voi=-9kkW+CqAr3js;HUhk(~PE&XP)x<3>x%t(eS~N zQ@uhu9Civlwe+W})4>z}=6W%{xi;*EFvU&Ek1y1!AqX8qw@?bUKwhhGr85}ki{EOc zDQJ26@l~*h_`4@H4}D%=5u+ zktc-h&OU#i&Ir3t|FQm{{*eB#{)qmVzD<8zo(}esz7sUw*R8X`w&F~%_kDYOcNG%V zR|`KW{7>PgqAf)a6+K+Ewdj$eM~f~kzN}cB6Lxd)EycGL-(Gx2@twsN`~TqoAO9}@ zyZ%3yd_3ptflC9Q1pX7a@sP(4ed5q}g1dt62Hy*Q5ZoR7zj*c+9Yp2)$Isf5M^I&< z3dh!BE#&;iVH{_FrJzwbjN|MtI(*9ckHa|5{-T4Yoc}nCyuD%@k8{q^Z?TR-q_gQ8j7~G)z>Ys!D}}cD~W{?y3mBKh{YpK@eU9Og^d3sg)Bh<2Xk-=ezQ$D zT;CK9w>5;CLYy&T4*!KayXtB}D+W&KsjI21n_uQ2KUE;RN+K&UkyW;IG{nOVO>qmA zoo$b3cc*MO$85JC8VN<>?XgCyT@^7hpPpH(e_X))FjxC)>U;4 zjNs6(y2`pVn5GC!S4&KX*fE9M8{>^lO*Txx;QU_-XD)n)+VI7jn;YZNc&81YIEiJ2 z#hT>^E<|%pMB#?|NPD!SBi=;jf^YZV|7()2h75{qUMges$THVAv)M2lt?z7Wi8n>t!}W`L z`nrdE&*a-TVUx$bgs}K4%-tOvD|%H$diWfr`6#*`wNVhON@&xjBWJ|Eupq(YqWtd zcK5I9356rlb71YNa>#BxEPN}P^B69nP`B*#V)~2S`NVti@ zPkPK1p9Aw!6LUptydm1$&_V&*6&PG2&2eU%NTj~CCDzgr>x7);;v7QD3S?CC{}9&v ze_c&E(U4m72`yfPop>_P@fP-u`o>sCsH4+zome|;z~fm}T@6A-MJ3FGKu}RN-*6*d zE>Q;s>UnZlJ;6jBua8G#(Qrp+#Pl8u^eg^5*lRXyw0I=T+Z%_)*=&e3OLt7z|NjkiQQY0e>V znQdIIxW;PJ6pppWF-Fx(2eIh5+MI5-scdZsbu_fZFsgxD^mZF_u8GZ{*{Gs39F4=_ zG0IXuvA1y%8Zz6=Z*S?0wMQG|7-u8nnkEjLP2!jUwRLtjL|g0odiqxlujYM;M-E$a zS8y9Ko5$*#nmb#XJEHM=nl7QkRSgdGQEapH;u<{8FdNTDr)%!)Kxh@=&}!mh_e`@1 zM%sq<_IOJ;RKK!sU|_JWYWW$xd!x3_Y+4nGHb+}Jn%e7o)-8vaHV(%NPrgY8*!5%@PcQPT!PVRZCyU0{$i`=xjjNj*+Yy@)v!EKp^PY7MqB)}7WwPA{ zv)%lTmc|%{oKXF$9zH)Yz0#$Yv&|+LzvJxUk4>ek|J7*3d}{5#V=sbC+~4n9VBVjV+yRO(9G#&%q5Hrzebvm)fc;Oe-qm>8`$_?%OKRb0-ulS?cwx&6bPS_Df z+%%>{gu>L2%U@nK8&_43m}?fy zuiztd8UFE->WcXo8s*?uDEe5r9GG7-@iv6&BdxJW2M!blUOrv424+GmkO}nSCx(B} zkci6!;v3}H_qvI=GTau$)V7IYeM6l8XV^M@y@iTct6mi}*WcJ4{m|?VasS%{Gf#lV_V{UGB8Yh9MGd2*o?2aDT&0 z`-0&E69XxrHQpHS=#;w&^B2e!WL?Ug>1i%aesE#hQ{dL)H%^a zQr_Ny=-=2$A%N6rl68atuL)n#(TJr&QzxynVSBsDTn;|TY*QBL=#@pg z?hJP{)kp9a$pA*i<@_}Hx~gI0=XVa^(IDg;?{V3OB0rm9o=iNw60oCXBCU)mb>|&Xn74oL^7?j8o6&QQnVct;~A+A1|#B&dWWm9s4>q560z z(%9aFQGl52LbCHzD$vH!24x6>UlGSo}Y|+iHG-IIq&Lz%)LY%i{ zx4YRvtf94|t+}Ke_9<_+f z8I57;$VW~3>$*oZ_5h{5UE3KCTG$)w+dA5!aTpxf`Jikf2MJn;Lt7Z{)7_?brlg5H z9O|s^!2WEw8Dl?uLhON789QcD7skFDNZ@}}Jveh*B2G+E6-6lddD&ARGLbj6)_1gZ zHZ(P3d(pxj9_(I$-VS}^1vhj9{>B=jv>YHikCLc+1=<%R+Mk+eT3FWPXk(8`0MSjs|p*DDzQ^BINmN%KVqV8YzM~;O`$eB!~2RkCK!HE zVtv%a+R<3w(cXmZ^k!PNHpdW7<-!L`3%;7+b9b1~QEaG~z7-LueMHCz(P%F@J4SH!k`($EcD(Hk4UvX; zhq1FF=FWVI{<-l!W5*k5XpMA4XqE{(ne+Wo@%u{?FGjQ0NK3pUf^KYdPTTgP8O{*Y z_|n=8Zulj2;Tpr9HF3x5BjL7Cb2C=vhLtSTd$H25Obi(Onj_(GQ){#EP6SulEVk_+ z^VK)sRu(H`L}R(umE5_OLC@K7x3sl4wzXjKFEq-xi>)nWzDlnk!|xmFU)xc)g~05VjZhG8M$@uw*Yj&8+H_nph}&Ha5V>r6&@h z2t1&L=EeLOjQLn%@%pv!`f|to+Vvpf0~1laKHLy)Y;S4fV;Fz3kvd6sb;;dk>yG+{ zrq;$tV~5zXklP4wb;F|0-9y*j)4xnS4UziJaBHZwgEkh*BO`-@G~L5CDc|{W$p_>1 zNc~g@{j8GFCa2I?P|a_Ow#M*8QVth1F|j6~uH6l<*{VDeYm2nEk}lws=K995ekwGf z90>#G9k!aQimbb#6kqo&lAas5|Rnkx)aV zjqmM1kPOo`%=N`Y$0n-lv23}Cw5qWgkFHx{d@lsi)?5x*vbr{4D$TZ-!C;}^(AY-L z6=?6rZQth3uC)Wh((mZGoHVa%+ahdY#KbP%9&eAtG3DUSUsq+ie_d5W?{az|*gc44 z5=kFf)PRdIe|OF2noXowVm3Ck#xO0S@x}S%8F@g`K6iGlTU$(I^pK{rGaRA~al}ny z{zj}+0hyz7y1K>bCX#a6@Cik*$8x64MmBfM-Q-mu>zW?CCQq-&D~Wu}sBw8@3jVx- z*J7tXjhtNLylU>fUWEg0RP3_8eB39;DT)ucm0WxZvkb{eEcjzEhg2@m#%a_hEZRg5!2Rs;igEz)vwwk_ zTWo74AL90;Yxy^7S&Nn>)KW)FeC|Pj72);6J<9nSeE_Q@zJ*~O7c(2%0nNml%9LXU z@myYjPQa_UfVob9ZaEP5`1nSdM`_z`n~hIvva%RH)zEVB8ONfYH3N9KOdhOalYLzy-geBh%6!pmPR;IA$;RF#?NZxraC zV8Gl2lY$}5Q!+UVl2kH$0ioqC6wUd{B(l0^`Dtd`Euw9x5N*GTwlheW+h(gZXmzA$ zB_3{@Ep8DlenBnnL5nD;O+bq%)0&yq%Cs2MI+zv*f<*!W1~i!&3^-Q^oaIe;L9yFp>YIY8 zn@fQ5WXeZ(6jIP>`TOOnMY-y2vkMk7^)#mSF>MXgPG{O6(}vjiVWy2R&lxQ1OqR8d zWvyr0Sxno&vd(7OIZQj3WqpNd38tL~s+*a@3G&F)csjD`;aeb?wC_?u`?^w)-3{6Y z!L~~7Hw2#@PCjoJu;F=tjpEh)9>Bum)D=t}V(Mn5=HA2i|k!i0oZ3oj{W7_LLxzmL*j4#ck3V$k)?l}TTe*~n7`@ot9XeSzI zv%bO9*O>Y`Q{Q6R+e~|hX}g&A0nmQpM2kH^6YT>6?O7pUT#}1F?-SaYzsyyi%T-^< zg`el->Z%~Ih?w_)%2T8U^=+o+__T?>EUzzXl26O^X;XdLbe}d8_p^Npa!L($FCT6i z>|S57)Qk-G33`u4L247??gr>)!fTT$VPm;1VPi2uSGiBbBmT7-S;)4^!or@sos-pyT(v4!=6?)KRe#R&KdRH!od;^ey7~vEe!|q*KJ^Hn76X%UpVEYk zaKnR(2gG{^CYO&03MFwMUj%=e#RKH=c7|LT6GhznrD*qSYWH=tTMxdnk@1nUpyuit zSlG$bxKHf?{XU70@Bi_U8C!>@lurv>n-&4rtu*kwOc60}c#67tih40moCy&xG*Vo` zL1B5=WW7&2%cpJdX=nSi&7g8QN!j0n_kMafdQGtUzXE;1F~GbBQ|812KtFC`MXq*s zu6h6^sf5^)FAHq5@GVGU825<_$&I}5 z&PrWehq}bmr4~8B8}T@KN&cW1kS|y zIh z({}r`e}NaZPzjIp_O0Ny#fE7N+q0&KJA}&qz8ajIj&b`qST`#)Ud<`gyoFlsj6&i4 zHs@H>U^<8F0*{=E#`-M$*-84IYB~o}pxQiR0^DMQPd(eGs)cG{p;lC=l@)5`g<2&D z9a(7k2T^eP$87^Z{t`z2v)~=sa0-l=`Aq%2Pn}Vyh6}akLahZz#!Zu%{5l7QhP#&I zTf||x&Jyn*0_`|H<=QEvUNi`_4`6x_U7a^xyWFQ9S*Yd~q(Q4L{P2U_s(=C`M z#L;xz4SDL#U@A`?H%&bqj7&>|gF2NYFLC@}1USw;I4us~J8S|$4`kMM0dgoX3B=E+s zqTs{ZO^_C;VdvyhE<4`Wl!PB4#jBL$(iD=HEgKph99cdLwy0{fSzx`&&kiD#@y^9P z*hDU05bX!Xxt!RW1tzgbY-E^c9>vTN0mG|2?nR>|nEOO?kScyXY_#Lshr{fr`Qp~Lx>2r?iQh92s+PJz9rN8 z5g(0xJ!@#`jyXIUZK5ow!y|pmJ$uhpiy0reDJF)?=sR2^$KhjmPCy@%XUgX*3_l)( zNa~q7X{57vZ4cfV>1l+*F!Apm<~p0lB`D?wG9WA)&F8g0C#~@&3+5Yo3wiMFCyL{1 zd-_}Acu2JZGn(k&z?$|R`kq`cFbzrvoBNztcXJ*vw#1w9ep0M)5!Coyj3ThLNx!nf zpkMD*cIzb7kep3Lx(8QL&%YX8m_9{swsMWMhZqUdSY+jJ_nOa}$#*YY{ADk$_?lHG z*pZI=tEQl?tMMoRU&#?|p@L47G&FWaPi+vd}$t;X_@K zmKFqQ;pkhTCF=0Yq=V5E(v|XfX=qWCSMgJDH2N7NrVi%Wc_8&9&Q4$B;2@Ud=TGn` z^{9THFR#7IBk44SB?gaNE%8pgt~|VwhbwBekqs}l#CGqsje0U4Bl*<`|>+fviEkMs@q%DuwW^t9jQ#_=i#@d3rw>^)!%)ox34KkI_$0doQr*M;4 zqg$+{Yq7=c0Jy~na}c?8H@+|A9}4hDLF3Fw_b|L!Nvwj7yh{4~+@9CCfAMK2R^lW0 z?f_|hjX@SFHb#>pxgVvb^UhX26cKLOqQIyBBhQjnGaVh$Q z&{4Kmxs|&lpQiCi0?nx~!$sH4C2wpT!VV*hBQ`%akMq#HFX0!x`+)-#%vq}So+fT+(q)a_BVOgBj3bukY);OIl6-3`L>sijgFW~nh4UwRbv@`aNKDT4|1z8T zF%(gpJp`PIt}%*C=c@9dUc{$tU7_W}*p|Y=WMmC8jN?lIk0+rj!;tsKd{SpmFU|wU zXD3PbD&G=KjrWxJJn-w>ak9v%#596C$q>YNj6C2=NUZKvCKbdY?On?j9fKE>+LkTG z9$}^|=@=*-?#%=3H^AZ-N}s+w-Q3A@F(1{jtzs>o_^Q_kJNHNj%ba|D*tPnK42)og zWXuiD=k2qVY#Bl#18dh0_O4ou2O{>!f%6)dXDeGIkj0BT8F=6FHT|9!cn{${flud* zA#N_GHM(r@!(x1nuSGBKJ*&s)e%A2G2ZU^8sbmqul6&wyZt1a~KdHP|nIMK3OsuRR zcPHi^nE7X%cOFJuq@Be5!dMxu#EgYF-H!N{{>mU8Cup?-W?U|Oe|2Pw~NOd0wH zmUm<1Uen{4H5ADx_6iY{M?;}k(3X@}`8?_Cv0#}^om$S)`;CzOH1)4vS_b8lBiq?j zV)AmRu07?wlwR})ISo6P6U$bvmVP9c6=@g9 zLuV}aY~{U+mgm%Aj9$4|%uVqfFqx%qV5rBOBN^KsLa6;XM=jQ}J%%-KH$C+dLWSh4 zVz#GeaIk-18AefrrGI8zGkK=KRaUJLeqyqNu#10QC7VV9I5PA>9_$$hU^x>tVZ}2% zukyCT9e9ZQITlTI*cAd>}RXJk1)y0|R}qhvzxVt;8;AhW?SQ94EaBQ(t#Dw z&y#=8Bc7+qVGr~xQ#+fu6MB_r`FyK)RX=^LihUtWZ=NwGJ=T^p#W6#J=2_~Mm1|Nn_pJ)c)w`)#i38dTFq&w5#D zncg?7Z_x2sH2-mq-n&w#nsU^vGHU1tuL0^P+Ip?8pHb3`l9}ngYDQfv)fw+z@?Bv0 z<|XQ4gvt6086_PknP`4sjDk1{_Md0Ip+Et?e^{SWJQN@)7o&F8JpPmx?^@}{>t%Ym z@gG;i5&-1RGr#85kEd2gqmXUDYg9U3QquME1$y_26*}Iv((&pO#H3Gh3GNsUhfi%e z96q$w@&1*L_oiHM$EJnDTTm{zrGU%gY#oO?-#oE5B^WOUv8qV0N9-S9Z zAt?g?ouhA}+_55-U&Z~P@;!wvPI0}6)BNS-q>m<-P>Pw?x;a&D6^G+WQ zxp_YgG^TFQi&yFRz*PEx4!!lEJZl5pt)V;pc-)xw^}`RRAAiJ;iAJ|1 zqOYPLOQ)(GxGOZe2K8v}Y7~v|55LHG!p~m=WSPBhP%M++bZa(oHhUe-JVzc$wBEvP zo}JNfgo@uL2*Kz(xHbBc=%}dQ#S87d7lj`XuHw=K2*Tzc6zBMyB=EGINK8brb~tXl zxXI$oOv0Utl3ZM;+L)pbeyGV*lpCy|45~rlbQEUK<1bmz&zbl+0fUMV?+E-V5${dv z;tLwx+!NE~lui#Gsbf4x+Zdo5=mQzOa;`pKUoJn6f&0pDV|2XXu4DJ7RA0QhcSv6= z-q_PucMp*Z81SV))dN&D1_6NLyBMGmpT$^Mmh@Ywm($lS{Nn^_zaH)L_%coB6+{)q zXQB9jIlRR7X-mKy4K|>@XpZ?@*k)NgL0Fj@g;Fib8vjM8l5ucfGP(5-qpzt@s zFA{7szz)kF>2||8tp%3tnEhNue8gTspAeeM$JSo?YH-fx%<(M7> zT#;~R4o0EAO0RHTIA{`}_(}mY3u9mvH08*u2ZK6&&#Ka@s7A%;Lu(7Zl11c)Z7F6?V`GRtc zwE$YMkb+7@%>w;I9;<#zcG#(aqVYXNkUrF~^|Idn^vt-G?$m6hPGOw%kggmiG1Tp> zo}ZzaD9_leDnm0-ZZ+d7egq=NKDWU7+P;w?9Y(D42POp-f0mj#uF* zA$>SYoWE!+ONDV_HHJ$;!)QTQXN~h0S2F<-Q%;?y?-thF7 zgH>m#A)IJoFfD!=E$qUjgZl!)Z6o1cvMgtMj47PuTL$Bz#QDo$)mdr?Ct4W7iC;zw zyKw2?Mk^fm^(P@-z&^o{bL|S6XFx>TPY(YS;B)7hALxk5(9lU;o6;)eXSfRsy{y+OVW$c33ESC~=J#LAok_3LN|WSaYNyVX<+FTVE*XbD-1!&^H4P`!dDFwoeU6$QG1Oo`}JU zl#esB{|2-_O zYT{;);l*loT$|w`gaoA4ad>q`T&u{T!h(b+?`9>gC;nqloN!=flGLUc8F6cJqQQkZ z!K$2KWsXRP>yN7?adnRWupIxwoVlAKyRwlkHSF_fNYuP58+lm+{=;+pk7tV{tbom;&P=AcmCBpk&ZE zGUfgVTCh47SxIpnP5xh!v;va0Lel1(U^FM#kP{3`VJn@2G^ZCNY7?Zv6eMgD zgfrR(O7p=et{EBqESnqwPM3hwuAJaeIl*{Nuw8O`Bw1Xo_aBqv?@DWykpEbhS&p%! zNp|6WBiRCWIm#wZ+!UwXCXTdA7}T70i6oCT?Q%54ZGgDAW)ycXPEU4eg|w?6ZBI^c zc}}o9C%7ypc%l@z&1sq*n=s35!gSk&S!N1zqD>fXo7JEe1GBgqscq5Q)I>2}PvxCY zJtD51GtuZ>{C29SsE=#sS`~CVGp?=mrtfnOfpeVQoZ18-@sKwfJl!jLTbX~g7b((j z!Lj{QsVklC-4yvc+3D*#Qv9O4b{MTHz&Wn_rsgzMt3Y)FsIK=0&-4aIB<%(M0nnzT z&ohYhdW&@OOs~;hM^I{XSFXvk!OueQgR7xQ(n;b&ic^)!1=A^_owG0MacYN}bb-(F z!Dqr7JXbQg*spoFZoUvN6z@+=CcK-^o4y49CC@ePVj)!5Zbb7XU<=oMQ&TGSV?ccq zs9zvSABV_I;`qmri4dI<_=rnMUSR2oOtdSz_N$g}gJ1Io zH%mrN_D_)VxoSPMLl^1?r)^- zb0c*hWXS#&80m)+a2+iNr-Os*!NIkX{IH>f{T)iU)?z~{;Ret?!%_l%j+TXWVBuD< zaI-gfqvT?}f3{r-H(S(`H@cN@8yGnYO2Bor9Gndf?gR(7OY-OV3(zgko3140kPU9P zlSFatT_AZbNa8wLl8FQ&3dnvNWbc+_6X&7K@3WJ>+fDjAAe}fLa3GKSQIo$wkiQq? zziW`ckjNKH@`sY--v#;0Y3_4*HUbeO|2~o5B*^1llIKH6;u92$K_!IAAppf(j^AP; zhdH1c=F>s7G_K`MH|yyZgAV42YDHXoX@9eVZl|T0`ZvPAG;wl|-~{)E!bw?`acvm2&@%m+AJ<02 zFPdc2Ep$#5RdH>bRYA8iKA%ph$uL~?JxH-DKlrwkVkG%?{-((NdL<3A1^lo7Eyxre zQ4$MCrd|2QFe?DzM)&KnNLW!qsHlA(XwQHb<2oAs5?2YP@=nw{D;iuiE7&tjTH1%= zWX~*`n`4HzG238o#Vo;I4Y9XsmcgEY1bgS%*gJI=@D~CRSj4?u@e9P-ry#EV{UFm> z>2|uPD2!{~0<(f{b47*!^C_MdScxlz3r#7A1}7Jge96fL(75|t`~Y04Z$DT8uJ(7cIUx_sC%@dE%uNZgOcXSrg33>4^1 zI)psf5b`I)!~O+gz8WI$JeXKDgnsPP9rf8t7DcMq+zWh6nG3dP;W{FWA3|9zBmN!` z{NaAo{5>rAD+Ygs27f;#{t9hIc&!d=d$27kDww@ zQs9Js?bCN4U19Yc4xRWEPHeS!j9SbofV#Gl;E4z+hZE!4umHCK5S9TMqpMzz?sMSh z>v7a1QH)Lx1AU}NgL`xtQT!<5PX9BIsV6Vmql2HhxKj)(DS2xl$2jw+LQ2wv(axWy zDaV8HFOsXsz{8SHqV(@u5iv73E7LIfw-Z4*ps)H=|mnEB& zVSg6mVL17TzA18j3GS~iiIEYHpoSlk?+M0EEy3o#6D7$iKcw#}#R6Dd;F}a{Rj|I#+ zVnR2VSOR2$JXV{_0#k?;v1H33I>(?2%EkSto$Pp^fO7Mp-2GT^1`AFzRD1$zK;uMl zIZ0ej#>IcHZT{$=Mf$|tk@R&6)gH+FTc^Mj7?TrA@Kpi{lb{bBh2r6oD8k{ z-L24}Wry92ASU#M$s@4r%Jv5`U>W!fEL=4vmP0aNS(}1o6D@^}9TMTw*uWCJ9GU^k z=_yz;X>2eBa&88k!+=DOKHv-V=(B+WJ-Qq{dL9b~jqZFdiqXfuA};s}*lF$LJlODk zJ~-s@nN%6(PD?f`AzMXurV7PT;jfg!1zj$7zM#EPTrP04;4hgBBkaVc%r=})6Qj66 zto%VQyAzW+@bZwJ285XU3=m?^0Wv=WgBOA&XuskMX#Zs?m9nr#K0nXelXy}Mp$$DEPic9U*y0m*Mk<$WoUqHK$00peP z2-@v5RQsr#8UJF*K&Oj=$5J4dWPse30(o=>$j4J4kI4Y}L<;1w86ba_0=YB;Hx z0~Bz)6>z*$Sny=S_kN3Fbk>)|f5gX zF0h*U_sbQFi7>upmhCW!c)2K6-76t?5M(d&uVVh9T(P@W0$^GP{rjGGx3{0tiFFX) zWfNpY^9s3oe2w^7#qi5oIMM2{sQOeMd|pSrvm0|@8h!kyNv)sk>O+4*8zIG?amQC1 zf5lDURM&K;FGKq`h~`4JmCkcaTtcfTH-&cy!Z9IQlL6Pe1i4ZKtqQ2Qt+t;91{g02 zk6@jEqCh`Ou4K4NYZzbkTCR!r+%#>_`7q`A|_w{ot}Zq z_kkNxc7O%elJR%DN%;peG~AN{Ig|nNpDB>T86ZDOfgH&I`L7hnGcrJaoC2AN&wuYT zYRXJ(-OpA^V-86ZDRfn1*fQo+Mrrwg8y0a8tY%tT#Ff!vS*XI2X2*%=_|j3g(Y znXEZ31u_%$@hOm*tT`bC@|+BOW~V@&n*lN>1u~OF6H_2F@##&0%;ZaxQXn(&IXML~ zQ}4)4f&5Aa*{7sHCNe-yO@TZw1LQP7V(7!LGwPj+1AqcU-)0Pbn^^Dy7Che={br$t zhPK4FY3B|%$xSr1rOi{#!#98~!05qW0@&(Ho^RdrHHK2a_kJ&;pm?BQ6ZfNL(PdT?!F*6qz8?JbaW$oeyA3W%x6IZKDnbbqqZ&+{0=X zjYCcf?nW_iNQ?(abjOft^p%TU!}}qCT#R?c5{KfZ_8Jxt2<8%k6>`+ReD9)y-QN`@ z-H3x6ao`%#XDQuh)n3U0T)k!VQwx0a3mCr%DBz!;-i0Dce2t*H`^LYJ5Bz zC$EDM&=+_unSxKll6R*orO8rBCji6ZaX__<__&jCKR=o7?_hi)+e7!a z+wH-hRhgQ$2~E2n!bkM#d%4+Hp>bLOQo^Tt_4hecFQ6Pf(bi-(aNg#_L{n~=+p0XM z+72B%b`DQ0;lbT8m&$~54Aqv;u;&kP2l@XKG85AKAgT6TC|F`8r<>lQzX_*jN1{uE+~P%Ku}QzEhjs7d&kOATAdZ z{7)F39&V*)eu-;o9QrXsA76t1VihQ)puUB`R5?~%PcT1Ws9J*mY#L45qb@;H3{3a4 zz>g^8T#BD0iE4$g%LqaXAe@bQqH-NjV61uyW7W@D@Cg>&#)6Ns;8qrVm<5w8_<%8V zT@OHTaf7(rgp2t=cqk;1;V^7%7=V$h@4}g+{yWI?TjJ$3OGOLVxCu zg>JQ432h}GK&$IZFnnHLLYltK0uVhs`7i+P*Tp_20B*McM7T+AbpqUJ0SFgQKI#Ox z%K{MLF}ckNaJK~@#_i-2G;=fj`W~yg2!j5mB>8hxZz)3kmLihjI|SgE8a*qg(n45_ zdh#*u_XzSA_Mz)nEbtuTMdr};E0+8P4O-Gtd+!otN25#pnjG%l6lR3M_l|~izokUb zg;N-F!te;TB}V+urxU04ITqj)?@OWhLOOWx_CtdFhupFH3eJxs|4U%vuky!k&tNtL z7s6Hu{$e7wWK+Yxi=>;O?D8W1(CtTVa?+fDxL=pjiX^0f?*zaq$T8K`ffK>a)L`aYg# z;!g^%&k^*I68cs^lmEfpu#$3%^?V8ouV-N4g%n6*57~|LML-foF&6v}_152@2yTS? zQI7>L0|ne@C*0@_7W^9v{)GkqWO&jms05i;adAedx1=FDKyMq_RA6|JoIB)HeW|! z51l`hwIEeaVP7D*-(<$={~&|BZ-GzDM&4tA_sQLMx!Lw-Qt5jskVY4DEB^z6bacTt zY+cX|y_=xZcR@Gko)i|0F6f5*X9{E{u|5VQDP85$v44T=94@Q3CX z6A9{<7&hr`l}E9nPG`AFai`019OLa5tI29n+B0CyXge(AfKCo{0xEw z`Df)5Wi*~iMIgV_D%y{VK;FjW{!|2ZY)s~(NN{oh?gCSYlUcaqI_1Xx4;gzliqId% z`TQQ=;n3$4AMb)kWb>=%h{?WKfXj0*0G(18anP+qogiPJNzFAyO5#PgdCd3362mys z81IU4Yxz>pPtBmDLV~mhPk%1bhl zhJXU|nAyH)aF#Ea?+fndlP`>hiL--!{@3Uoqu;^t>*)Elu~gt2s#rzf$sE_fez2?Y zk|F}t?|2A}5DMMrFP{n&SYjl;4R^sOz__Of+d$RK=U-=3-)=5WI9fdVo#o>y77yYR z`AQ3@p;))5kxCLdN|va|wu7Wx83K3Swz0cl&H(3kWP zeNKWT^;H-1&eB4y{jzp0ZD|-=7_9<*i~!!4DtzxUDV55XTXV<}u+Z|;6%SXK#W7!K zb)aeTU=)g15o`|zOlHL9slV9v_P2iymxb1)+pqy{y*D7DP%L;Mn#l^qC=U)a{Xjng;yR=-5 zkeM~^UWeLj!e37SkyEK@l`px#hn572gLCnBiq`;GLjdY@p`;1Y=E5t3h8HJonEf^6 z0q^Tve`~36rOzKQy233S0d*Pxy;_(IfTin8h$7$75!*i8ldS$UNJy&55%`l1NzCkS zLsm7-jFXjIO0#-|s^|OsKQ~zTp0!j%mosG`9?%n8g=kzIq%h=Gy_vZ0Y z6zTtXch3NUaD)JIh@`tGnJ_?ONB~0=$VC823=mEQngwZQ&rv5JqPQK-`DRi!;7izs^@;5daAnmD4R3? zi+^}JTut=e61N>604*~F!X;4MywvCVKuNKBwT7_v_uwWtk2;?Xng!2VK(Mvw^Knox zkyN|@N4`=zx)4V+Q@seKcM{7Ip+QnNWIf!&LH&BvqqvxwC+orqSP{BtI6&}AFdL|` zO!tn#90xOI>~W2Ux5JYm^hLwTwx=QO9H0f`-5$vOw@h;VZVzEz3e0dB0BN30(VUTg zBG0;PcF5duIbeJz>fU2ngECMEb_FpFiaT1n$Xdse>v2bGk|@XWGU5@)2#5oG#p)`; zKTh}lA`HIUZt#c`xo|++ZFVvo!}R7lUCqW8MFUF3;6Ek#oN4ihZpbi;yo1J zmLp6)7BkPs)!LdqyiY`$b?+K;`tTI|!EC`s=_TeAh^ivfhZay4-GmytG1&S@Wn>cZ z0qBRDS&KQ6EM>`!+q#L2`w?J#OLcF%?!Aa!s5&rA3jKw`g5&WV2Z;|1BWHa~6x%`Z zz%Y~I@@R^m62;}Z^IFbali+3nRWVZkAAp^ZD|DnWyd=Y4i#d}=Q#cy$vlzUy5c zf&5bf$j=G#4BZ*QH z2L0;!=dfP<4NzgngS_~T2!)6cpM5d}_F}Gi-SGoKtb;)4AfcyOc+ivp@@$EGMap() z`?eHbaB3q>zfR$TusE@+Gwyr}fJ5L=u#%2`!jbQMJ;6oTxkL*WVIeAU5oV7M3XOl0 zq>k(NbD4$ch8@4YVvkz$%E(2Rt&#>P8)Ta!5Y`b}tPDm6!p~rf(R`)uJBM^Q93zFf z6dR3*jf$d1^=OS0f^f{iZC#Iz`?SFt^+7)Fv;O2p6%rGUlTJ)MK>~^C3M8h>bYp{V zT&x=x>Ba?Sdg_ICsG5etdo^rK0b$J^d-KMA)aaw(^-)@epyBl*TZ)JbhmF{(FC+gt z7M%SFsS$$%1>19!1TLmoK3lA?VTUgRC3938cfDS416h6mkbT$dY>XI);t!oo%_`MoAlTQY??(4G-dY?FUNSanFkKJ ziC_F&V6y`SZYEH;3RyT}vr-=pd^hQ^t~Zm`FlqiiiEJ3x9+YtT)O{H6!dHWSWa@si zFwaOLd9&{Q6Rp3(yw4)JcsD{e=}n*aT3(WjA==&>wR{DIR$|Q)g>_&~9en|p4EbA` z&N(3MJw>?fMRMD<5P{8Lurj#Oc5Jh`(}~-Jl({73Hk}zE561p$bw}OH177Ci}ujk|T@PTjb}?Drc;(0ge#$=}5se>Ezg%0?94JaN_cD=kLd83}Rk zgB1T_LVO)TI&$=2fkfYwLM0PhZB(55d)b>`MUubzMEV!?h)pa zdr<*i_wnL>UOd2yT_~Jp_;UgQ9t0!?wMTUyr}{7_@JI}SJqZXr$`SVP;xS%4&Wk5d zIK_A@0hOmX!e4mtG%udv#a~f4sXU&5%5xmyd0xE0ix+wEHxy1PPb8r75+IQ&9wkq{ zLdS{^j!wFxy$KTNXn#RRd(!M*|BMml86nJ*QN81>7|6dSfc#es^{2JwK(^|by8UBQ7NL5!x{s9s? zje}B^Y(n-$o$r9|eV;Vs*KAyM%N+d(i#M}723!iOxj&jgdjKy667XK#yW3m{UZ0yjF@b1)#ndmS$Qf{kuN z2-PvW{*w1Tl7!E$k01e&&Hx1h<|_~^I8;=zq1uB3-xs=fpDvh3EvaV`_xGZg)b~No z|F)!_17_cEBRk`M!->T>377ol1#-{jrPirw~}YxfA}#6dn%?F*{pjsyOc^$|Aalb48{U z>Ow0*JdS{YD=_@x5-VDrGU99ZdH5a93*XK9K7p)L2+>_hMwm8 zK@Y!8lsG*-|3@;@)M##A^L;mmTm^@8AA_G318)wD4tP*Li69-1Z?FJh4v&VN9z)e! zc!`Fb2}t{xhKH(C$Nj|e%d8k8|4v}8*??q8V=fMSKSf=ySuPUSfb)p1;|>nbZg8Kt zgL5(yb-qp>ubV%k$EpiDdwgBYDw#)8 zXHVGep-5s>_52hMt)84t6pK3Z6^ie1>o|NELg5`W21}wjKLz0UY#o1Wq7z%t>q<8@ z@tr0YmEt>SjUZ0qhv@5yg;dR(k>I%M5zr=p+T|lO84tL2Bek1j>7;UYF?3o1>g(pg zrBoM>FNKiLKnm(VGtme(XYt}syf~W|D|vAa zFU~{Z9pw3M&sFsFP>k|GH77)?2z8(*Jjf$v1kn?swFGdK$9ZERoKE0uY)B*5vm-`= zj`-Y-@gZyTy9!R`kb{Qs^Fcg(6cfvw@Tol7*zK8qWabM2<5NA}V?0rJ6*!)$j<~CE z5m7t_6eD*P^k|9~6Gh$QNUL6RDD4hh`|8Cd0CqxpJodW^nIc}I@ixTZnRgYUAuo-A zH18@zLtajh13b>V3S3#3!FE^SN&@U}@3&bVpVuR*M8D1Qg!{98JAi)m{A|{5uLdft zehn|KB|<}q5TBtk1jk*4>j@(1y9!71PR#{jQDj$V+_4k@H-JNdmyR~!$akzK!CeI( z(ZXGYp;Y3of;~Pc*lr?8We=Z&yoWi6mti0!4dgM5>DFK_4_ocqOz`%h7p->BAMH5H zAxz|-XrFBX6(kL>$CphiY>gp0DgojxfaLv*WjcCcD0N&e^U-ZFMDh|4+0M9w?+zUJ zay`zGE80SL0Ep$sNblQ81QZ{7V$vg57$lJ7CLqb3;4un3M!v@w>oG=~dG2AfL&86! z2p5=XD8%(GV*2hu6TbM!J@+Ba9>+#fnYUQzenM2weGFJ^Tz?7&z9LW5Jq#NOeAf|| z5zNf|9!3dc`!uob>)}HfTc>8?u`tc&2@s>6jZWAu!njgKiN6dXT?Ei(upP-8yH@`;z`})O@`x4RrMl59 z4)W-uNTt-r_Yq-yD(!cK>wb_xxOPe}GiG~?DvvS4V^n&K3Xd_(jMxJJ0kbbjf(qo0 zj|~<;$IoX5`x@20g=E!laO9om!RO4lkW7K#IzsIOHJ>v!ln04Ys z3W{(Y4-py~@c3H`$!xg?xk`kdI4In+T&w**#a-V6VJA6$ystI#!~gICK-GrTZlVxjm?SYP~&hk`qp^7 z=SDe^!*eIDu-GlLjyfVLu zavo}{f^7}WbtZx=vHR~m6j?bQjYVyBjScOLoD6bkZN=iUtek+hnE}+x60Z+-cFEH$ zL8cIDtBoeZlFLx-ln(^Ce5GiLm9H4J3FHI6ITpVvz)f##scC3l++uQt>Mo}GjKo|k z<8rM?%vDzAqA`(G=AkXdD)p9>0YZ(nN)4)`g@;|Z@P0HVFj+O4VokOXwTVp@Of_TW zj8v(5Rzp+3G#5Dbgt>YsFzlZ!s1@;{WO*4Hsv6D=Ol_Xq(pKB6?ZIN9B8u< z*AO?1_$rHdND$AJ*2##;6ogkFSzak>N7-r_;`tWhY5`&+Z^^#Ff?6LRN|rA~1DCyc zMKIu$eI43jWT)t5B3xk+zcfB^26e3kb#;6wS-z4Qnr!k9F>QaNg?wFnWX58v1+_Uo zlq_#b$l^8&d0Rr5J1m&(31RNGV0Oj|(Z{se^Z{nbRSb}-=S%B4311h<@-)=Uv(+%& z=2!?-3<2vIl*(kOP?l#fgh&lT_|`)B8qF2{<*~iuOEjQY*bJU$8hpthQ@*-E39tib zsA{XRVN=p#ywfsF>>e4CpYkD>HON}~TCKg~v<|RZ`(;Q={f!Po$jZPBsTvnI?bWp{ z9g7+Rxr-Z?H~H%tY6whby(LrtF=XYK3@I3BYL)PjbE-dAS|^1jpanfyvsettkZK(a zI=hsi8AC8MxRh*O%3eUb*hu1ug_i%VnyMaBrDf7;8b=hkMI%)ex5jA6ik1PHXf!&k zN{giP2nvIQq{{Lys$>uO8!(6Iq4aP8xi?2v(nQ%yOJ#!f)Vf1Im(oK+a*$neR}kkz zU1v=SF1Lm`BronyS?R7xt2)=*b(7w{&`NM&UZ z^g%XmqohYp)TBO&a*QUG2HI+s=ET|> zT7wNO%@oUGL?;0dD!G=@$7)h>qrc|#=`9U3U*Izdn7Ey3XT;ME`1uz8nD`K`3aziC zC@$ADtq*zCHC2?8MLCI=O0kxXFmx$JT5l@li5BG(G-+m_xi&yEmZ{Cb0EuVyI9V=; z$5>VhH3^C^U`uHhE(krj$|62J9yX$*RRm*;2*zd}jLH%bH4UPy7ts>{Mc#`RAwvA< zx;7im#e;;hd|EtKva%S0(n!i3(;+K$npEd+YVt?Ad{GY<^%(gAFyTF6ttK^3YQ`jv zMlzc*Rs%QJ#+e3SSw0W7qoQi5|GGAE>0Q^LRABt8h1ORIt*;ba@N&yu8$ilNshVka zF{E*baZ!9#uVAWLvqxyn##Hn zPxzrV=p8g|-Wu)1Et=HM#tzZnu0q~n`gW2#-6pyk*^!zxKK+(EZP%o^^$kH5I*x|h zVPJ^U+7VS?k@^+?__Pu{TkOTy-V7dHQ! zaP_m6tDmMM)7a8h)#|T-NM@9Ux-*|YrAcKC%Z0dRTTqst(4^@t?ZJu$yP0^3d<;!( zfp{&C3MBs$TWoQpM>tZPmN0^>)!xneFu@**AA8S5d+2%YAxf}Akz7Mk=o{?GUyUaLO#ZDf`9WdwZ-mJYSPcK~hzvgw46EoG%u3L_3x1?Y z6@KJ{<+he0*7-k(CylIp9^DrqV7kty25G!>_0oCn?xFMCox)3{lg@LsTj#m@SF1n$ zd_)C)qTUmezz@O04XuI3hGx4dcjKv6S^hr0@QQ8^GSS6YyeNn5@#1K4>1Mo$Y8Eew zBxvynb7075vI5rDLg|=IVX|~SWy#d}l*Oa-Da$dsnWzWp@l+n5C!S#(rK8)yO3Q;& zOKr}iv_zRk*J-%0a;U7Rpfzv)$pk7yWEo5uqMI2^RI}hzG+kQ07|R7w@RUP_>Jkxp zb|dwP0q7H$QZ~}?@AB%>Gxizt~WqGSS(66FLA zC+EUAe5gEDmui=lHTvtU%Q1}>D2%u^8-4_v`QTcct@tEUR>l$`Bu(>Lnh&zXLpe^D zXl`$_;}~6PE~)o7HwPN6BunchN*)-O`xiwSOjgF}wi#1Vt-m!GsGZePIwmKM1(nh9 z&8{f<6k}|z39e*#ng)g*Mk+#HrwlKvv<&)akL*bK&7W*@=xRq;K4YK(gqQn#{?W};WH z(M+lS?Y^X*;y1Oh1^_{gk}=N>uJeTr&Jj6cC2|D1hjKR05z2DWzEs$#$?6tM;>LeH ztZ)~wb9;> zC@d|ct97Z7&uK-pQa+$)m0g>T&^u_7-op*!KPv3>h$wdndp%%fj(fpjYJ1V5_7*U* z%^5K-yc@ZrrFeQtWFm>mJC9(SJK_a2o9gOfmh1=+8mM^Blb?n>d^O_9cr>8NPeOwq zMc+Im#_u0Q-~3jzevOoA0}sdE(BMvH0rw?}M9<@#CYL7;}HbYzf96N+ygR_L$cu z3$K+4uS^o>rQ*CqltsLhCtBV*0TzxkQWeB^Vt&MlwvlQqoS10cb2J$^@kmujeBzBq zl#*$Mg8riyo$Bc;Vc>Ty^sp;R%T@99nGsi? z$|LAg;gM#opw$C2Er&ivXUENnBkMWO!!8^6ycwaxyw)bX(kjXp;hoc=44?HjF!Qjx zW90!XjM$7`$NRNoLd<7$f%v-C#MRY*1YN6-tW#4W-^og&6;-_Jg~$sSKi3FNSBr9$ z(D)onM{}(jXlQN^1{xbXn(G413);`@IDJ`8 zPR@cr15N{Ktv?uOKt0{;F>*)dENE?OSrVuTwl7#(lbbUthc)C@w+Aui*DPoYGzR?b z0kngVb&>c!eao(D4D@VxE0JoDDfH!}BU zzL)uU)(4r7WL=qceb%0==d-TQ-kJSa_OIEO`mXX_?%U$q2SD#Ry zRG(6xQ(uAXZ>j&M?uQ27s)wM(YHf{nk#@1RLAzADOuIt6QoBmKTDwNus9mRBuic>C zsBO}2(za>0Xt!#2YJ0S2wU@PjXs>8rYTs$!YlpC9!dCrm{a*bc{Zai1{dxU6{gA%O z^N?q^=W)*y9bxer!-Kl6jkk1{`ng%4zYmHBn%&zb+p{5A7% z=DAttWo^j1l-YZ8)|RZTS=+L1$+|V`5m^86tf#Y{g%7^Sy2yL0_crey?_=I4yia;R z^?vRB#`}wRefIU)H)L|!k0h#)($&=*p^{ihutx3=dk_54#2Zt!M8sR zJ8$@^;TI0SX!s?=FB^U(JblaX+lTKN{@C!xhd(*|so~EKe|7j3BUTw}jJ3x3#yaBy z<3i&iW4&>)vB9|1xZJqHxYD=^v9Zy(*0|2N-nhZI(b#0%WNa~RHnthJ7`GYQjoXbK z#!ll-<1XVK<6h%_;{jur@sP3G2pbO@e>NU9_85;Dj~h=KPZ@tPo;IE_o;98`UNBxX z{%*Wvylni#c*S_tc+Gg-c*FRo@s_dIc-wf#*k`!}h2h0s5mgA3P=yvR=(K)K^Z&YsnxZK>FvE%Y= zl{iFp89R2Ys^;a6J#G|hI;|TSQI^W(*$3Y&&;RxQ?zg;kN5#(T-*`~>Ry}#nIg-?; zdl!k?PFX2Qm};>>}hYSS%7h~9=dFQv)j zXI^l}!NVV4exUmM%XXigwm1F3-_5C^xu&tBHXyhOXA&f(O$`_I#NCr7hA zh%V0zxpGeH6(9dt_mwhj&9!&lT&1Mvc1=q0_GPVja3Z*PWJ7Z!Lg6&yo%9hW;hw$eE0ZHhkHRq3=Tr{5 z{n;}w{pYb=7ad>n*~zohTT_#gaT%k?^`7lt_fY!%D?VJb;$8p!YxX~ues*#+Z6s4> ztY2BvXW~_*?|gCWdw>7rgY;d=k%Z3?M@;jyXYy}5aq8!1%o)Dt)|)T(7HD-9C(Rq;M%iJ+mjv~kQ714h{rn^$;&r1Jg!gn zHQoKwhwB#}eDLG+j^s#UnWd#|1tU4G^VUlWUnoByUGwp!^5T>==}#m_vYkDR%}AbJ zKV>?0aon*!uiv5j@Bi^o`e(-^rFad^4j9E>K7DP;gPlKrZRs@&7xo(R{>SO58A(y} zx3>q{f{f%eZPSI>xm{+w@?gW|kKNYm`ScrpcbG=cK+@#W%1go{ADwXUKR={B`hzD& zQlv3@*2Ia`C56>F#ghuBOfQ;TTv}XFIJ+5h`0%#&H&n($d1RipeD<9 zC+18XQ`6DbCWz*7qNfO=l@`(BN(fe7K7D%mN$~|6Lw*6#d?GuK3QN)4c}Je(=aoCxvi| zIZhd-JfXq3nivQixqpV-GiNYEE2>@6(H@-CT-)Gp4z#zA8p|*-T?);|y*d=14#H18 zFo)F>x4gJ$d3f|p=|mSCq5ZgDhvF&By+gZzR>08m&pV)YPXbQqS=mZDznU3E9=u-a`9lL=VT{dUTze_ zPq=PpVip?O2Smm&4-CsAi14&O7=ziuS>ELVCSJmjCXlFvIU|Beh8a6Liscy`u~!xl zuLmMynGeJ{5yVkra2q918)Kh#j$7&l?vKDd0ZbJz-3j!0nsgGqa?*%SM~{rqi+$vR zc^v2ZY#h(Ug=78{3YJqM%m5rEVh2Y_^8w`&pfrGuD{ruC=U~@7P3~F8ap$(-vAB4? zU&hgo9}e{Ifu0R?sb^ypR*Z6|a5QxU(DG7o-ANWD=dX{!bb5aUN6a&Th&K|X@#OtR zAf6G07~{k(-2ID30yCw%U`b9~YQv20|FbyL6~_W~K2XPyw1j$=4K;26oXs(}=Kynu z$&>;hWW!7p0q1b!KaT?P&p^%tTZ(|YfxpIvAM4a}Ip+Jhz%1_}Npm=+>+Zp>p0{$$ zd=_>2!Io0?pgSIR?Swudg~~YU9iwr)6{tRzIBw@i9ClWVK(>;UNN?AS0n+C{8Vn>R z=1z`hX&A%qGoBbHj0NV0w5pNOOl#Q zOV%>nbppJ1JbvZ_DTjFn}_aVP}DDjpx76ytaT#^0$!(E;;1 z%RPtl0dP87!>I5#;>|ETHo-@T`}t_Jz7$9w04WnJT(dLeg&A_D?&>+PhlHV)V_K@* z!g1;+0Vfs5p&un+_1J&3Yh;EzDnlNfAs?3^7i7reGvvYyxgR41nM)3z*+Nx{nJDN|&%>_X1gKlmG*tHFd z7n>A1aSBHX3eTs4fFr?3xS#x_S!)i+lIkwwUYIGguEcu>O$}$V1p>>y>_$pxH?yz1 zKRA&6P6aO(M>8!mDZ)9dTQmAqLWI?C(VQ!J7L3A=`R+vm4Br| zw~iNq>Q}V31d(O9Vuqmp*kF+1g0Vg$h3?S*hECOx~ht*i-N(nS-7&qlh{&d15`|vj&d*cSF`tK z`TMf&yv|bf()MP){9+mPZe|a6iIZzZ2jU+~pf#9$PihQMPL11LQl-CBWL8-tk{Dg2 zV2X4P2_`H7A2G3Td)uu@DXG%4gho9$(k~D*d2ZhKSPZe3PgAAoiNf6dWC|%H)|0Ah zs^LZvDV>;7snSPrB7T_L%2)nI+!I}lw*%TbYRGUG0nPoz00|Y%jqJWS_tzM1qinO= zE|%7I;w?FXQNG*W6H=tRNcW0Bu)d|%rg$OTlHsPfWZ#d=#rTLG9RBzVR&s5Q5gH1~L?SCJ4Bc=3C}Ml%h&tX~E@+5+G^pf4;kn^P%4 zmJbGEdcc>w2hc~*Unw06W`FjX?l0j+5ff0bJb;l_~U#-n-F zO{dp2iE+Uk)Uvsfqnwro(Lh^kTw}WnoS?$$@nH*{uu<=w#l=aL2D@?3p}B>kD(D{R zq)-uPn!=N2Tx54IXldzaCOJO#xjUgvBvdQ>1_&1(>t=%{>rWWRMThE6hU;r18RL9+ z1~Y41qoztPlY@#WK}$hgOktv=b5Fe`yMBo0xP7D?3Xta;f|mtLoY3YjP*&L4k& zSl|x}{9%DVEbxZ~{;9wzwVYq6^u<>p#o0s#FZZof za=TJxM#!DES*lb+znUDo9G#dY;bh@6Yva0>8OL=s#&k9Ey7JEodn@JaN_nXF_^#gL zy7JGN=B+K(-3q>z_BDN!*XKQW|?@CShV3}=4xK(QSI8>jjqWWAl zJfmI%%(`GrAV<&5hmy~a2gFkQ6?1hzxiZ5B%KXO ztGXI9x*C;TjS3;@gi3j0rCjKp+tphY*DXcfc~Nee8__0Qh2vG^3;1P*O`S?hoeG;e z!Y{?(=JZQRc%J2#IZ(G0>Y_}j?h%5X{Bk0+t%J6Ku0~B)!{61Y?rJO)3Qu#oCSX&h z#-@zlrcAY^%tD(o%s2JmRt{lNnjf`8Z^K6d73y8+eDe58W{$&k47i>Jt}9ZFWvNDo;62vc0^am}$G*gRMTB*DS*qDxJ5XzO zS7ymSL7w9v4@%RLWRuVjl&A8f)qNRAZeGOPyO`@jg-LXc({0cElhoB;`L zfCSeG_CeDK{T)WQE+U37!j0g)G-3ptCM&{nh;TDR*qmx?5>l-24z?R%bA)?%Q?wDb zLXb0I1eD22@Fz%cDA_a*E zn%_c!R%Vji#wD2zNvZ}IGfYXglO)*#9$h=BPzsGANva0mcsBlrXP8Im zXOjvG=8z<}b4hS)8k~%kSE&Ti3MjCC4%K;Ha_p9Y4#S;G*{I?*x z6j6*a8T*n{Ar0??K(dBGWk%f~BQQvKT1Ry_Fo@>nVq*<1UhN<*-Z&DkZjdP+hlF_N z+QeHj2=qN51QBs;H~d(B?UPZde0Gc#taR9iH+U+Q)C{YE4tw$j@Be0ay1)uu#Y3o9 zMw!tggY*mc$UyGrzob^^FkTi?_|aj!_oT3)AuR)Pr)8LO$6h}jp%XE_S9897z_&N& z+ne!azfQhs-CT@kU*g&KcksN4^Xw0v{TNT^&wA~^jJ$Oh7NHe?`Ng=B+P>ytbsAc! zkD|DR7q{|)dL1gM*LaWNk;yj14)@ETzCJL6uyMt=rie(~iLtH)_CoSJ2T)r&G=P~8`Gs)+%IpMvDxVDElWWYz!81~rZ zMFk!X*7CEt@tJsD5^oP0eAyXJXujQ%Cx0k|#@j(i5Tp>pc$_eXX24vJqD~5xkZ~9@ zW{n8o699x~fMj-6`mXoU|67kE6fc~UGq}vyukvi-^M0Xv_p4Ye*vu~BH`6k~FkH2J zzf!|rs8nr5%z5c*F8%|+h-$K(%0uz6SOjupR8#mXHPSdLykCXhOwG?#eyxNu8RwF2 z$3wR~==QbHZG!h()%$gnZWD1Oj-lH7y^2;+4LjyQNt?(e-X9XSm4?5yY$ChFi4Av> zgJ}2%o3dp#R976-$)Y{{y$xw<_-hr3ob4WP5EeQSL4Yz@3r&ZG@?oK$RO65^(k$

    ;KL>va{ucZlBlAx%9-1Fo5Ly&k9J(m9By@3TX=qvK($M9h z<)JG>SB0()T@$)CbbaV%jMl2q>d@NI`p_MrJ41Je?hV}+xH^i60_=)2I~&<~-XLcfH53;iByJ*c#%s999D-9X@e%P$w7b{MpHkRRpVU- z&~)qRNrNdz|L~pzXp|&fWW$lYd-wC({`D#->|aoj-?x8nTO}?rh5PpH>-YER->-i! z)^z3}grO{rmM8x3=IFw|H@CR;?TusZyy=ZCT42J?nlB}(eT!xiwT=2hlJGEx{j=ju z6@+#VH=2jE;e8aC6I}!}^)9+WQky|`+==c(B=M_gkZk`fI)Obk)#LvQJKBhFY0(M% zsr81nlJrw5Ixz-B*BhgK>BDrD_-Dxz<3KH!pby(WOVH32(E-v3xhr1(sVmZk7EQrf z!t}b5s;cOeF%_kCHT5;+G5@5B`i7E9|AbgWSw#(o1QB@B&?(a@s;86|^en5a)ciPx zks>i9)MXWwQlwmhpka;xKioUO59a|M$4JfqUtd=`1;M_eI#yTPvs8*4SASG~|GrYB z4DX&qPOXq4lcl4iNbz+1KdnHD3_l*#V@?9y1pGf&ij1f^SPOsyUt%T=OMvp{}b2WSPD9c`p|%`Ev{cu@AF zmhpf7$&NR{i!~?@XMc}ie|ym1b`SUtcIhN!X&o(?3UH%!)g_fZXGm@20pl;;_`^S+ zUitOZpRai6{5J2j+j7vFDymB>8_J?WTWw_n&JUR`IcM9;yO*|%JoxTA{*G<5x^@qf zE`TE(ugY?~S={mJZH_mqbc!js6i?kt(1E%274=iC!QUVJd(k%=`o7n?-Jux=Wcn<;+f&X> zd|o;E@9w_3lWIPY|JiUs?3s4PftgrZ7qet;m^@9rec-%SCtmtevy3-?{-)hS2PU&V zh6&GroHwcVs!xBL{+%*v(G7R4nV_^QXnsH)ub*9uL)=(-&x-0wxZRnNckesBV($0v zv{?N2+b>=GY`gOhIUuo>6;%~6j_17B55N7wcki0q;cMxSyo!6?X*ch{M8@zzHP-b> z#hveX`kdu&9oc-^(L=vHbz-~PtOK%fHj~KvJ+WlTgY7oY{dn5k_ewS|`s%TE=O36% zo5;*@%jT7~A9&5McfURIgBL&hsNDkxCK6)~KVm&^^JL*|Cye~&>`6y#TYpR6Yl7__ zBsV&!%-x*3ECewn@~TI+y}s$adryo0`t-T&zMs{uP5T3a7j{=xOk*OCU3SLm!DlS} zqiuc0m>w${wzYes;{l1phgxSaf$`ik2X|ib=F(1=`8q8=_snhWV%Y~I5H^<7O=lvn zyu4z&c3imX?*Dwe?DQYDeA=$zz(iI>t7_`zGLik8uDxu~bEChOuKRSkT%Nh8-Hrnj zST zcf!cQV}}hositONAG}63cVM52>e`0bz&@q;G+1@CvVLHnfw@CR;{Oq4ymAmdWy+9y zuDX?;GF?Is%p^t1Nr)XYXvFXnM;~8&+=xLFtLqzTX?>4^nJucdHI-})vWx9MFn3rn zX%M1&aM69~0hZM6=7XMCu8gUT+@a#URh#Rd?|#IXH|JdS*`M#XYK_nKVc|ciW<a{&-V_-0CTA!cZh=4KaMem|0MQM7VzV9GnO>VFH$O0p;Bw z;8O^Qeaata-;6e9QaqnC;#EH>z6Xq5fdpx9b*xISct=YFfEMo8aE5b{Z^pCnlZAOt zxA94>Ml$NrK)Tm3$VMLOm*P)wlyM3!#m@ri?Bm<`l-4=&v8vqa6dOZ%Weq;?Z*o1w zxwZwsbsV;5bHODamMyoc#OIdqA=6$XX}VeDLdn1|$P4jf_3^7Eo0|D{9yndH9)Az; zoYDe+ZX-sf=>}Cgsji~Z)_qUbvyTMVxh?VMOPN?Z=J;B@n#9_xuiMs3`+=nf{u_Uj z@wEnD7Tzb0#_CFDM9b<*D!I#eD(yH3e5DwK_(-3rbf5=wvf9=sg6YE!_;Ui|Y@L(Q zs!n5=9>p-NcN@BH3W)1zRt{^*L2XK7x6{GoY2{(q{Kt#B;?Em|s?XPn=4O_rw0f5_ z_wm*^{yebkpeeDN_%gu99i|Sfzc^Su^`0FED^4t(dUt{uukVrf^!3)eej!*k`jhp( z3)aIOte$#zEdgsQnnd>g{sLyavPF9PdF%as8Cb5Nx#a3^TU}{&hJ)2pZ>KB3`WsC! zyWYdWJeM;Udh0#$8n9eIQ_Q7zI9RWAuzKpPx&f>o1zmd20P|iy-hnMIX{fY?&zidW z5qQ}esRceEfbi*;;){3~S+fEnDroMurm4_wq$;1H%9W}-UzKlAoj?% zCcmr6zi4t>T|QjLt8nrex;$5xuhiu%sYga_Yz97HRc3yNh7`}l1k1?7=lUtF?RykH zx`Y>$q3Ce7aAYWGDXS4GqfTt7 znufQ?rNLR!6IONa0<(HhhKA4X&zM_V6T`>Xxt53!^H^7i;cF9nQ$~t!LiEd$vbtII zjztI-ECFy?(l5j)qC`V=DeY0w_AFyQDkD}hee}?&czYVl6f|W?kNE2GRAFjNk{U9; z>LP&`AKbxamwya;ezOc5-$?P7dEZ;0?~q8KO{JHHdC$8DljDcPszB?gW<8{4U+Q}IavF#=5l)8QGGtCv*bSx0#d za_j~?YeH@bk}S!Wu%C6Y9xdD98X4baOCYW0UrfNk>%)X*1Wgw$mlikSE%`!St9|)m zVTRq=GNny~?U-n6MopOw*g-HXCxhIIIYXB8sBbnh<~q7lGiKO4$r{);!h$DF$P+`T zW|Vc7W|!7G`claI($zV4Z9beU1pd1P#!!5=AJ|YrmnCiON@-tWGU5d>4l19L&yW$0 zVUJ}=5i{&mP2*qPBgJv-3t>MqVU`cE#6yZdO@nY)wp1F$!KN7tu49of1D|M`T6Na+ zDl;C5XcZJDf6fH*W42m6oPurUsQNld*tb>H;QZg562s^S6=rnJz=>gX4PhM1XblaP ze3Oy~w2UTb6BF4Ik}Xv4ar6awg%sb#0?m;bEJQLFaa|yb+NL=SFAjU z{~yBt2L9iQ{~zY19A5=BtXeKCRu0V|fkY$^Wc2c(#Y#bQs?3RJv{@w;`{RF`8k==V zt&({1@GZOjn~#X}YaZ#-Jkq;4{}Jv$u^cRxLxH242l_SVKNp8z;L$P^e247bOnfNvtUra9W!_X-!m)E@ZSSd<6yox;@90`&9*^z``VkrB-! z!FSSSBZWV@$yH0vZd9%Q#ziimmR9v2{m`%MfUDj>}Nv zWNTa|p}WJ-U6d)io5tyBTuwl5r=z#g=8@9ok&@<-sm&v&iw=)+4o%e7nNnM4N^G5( zYIWvxTW8qV%z(DhFczix-NTq|_$6J1W)~)(JfK)P{}6L_vCFo+VNkI$FVR4k9g3CO zEblqz=x}rAG$)=2dR(71B64;XpKbYp8Cm!W@6~uB*p{Z!*;$K+UPj||nSV5XLvVFw zQ4CxKupDLMVD`}32U^dC*11`c*;$bWp}TLO2D_KTFNtnccp*YoBTG*Z<+WC!v$B7QHOn{y9VP`xmGEW$JQb5V#zh2dmjErY3 zxv>32{BO)NuSO5X?@JXe0Q*Fkg|cxlC2OAy?Tev(p-_D)A~$s>(1eBv(J9`EOjww} ziH2xzX3<5^Jw@~#CgAo!O_&N3E`tfnvLZ{fB1?oJX9ik`f$B;IEK3+*EVTw|32H?U zhFODSMVG^>5}1SXK+P$GIak7*<-(BZCL*l~k(GWau8~2@69y3?EB!@RL3c$05!@cA z36(J6dYEu+R^)17MOENX0Y@Hbzc!)WxEj|hY5J_B=>rgMfFacY0p)>Oa5gNs85Z0q z)W=K^IyykOF=2)PVFh&0N`Qdd12tg|OjrXGR%Jz23M=LYy4pclmC$aibc3)KhMWTs zP#&lS=fQ&Yuwb1~e|{hb)AGXhQanUsu+FX$)kU{K3$^hJ zQ5Vqcs&99z-U!w4`JjV(TpzIdgoqw`Jyry$sq`NF2^pB$k8%1gr$RW&tj!bd#jx;vFIRAlnaWLH#%Ak zblJ`$^>Zvk&PYcr@in|}#n~ewW3nToviV{ZUrXK7vU$AiN!=ThEq=Vu7-e4Zcsn*5 zV%G6);`%^PW|rK>Etv>QCS*s(nU>s6mISjOT|9h{6z@frOvuLdMEq}zGp{huh7T&5 zM3&saEy1-3IDyr>Sc#z(DAV0h#YzLeqa>RyfjKqwDOPqQ8tC%S{lk=4VsO>oXJ2%aLMq3B15odqvO zc_8?bRdH2jlc=Keh{*KLk!WWz(i*CbXlKgJdCD%#E9=b7>rduQ?`)dKDPi7)HuGk7 zhI}1@U?Q&V!1v{QpPXXl%Wjsl(q((zpcgAyIaUK*w&D$e{R5shSaCeWrZ~|WzmD88 zhx%u<%mLQ?FZ=b5e=d+Dg;rf8>qt8abzC75coAy0I_UX1k_+TLR_OOt~ z;88Rhy4_w>;4MJ4Fv!7Y<^{;SZDc`=DzOa3F(9eL5O_`oljW@*mNs0mgrz{6qHB zKrtv^8Z^H5ljcVkkJy&SUjwj_&`&Gbe%dR++ags1{j_a@14khc3pfVbgp%GD1L*Xw zJQKmc0nrc_$UQzNpLPxO zYaC`Eg`PP{GB7IM8y{)pyMTQhe>qZ#2Mn#*j>weYr^14eV0^r!|CAJt%D)J8x*U$@(Da7<{5 z(`n$0Kx;O-=oHTKin7&kCskC*eW)s&ts1RKCAUi}>`Y@Z(*`zeA(SoR4)mG~LMPHMO_#Z*oG zbqt~IQ9vNYFT-mmLJz$B!`#vRyVLMAIHn4B8P{CNNz4^Y5ZK_FE3*R4x;{#8^Tub; zg2drtGs#Uk+wJvpXjYvY?ryq%Vm_RQ$borxppk=Z9}zvaB6=L5M#5?&s7CVCh^|Id z5k1(>5$o^*ES4x}BNymt_wal*+)EWz!o%}bqo);Yw88=)9KVPdk4!WOuhy-}SJX=l zGs>kz`4lo63JviqXh4pj3C=(bv)KsP@I&fB;+;q{DbKuu2DD+CsGu_g6^AQAR$Kzv zfDG3M4B2vs0A$Ysvfd^}SD?=54V7l>@)!0~o#V}0`FNX@a5xr1*pF7TCiZKpS3+92 zp9(ws9E6?MaXXJyM?{WMBSmVY(6sh?v;+pJ#xaDNQAB@zJpiy|6w-AD1%tR0#}+}% z=Qv(#WgLTO9H_a?A)L>mxDgZvYi8LdOR@$M;y0lIJ;C(>BTo4|5Fd%29H&NxtC68* zPg3Ucfw8J_9L8fO5{1FBTA+MYFn|5fD}z{YaJGzKy+}o{j&C5dhk|esxikxG`RlZW zs>qgs1Lc-Eh2tp*#P1~P;h3(k|^;d8{YI=LGMC2aIDI6 z`D-Z}j8cIhoA;xws}mDl6Y$ce1da!Q57_Y@hX^>{DR8{WYGk4snP58J6KKJB?c&9g zym$&lphPt$r*ORO%<*odOeg*F2bd1;B2)eyii3U2`3BFfV&$}>#|PKN4VpmYO2h5BNg#{RNv-zml! zbVtvHxhd~}4Gsv557+@efe1KYB^+?38kwO+%1sCS6fMB+GhTeoi!XTbC5pf-)tH&W z5A6Z)Yod**MmcD`VxUckhbLI!<{J`I?Fu)s#GJ%9k<;xVvKrN>7GT@L&3Dvvw$)^Y z8@8I5G3R@tsa1^{Vozx@Kjc8HqGOquOn)RgLd3vuD}E#~b#{ElCdX{9#OmNr#8ba7 zo?0@@;-M#ifd(^I!cR>X%~iwasH|#819Bx)h3Be91FfnyplM&SCzq`pTH(2D?*9f+ z#te+n>P${fKFyXCXK0+ohS8{J05Q3)Aj`t0psGtxbv88<{b+N=`VXwY-ryWHd@co! z-|1EfR~>|d`*2zc2cHiIkE@Y+YUDiA!86bT9r%_8Dw^`5880$X1TImHcnSx%2ih#q z8s~wqF@g3{26hW#nFkhIpuL1iuxa#|4c>94C8QNCAiP@PiUnGH>{AL~ssU4tw7rjq5?}?fp)QXpv6Z`q`<|lK%0V=zJ)1pk!rAJV+px}GtlCl9a3yV#A6b* z1sl!#PF!>2h`SK+Qv0-7u7)h+=mT>|b@ z4OV5WP8Kkf1gvohxWy&lF4bUF#+qaS!%4te`}ig1w$*KJy0zGiAfENAv6f94k3sdw zY<0Fa+tBq;<5;|)c$p$l+A{rMxu7;mbMU^n7E>i7$P8U>S-Ew^`v_uE={=2>TZzo0j;2%%?_qh0P4?B@!x0huV)DDNB<`g|7LIg#^|3+{P(-~_oM$O6aNF={Eg9n8u4#YjZG9e zPBHG|1;4{mwvpXuoT69*K7|+_RE@hisK$r?zME`IE>P9wB0L`jmqXxxo`^co*dcXVI+^zVRS(gL;TSZtyB{ zgICnZOKRi=GdGxxmcZ+(@k)x^z`kRg16tTKmlx;o;#^*w$BXlMF^?A)@B$xaCcgP7 z0&m$>dE^EQiRf+DcJc)n=eb2qSnZK5Wbhq~NJJNr;P+MIZJNxq`XtV~@HuBG@NcWh z+<=UE}q~?$8qwBGx8}E}`YaP6bcs^E*kEqs2 zHOkhmp1&Yq>yC#8#}arA$^XRLCTmQL4;(gKOFW;d#wRYDoWtB0n=B0uo31DMpLyG4 zE#$_B4x4Tup3ha|GnY-yac+!FmIjASH3@sCcUq$R+ zd$Tt}`x;{Z#$x}Nq0{)juO;?xz1bU~eI2pyaj`eP@3#{Bci!xc(0)6y?^TU2Sf{^X zf7!Lq_&43y9wqT$t2oZ{?jZK>RpU#>_$~X(t{ca`f!KdgjjtHv9`=`AH;#QHvHz$V zUo*z<*k5+tIQF}U{U_Df%NT!Pf7!Lqc$aSW(f3Wn{Bi(R~Uk{3^* z2;^wwb$HN#1Nng8exurMAmVAx^ei#ycI6(q$@4_iS~Hr!Lf4t1&FaLmZv|V|dBY1N zr;S|>Un=OlA<_GU9BUzQ$$63Fw6)8zHjtijtTo>y=Vg-9PII1HwAO$fdt}4UExKq1 zt1{YYQ(x;R`5AEAjV zk&hg%85%P}r@vZZ4~-twe?+X^HKQe)qheqgiVC+`;am!Zy~HW7<;kCb-{?YqXLO~% zdSOK4S4KDUp7eZ1dU7m1+02qg=rOvJ6zieo=Oo7O64Qxy4Ukh~BTTe3eg%yu;nTYDuW?b-Qwv8l+eI30u4?Y*SY4Rj*}IDu}2OIaF!fJO%NkGLqx*TP2<&_Cfu0L%PZFYKi` zJ-inK`WLb{1<>g_Y}(6XXd^mk+50PL{C_$ozmdkom^9jC*R1^=Vi?eW;G(EN3-=*_#6B#@Oq?DIJ4l zZ!^+(@IYsh7`L152ha|~8wKBIZh;$TOzvkch63n*4Cq#5@BdSv zTa(5VK&Kli=N#IfVAX~+y2qpu0$g*b9mFu8+vB3BPz!Se4<+e28oC4>*4Bl#FXo|e z2gVo%2Sx`o0Z|7Lz9$V+M>HADknrGKnXTPcZo`!uIV_)HLzbZ!es;&Q8{Dbvj?JUQ z3ryLh%vW@T7Vbd`I@7HZZlN9c)9C<2VBa?o`@R8MW>)^{ zJVq@b!NXDtcAh2LdY%w$W$aGDy-D!!l!6&o;^5cIVrvuV6x@ddkJOBzlme0iCXUDZ zQqu{VF)X>MA2p5AjN!>m{i$h$CD46bTtv;sSwh{-M^p3hmSA`D0BRm@A6<`4m@$&9 zvUV=V63+z97*DlEs!?_yq9!2p(BRm#3?lg_dD~=-rg4J9roqHBQ8P|*+2nMP#@J+O zaM(1Im{El znlVnJcjHc`zgpoLY@HcNtfMt!Fq@)cBpG%JH&@|YZ0}-w?HU74(|r`!jS;L{$I)NC zaH?joE8}?cp7wTQNX-~a%>>4=Z#De+&uF4XLcmp?NTN=3iJC|xX)WfWL^t;P0#RrrkWgHnOu8VrP)%|C6zrN}3a6wO{5N&e>i9Q4IWPxF{;q z!leX$DQ-lV5#UEn@Wo7sGVr5hh#UMyPCh62jbyUGFDK0j@HqsH6ykzlI*Cf4$(>k; zYODu2nAkGp9oJc`vN}-#%?$jRxF{;u!chYMEZjI_{B$$yh{2f7z^@{^Q-I%CyB)ag zi^;OPnl%4+z^@@u3GnyJo`dtCv!R)RUx$mL8CrNcfnSdsXN<2f7hC~;1p~i#@0sg*5(23ao2E5s%**#W`6yln5b0La>e-18+W@=%M>baz0jE3$(kJwYv$DR5A zln|ZA7{lPeh+)PcVqwKNlZI{{F^|=ZF)aCEqm^Nt$ZlB1gq>qCyJI1Yc8)yZiG$BL z8u=L>FS7iC_M-gpB8!#m@gkeJ&Ry4762@NGAxrsZ5cxJlF+YQFAzAAyI$aB&K^88c zTO~Z`AU37TAOf4xI&4a7wMexVsWdmGm!c&Q(~R0iY)UT!E$q3R7t48Z1uw4T#Z|nx znitpb;#yu@$BXNEaTAKbEY}9FGS!weVP0bAXl32b4c^Tp_}r9&ojVR&zY~J3ErwI@ z3KD!?O2N);gQwsWThf&z`23WDn>ydS@`9p;`Tnib;#DMgwr0#CpW{wuy6SC4P4hM5yyT{})U-e|&QET-m73;Qy4)Mt_0&Ai(&uizjhZj8bh?{wr{=h&*WJ8< zn&;Y`II)MdpfP5X(bg_`Bk`Q08FQ)DNac9$-CqKH4-G?y*gk=E7s+4fZIk5(#)S@> zHWAMv%~zu4O*%ju2z4x8>Jo{KbNvCAf>yEn!rOM}Cv%_M(` zw@uazHx@W-x}SJ1){G@Co18PHF*aEm95!ts`Hc*U4+>i5M|=%vP3LN~>=@Lx++33A z1mJote1pcStP_CiHDftD0Z90k?F3INypd%N50j`%G$Y1O1h|K=F;O@S3YX&A<(kv| zQLr2H7+e?7U%l`q&0tqX+`Oj~fyYSAGE2=O#<6cTd^3FsQCsQWb`o`|OVmX~lGb7_ zN_2C-^jn&Dkmk$0HDAmPV2Hc0^3dE!b1lt}Lo-WIp1?)X&06>-TEKVVMu0ECUZHW= z`4H%ZE7%x6MRxypz<-)Vr2v2bAP|GUFD46uXGpUf{6-2fz5Bq1{W)l6;6IOxqLo^B z1%dwpZUorO|MkLKH0MmXg@OMP*_{IXeRbZn+c7Km#bhD&GHL!l8LL-Fb7HLa%Y4H* z+h2t!2L5ZfC|ae3Zz1qs$BhUx0{qn`_+lokX5ha`hPc6R$NaP^;^=gOhfmehc-U!n>g$z0(%%^7#tWe%os#0tQa@b(CsDW%Qa&eOMcjB zWf+&T8Ri}N3zscbb}VYk*xcL zv@|j|{Z-JOLt0$9>3^urk(=J3g*Uiz(>wN&n{H%2{0E6T@Z9t-usc`eJI$#g7KuBV zntw=*d#VVx+1G4!xsBw5sD$tDSJX9q|G<(InKUPS-=Vp&v(CY^ubx}8&IiqGs$}4z z=q@dMC%ID-+&FX7P39sYHVT^<`1Hfh|0VDxV&ET&i=unA@I3^62i!Pw)B8;DMcBEIf!~n~af9F34AHS&ZzPiiel}@N zOqBgfPh1dmB2fu69TB9l9^_zZblB+v%?$jmxG37Jh3_NqyWz%}o8E7R9g!a0&%n1 zbHNqhZ(-mE$?pFX@I$0I1^D|KK__DS8}P!U**#W`6yln5M?e$XWlMUwm;QW#Zl~#vCi@HlMil z=l$5Kg&(GV6w$2`u0Mz;ZX+N9PuzCmiQ9H9vQ3LTVm@&@4lRKvG-G>;CvNtS{~Zrn z*fWwBC-7nvFGllX3@=XP#W)m!r!?ac2zP&SFQG8;sLMM4c70NAJjr?5^(nQd=ndM$ zC*@$+1R{Gv% z{3nx=mrTR**EgNBBd=g_(>WioudY0WT78|wcY69VJ}3| zc9U9`(U;h>Z@o->?d@qK_c_gYf(;MvAyH+}E)oMq4-KYp%ScQu#Ng|>pJUYK*K^0u zAc8E7f6+4iusD=L#m>CI3smCW=)~w}D5$wHmwo5%nNH=;nwvtq@{)ZipO#Yji)odY z5#RIn(6CzzzpAk+D>UrZjOSTsNMP)E6!IEP&L||&ql$8p__~Hpb0&@>JqWeEOg^26 z-p~RsrX#8Vk+BUR13ISP5@o#3UK)Rc{bkqqzLO{EF7XQaOmHIxzN&?pd1ukB5`O$3 zVn;nhAa=Zq*zt}Qd0UITX~vEiS_1ED#yc=}U*G%N09wE_ix;zbF^3m(d2tRe&gI2C z6oC(2kD=d$CeN3|6DB04ffY@hkD)Ih!5?YHhr;7*uUyBe>0_(O{a|-KHGg97?^x?= zEZdmRyp4}Yt`$BO5YMNL;xSV7&U$p{{(enM%OcY9m8r!YKNeGKQv7Jc;)fS-iTLqV z+W4`Ax7rB3CadMUqbU&@!KRQ_dJ|&Daa!?$jco&?6YQQj0rC&Y!N-;*X@%Vgr%=t{JSw_>*vTrWSV+!C&^y zdc_9DXwBNYi05z3_>07O^(1v_k?5j_8b@kzH!1PyVieq=;U3oNPAzz7Na#qwm;nNWSkXp!8Vtq`E zzCE>g(5d`yGc?#!i--25d}~VON?PTQ5TC@qXp#TqMN>W8OlMVAXlSY%l1`tqNMP&; z4VgOS6x&Eta~-|q)Eq!pPVpEK9ij)6bVNHqWc&bhff-Y5i87k&$RCVD*k5*yoZ@$9 zPO%f*2pY}waHbBk9;aI+{OdskjprZ&L8GlcBGOuqwA3S6y7)Sh=g|^quN$p(@1U{T z_OY}VKnr_bC;}aH=PQs|(Bzp@Buq&7e~O&q4HA5qZgkKw zlgXhIALDwHnmSrd?wsOnYRfOF`ihq-q?xq%Z z;CPo>lX8kfSx(^vTq1CEPa8PiC%K(P8n9 zI1(5;0*B55$JY>Lv;-#TDI=%p?vYb;6Vj|^E2rq1s>SF?pg3}hZ=em~LDR!Jg@-+K ztAyL>2mYzmpCJO_;c$e9kRA!>kz6x8{DPK158Vi%bNk9Eeg!S;`HdI<;l=N~_=6XJ z^5QRE{DUHJq;BLwxI3pvDD(&huAD;3fSi2Y`Ncj*QiOFJSI9)xQ#V+Pkx#ffa|$03 z^s;x>D>g7jD>h^hPl0aqB5__lNu5(9y6Bm9K}LI0%J#LIEICW4kT)T9_S;e zIe@O5;xHmQRuA+|N0bdBBLH-P8B=VDG6t}0;#l^VT_dOHNq32Jica80&^THTA45T- zGu1#$aHAo-%Tp?jAYCI3dky zwsMNGsalLt1d1c47y@kw50mupWC{;M=~fAkIEe6Y0z@D@oPqE#MUR}SM@}}w!zi=_ z&eV-5=$u!0u%A(sWI4f;vID_O)*NrpT@bDh;bu4jCF_l|p3k}m5 zwG|plh~RJ$8rUO{vqWg9pc3n2V)X4fMX6JHxfvSlIYrsNl$WPeJ~OTI3gVk#4-M6N zxJGAHR%oc!jTtO7BrtY_hFTUH&LUA~>wyYE%>i`f6qQ6&rw3-HBdP|GaVpRSW=ydq z$~c>46Lst_yGBki&6!iwf*V1jMi19g&^ViJmGIPq2pY2?0zqRgg2rq;(x6A`&7d&{ zErD}&V>XQS3L5sDVlHT5&pEs}mlx;p;(T7rW&jE)h5urwtsJklgvYaV{GbBW})Jdrq;8TV@L!^BJ`jI4&cC z;r5(ju?QRssl-Z~fW@9uEO#ou&`bFh`%->oO67~vD!-ce7T5#F#d>(D&Z?}yaj|YJ zV1Xlnu_JI?!UD%N5M?v~6ZDjk({%U9DHaK7RvtF@*F?Ih|} zJ+MMha{ygA#SS7`uLoA9BYGS}#$`Ykm@&ncDC1U^O{`~s*)?*CYn?g86W~VBSgVKE zQP9{$w@Ub`g9sYWLIi@wUjK;5Mm=(e9=Xj78qcEzI$l5#xLY?i5=!JDvh^FlFH+Mz zwx+m*?-;e3Uq&-AuwObJM8C&P%O_rc;BxR%(BN2L6Aj^lO!g4{RWKO0nR+tx!h3b& z4)Zo1$Inet6>NHq2si1AM{LU*On-{*qS`l58wLxLaP)m_;NGITE!6ri;<2R3IfV~0 zf`3!>-Q<^r4-whBxQ9_>H~l#GiU5B8w_x$Gr}OCbqxaBQWawc=`M#6##Q=Vx8kD>8 zMuiQM^dZ{WD~=x#*H%5u6@G#{q3~fM`_w503g;&jenza1=wU|rxswtKD@}!ukfblr zeo{twD_ws{jGO7|8(f7SrK>%-GVWnr-NyR9mnwMQA0vYAaqsN=4GB|zKx5H%J{6AE_{*>6rU=zErCf&Cw1eOwRkWVZg{B!$L- zL<+Pa=T9`A)Fk{k$^471Gr~LQ`fn1!P>`Acg(s*^!IiLK7v1}C@9gx>gbf*JEP7H8 zGs-4TN|;b5Ob9Y8D)DXCA76AN^<7sNz$Q2 z%(NYbtMCg{*AZ7j+lzFc?UVs+XC$Hlcq%K6vv~|N(_+_f= zjw_+<6}r!H%7C^j6WaVFV7DG-l&X^w+UAneb&@T=4sbaVHnc!kf* z3EvB$9U*zM9=K0G2BGa$7CYntTUhBE@F*)Y20X#aCIg;gWzzxAva;EL7g(7&;AMSu zm>F?61SSW!BS?)BMxYbF4XWJigLM&9kMYSx&2uDKZYj%hzvj}^5jAyHB{2yvTKO_E zBvp#b`1N;L?t`YGH4W8hQCN#CHOO*r)J}-iRa8$m8DuH0V&b$^WaVfy4z8PCSy9i# z$qQh>aIf~VJWtg2veh!H zF0vRG3KE-m%l6AHs%73(vb+=x-1Z@JV^OE=OVE~NJ9#fN;VMh`a&O^`>IRGIT5l>@ zzM2}UZ1#6Iv0q^^-{{TERIIhAR(Vs&^2(GdZnK!zrKH(t(cGSr=5CAT&SWFno0yHw zHeGH^wlwt=X-N|?)`Mkv6lzYk)v&%zvKS^XhQ-7{v1gDhk7Epp8piOW#jqF6V@l>E z&x$>0z^t$V-rEFxW@ppB>77$>N6|2$uGGd&L5t~blVftX%#lhc9&%e_to2ZS4jI^{@HD@&{DriZ2U%{WO2rMa+J@NB871hJHPEu$M3qKXdo}n}sd_?5Rc$2& z84IIo^a_i$Dh;ivjz#ChMh>$z`q;FQl~yW8LSRQo$VzKfs<17&Eq(MK04)%m?`t9O2#BaH`G*Q+75lRcCd3XKm=H={wrf*(XIgQk5*sn!Pu>kksLSNtKl` zs#F@StjxC!xvUhc6e@Z<>PCUJmxJ|0RjP|p-e%=zvNBecMmNMP=N6vD)RPmHioTs{ z^=-0O-zIwWjh^kw@`U8Rbp{+14yLfaA#8J{gJk7Q-nU*33#WQ@_%zlzJMS50=WOy$ zXRs7VcDfSJ4l|pm!{>@wbB>rbbH%KwvOH@h0O-}%Hi&$9XLvxshqqiz4jYR(ybX+r z#}3P-WTjq}Mma%%CQu$d9npvJ*CEc=eHsEqn*FvIGX&ub4>tJE! zN&(On0-)t0rd}#MWr5`>aW7Aq=K&M|4$GEb+zKtuey)IZ&R#u2dgnSV zz6*VK);z?lb85YhS?8>~m#lO3Vm;7y_H`YQblSBNcFlF5b|-9b*4&iRD`n+j)(huI zJV6}eEwhDpKTgn_w;AJcKyt3b|UjV)wz)QFv*|aPx9yYFow?F zf5rOX?AN=X!hEyrBcJybYHY{i>xWX2eZIcpzK^&+O5FDr_XXm(}bQ$*l;C(ZNw^Ru4nIZ0{i~DkM9~Jjy;=WYePZReg;{Hr=Kb7Ar zX9({*U3lLV;eCTF?;GIdeMftEACKt$lfBQ3=;LhOXG?=ebMLceove&c^1c(2yl-NX zXBBgQw8 z{Bf)%jd$T?;{Gmie<#0JHVVBPgx))Z-t~g+R>8MU z+^-e)YsCF(alcC3-y-f;iu)Df{$_E16Teq(6nbwEdaoBVq~4k#wU{9uTgB>>bEGo$ z99ix?N6yjQTg6L~X3fH+Su;Or)?Ah}N0w@Iu4HrJi;^bRyrgM#ZqhWGtvNTUigG2U zNL6itw2%&R;yBfiqzmaV=LQ@F;#go=(k#0;X(nEpH1C!q&97N7#lFK;lq;BGoQZfV zK0j$fE>4<|i;^bfroPfM0-1=4F*1LsUKW@48cCWy{&BLjA+VM!TQ=4hWvq|3j9L9+96LAp57t!b4 zuK0A4Q@tphYB3*MeEB6mA-oYzl_4un!DOIiOF&+txhXBC)A2bV#p(EVEZBfaH-1KLXhCuec&Szgjg6|E~*fSjr!*^mB_K0ElRt&>?)-b%|9bMk` z7zn-sznMG`<_i32(m;IX90o9aBl{?&r`C)j4omU)8xg9pIe)AuF=Y?(OL^69l*Oo-)6Cc=~UipmWpzN`hGS zHP_kRz~E=O+Cg`&KiEyB7>KT7AW{fwuX}ATxS1Vw_bQN${yAel zJpC8}@zDa}A_4Ic7Q`XgmgMOH4}iI+=OzPedU`<;z`dOSb9Xt)4RC%EzlDott?6du`%sqWsGQg&%-Yo(% zyF~c}ug`d#-)HO;^*hAbHsVQNj0!Xn$DLZx#23C?68_4~lXN=TkQ8?eIE~ zPq|NT%gTGvj?-`XF1Q_k0cfM{`3}t;x>TKbSEf2z>3qfJHZ)r=%(ztG@i$bL z`J)xp^)bAS(NH}-T0N!yoQAVz=jZ27iB{k?>MtvaMJrHG?`uU0dgf25t*eY|m=lKLpxdgbT$tSy@+ec!A@=6wG$|3&^w)D`|!{=fW} zsvqQT&)b-{DQ{cevw8D_OM+FtcJ0+cgJTT~GFNAA&)ku@H}hvOE$}Y_+YdWdY>K5%$?Fns{c0=xsxgX?ynEP$+p4^Rjcfy>9@*agr+w*qh z?aX^3Z&%(^c~8T@<$;?6D+2cf9tpe{m>*maTohaklP?Y~4PFvl7Q8fgS#Wvqir|&O ztAf`AuMJ)oygqnC@Wx>4L8UcSwLL4!YG!Sa{`p6eeA1xuXi2PRem)HXujyG<2P9`j zQNd1-eDZO0>G;>Pw4yS%d^)S60|B2LApwqmjAnWztHampfab$P9R#>xGGC%~tsV*Gz(XB!bNEjlp()OyPhNt&06P7DIkwZ#EZ zx6|n=@z0Vc27+4pz_y;X2^zX0IzSpBf32vD))i?(i>8dNtC?O`QdJe5GNz)muBN`G zJm#NNQQuHf>7Nj5D66Q!kRTRJ8aicKMfH@@f}UlSm6{)K6H1ZT+}dbaMWqxemmp}E zBh(D{4mHDhsKFbT&QMcdS2_h@XL?nvXQ>o9uKuX}{(YrLSxvnZIkiHHOqPz4BE{43 z|Fi-rGW>W{k2wi+6Y&3BDKetwVD$q99_l6yO%8SAMW_=7)=ZlTm1SmaA^=9Bb#*m$ zbyl{XH{)XYP;CiYi5BgX#lJMGq#NsubCxZ4)4jH)H43hKiTmnvP9+K?C%lm zZx8z0?g8Jy25>@^qItp83R;V*ODcQLklM%t#$UYghkri3^6RNTU-8iSZQg0O<)AfH zRF_sZltqQM|Bt=*fRCz5`^WFSGl5_rgrd?UbMH(pUUj62jH5_GiBtmwRBSPj0ir3G zLa`1aifwI(WtBxmMAvogI=a|aS9H~NUDt-aFDhckg8aVEbIxs30>*vc|NHs;(GNLy z&UyNI&U4Bw&wPGtmU*eg55Mr@`CX#-zqv8AXOYp={UPE7<4C8gcbsm4aJpuX(=C{N ztW9`!V@;wO3M_7}Z9cZSv9)P7em3Ai8Jb+1nN{lH?PvF2c=it~>Q`RX@79-Y>Hc8* zST##C9dq%kqoXek`Q@EAmVI{Xfp2x~-ZR)P(HB(LB<2VapVf}~rGKDldgD9l_FKqF_ z>uT$3TZBE&`1d~Rmc03=BX|E)`KhG#j*Z>VXdlTIyhOsPA5qcgmJO#|^6J1&vko5p zpQC4VpI^`}85c4|q4$jH<@a~Ld-40T7Qa<}_p(iobU(d)G(9Bqr(Sr*>>eYp81v@m z1K)Z6qxZVs+dh)$bNCT!Ui7!v%@f9dcJdMXKD_o12VOCt`~BobziItwk6jKy%tT%N zmxup-`&)M&llXqasolR^(7mWfyUYu@>uP5)$wMzZ{`#`x&;O}gb8zy0*R?*}{pCH| zMG`NZ&0~Ve$O&bAmcMd-@81P_pL6O74|i|r)h>dNvASt4lf3NW+DDDUtolFy@cxCz zeRbc5-CNs7vOZDY*tD2Q9@OE+-Z+27P+M`JQ{>fAKe*T}YuFdap@52-R`t}o= zvRW@0IkIYWY1N=Hqf4hum@skl=<#Dpk8Emem^*UV{Kn>5nuA6TYn(H3*p$(gBM%rk zY%u;DFl5-Uk;4*;N|m!Z;GW)))i=>y^X zH6w>rH_WX|jEt0(N#sI-d^#f+?unObFsn~(t(|=m_K%IUNzB7L21>G&m%qvCUbs$S zU2kkCQk6oyn&OA2*WK`_eV#@*qXbTQZ(R4oI=?q?)IE#U!VMut!&6qZ4MQeX&%)VE z9qnldTpI(=!$J-={iPIY=VZ#Us1N2si zl5E1(7scWI@uw~ye;!uG73FvMxQqIBH}#Wl>Q8;uj{VdPA+_)|!G2V0ZCwq>G$cm1 zHemy03n2;N5k4hpVvCS`6GG&7*wiJc7OK4qRlP{Fiq!tPR+!M0!>a3BTf`d~WGsjh zQj(_%QBE^~jQ8x6J!(bu1cKsLn4`R~4$Cl0YD@9#y0YJ1y#_!BlT|3vBAEo)A(K zy1E*&{#94THY3o3+w`*0>7xEP43z0D!80K!S*tMELxCrZNwi>hNeIjH@?caYd7aR0 zK@8X510k7$b<|GV3e`V$RbiJZR}3=zUv;&xt0dK2-O}0w{@mm6Dl$u z|70(ymlr7SqC)!Zx>lg<7o6WR4_2zN-(Xde`QTfi9Iqc%HhISM(c{X-9}dI>C>1Dw z(IGYD#cd4I6&|c48_*K$T}b-i{KM|=$&Fa#H8#}Z#WgxU0bCi&QlRWz2*}Eo>bcld zCr#*EpbRJ^Kj%6eQ#7^CZjnvF61?0;^XGvF;EhbYcZT|X*zbdoy$bKh%&}YZMC%@+ zbzG5-AmSgLk+z)NRqZpeWQ=}83 z3VIPo=uj(l_*)ksI=TYwL_*sWBEgK+byB8t=&c|$>MT=%vU`a5**-WHO!*Xv`3_`5 zl&~Re2-g+|aO;x=KxdQ#4>-KFeil?x%7Tl!k*cHF)2BC8H#E<|TiDabO@ogM_BR5V zto($7K6HqUURt2M)fwpHrcA3SA3tdSv$9ZMhbb~2qu3NqczqwHdW5Ao}KUl zbY_49g7DT!qpR?;oRYivHd;VrX;r&QsLQu=0JZp>F^kx;-MUBCDwe$O#UvfxlL7@RnB^620RBEU_< zSzcoUy)$@NQ*F)sMl9Q#M=c&r$~2QQ4&7E@lT=+us`92p!u4K~3;!jT2oRNr@&u4_ zL2Or=A^ktOTT4AKLJ&6C2t5{ND$;`$DNt@;MQFHt4ciO63Y7lADml8zl06EPjqDj^ zlc!7?I}LYj(Af<4AMT;?W8IDoS{|>5D;^-b*z5PJSsx6$y{LPtaafW-Fqq9QMuV?a z2C%uz0yBj@S{O zmATaaWz(xhjXeyr4hIGyhZ0=H|i$!{P%XW$gy4Rfu* zj{UgT$nzb8&Xq1YG$_J0k7xe&LGbZ>rD}n_53ZVBMQ>~hZSy43MdXvVO|k`+pvAKY zEH@^xpmw&1J`R~frLbR1*QSoPW7|GKXG*TF!`c6wMrTsI0NjI^PehmSIOm|{(2YyF z0djiS0CzIDW1B(!QM3g=@1=lRLtO&5Hsq`}OnBV@JLY4)%M;2DlFG({{_yuUNj+}* zw6eo1%PXc$25p)(@|D}kktQcv<~7!Myr>kz=xo-rjUZbbq*y59!1}<#+4HKK=$9U> zVs*ubD4-86-1t^8M|Odu%zPdt!FisjcHu=hO>P$>=^4=pw1hK&2IlHN)X?}t7yzNIdt@9l> z8bYJ;V-DQBXTnR;t+@AyjLN7RpU}i1+A9$F9dDOPMNB-u2%u3+%GME(`3kz%C2yvcN72 z?6SZv3+%`O723V{5T;Tww9B0C{RSBwc2mcw1qFewMZIwAW=;3KMvX1pBVXxSq1_j# z(C){-2kBGsP)NoWU3E_H4C^f7TK0wOJ z1csvadIG*af6@@p0L6X442a-_&w4YDeN%^YLR%UB#p4ilKYU;mrToBXrmAfimoyy$ zO(#Ipah;;&ouXqpMMp_xhx!#6mtB!^k0N6nMMilPVL>N?(*Y0^WllkN)F&e#=?q9( z*(o};Q?#N}bh4E6Q0j5D)I742S(&w4%FLtEy5&e$n^YyPmr`G#U#5E0sc_Vp>`_Pd z%P4U3_si(iQBJ=c0d>bfU6eW1-9f)hfVOj?ZK6|jcBg1{r)X8D=y6iviT>d=+PTv{x_^m@Im5}o+$eApNo*{*tZfXVVmoF<*l6#Vn z$%5redd$GT)EV~Gq%t(emjZnT#6r1qX3FG#B)Fdg?q^HZMn+K3C9XhZkyWAi<=|cGS_D7a zD?%MaxC$byEQqd zWZz;NVNahCu5rbXMz{{V7q~{i&-RM22qN475mpyOS4k-roBg~-SnYC8tx7k-jS%D% z7y)H_B{&Tdtc3(?B>U6NVhl?>J&@d+`e2QhC92~$gXI}uiL$*clSxDru)P&**Gaa? zC8#qEFY9&btp5ns$+G|l_PB00`?Cf6+rj=eoBc9kUn1G>OPb#X_LtLg=JI?5B53|+ zVtok_VDbTYA~ktN?@?-5r`VdK8}8Ktud% zkX-;TM%f2r#w2hPc+d-_OyZORH6^9&Bc;kidWM|h<6Z)H@A;1o`8gS zOFZJ8*a!5(AOsO{?KS*?V((L2q5Wqs$64vJhiC{_Xa&Vi16>x12J_b$o;Fy?D})Pm zEiR9CDJK0=U5XL=#a~YIvi(eaQA1qeHJ&_;r-q_p$X!%y%l)f170h>~;M)Uyy9vJC zm@ohJ^DWvfz&v{r&z`@5=N|;mJ;8H#<_Z0I)b=hOy8QeywBov zQQRbowW6R=he{eX=3b)fky7Td{M7EnG}e0;6Sg+woMmN1;&wmSL*&rimAw^Z5X?-9 z7VXB`^+G=;?*uTE#C3aomJNF^NMJODpk#kr$@@r#J&VP9wT!&8KZ$B9{pj|$OY@Zg z=MCTQY(rP}gIKh2ZB26Lm!U4MlYI9J`EcEC`5qGTl|a6*E#F^AzObhg-WiF#JtQOp zu18}k?3EW4xErp=1_8n2KbK#)R=@hD;JT?})r zC&iPa$vDi6t>FSb20-)-knEvKi8}iJx)Dbx7CL7G(lY%Rif#=>zY9gb2}QpOMYn{a zn?uphLeWhj5oPwNQ1`{&9lM?iOla!B3Uv^oaO$%Vx`oHbFOVn_3+f^SVd=OuKmKzF z`wJ_mo4T!+yOgJ-GO6L->)Gu5s<5?^}gY3ap zzHSCk4c8a~879Ve)2#wg<)q!(O-}`MGzu||SZBQwn?rMZNK}*S2Pwl@>Kky|5=pBa zw086t5nG}|O+^xOvAzS=#&lYP)|R~(V?l|GDn*)5p+c}p73$;)_3#R{qC%Zgp-wfoh0Hf>S2!AXw^Kio z3-NK%7UycSeZ_K#Twdfn>?IHnbeCUnxMOS%zY?A3_^RPlm$aAe}(g>qq|0TK3V&v7iFH zs~4^}(ly+34_t4F;2I9z6W5#RdUJ#$^d%nhGAmoEC@Xm!Pd>_rhL2JJn4dDifiRd1jDU>9FYJdUqW^(>W$#t>$NjH&I{Sr0}z^EI{2zm0- zeDFZI-jJ5&I?7#linNMgOzMbH=d2cJbb<&g!i#`GnD*VlOS0t!e3G1sz%fX-2E(|g z!~M*UyP(fri73f~$-6`+fd4g-9NlJn>X{bxkJ!__Ep=On$9B?H;N6_08#_QZJN6TH zpy#Vxc1!b9Ue|-_N!r3$2k5B~{Nj~J8U0~rOVU0LgA^o9xUnsk?D;xO77*=4YU9gIfe+73p-KF|fh=wQ^#VB{5wgV}J0 z(l9`ILJ)_=>TK#Apr-sU6sZ7XPWkeD;_|Q7?HbDYvPM7-MHq9|^0W2VRMA zI?O);LfEj3#}qrzZK#}1`>{K4VNKJ`ak{A%%C4@a$lwYj*n;53h)W#TSv&6Tw&n4Q z>QI)V(!L=z&Zp&!%wA8C$TM`aH{_)Q@lhnMz+xdM9dsm{hF1Q5eh!f2NBe*b)6n{# zP4fuxIZ~ITJ;r;KAT$exY&YMc*S(rQ|6bl#)7lRXHYrC;(x zG^XZ4hWAZI!esMeXb_1c3>Jzt)42PHXk?%2YQP}F88~ZiRO<^ZA?m_YCtob=rTRJRF5vP zBmTaC0zdjL4hs6(5Q_apF;Eor4I@+z76m?JLcfNJ;s8+$6UBj|h@l{T{7JJpWU*B^ zY4!?F%sLndsSE72siGhB2i^V2!!HtBrCWbs=Q;$y=BB=4(eY1O*fZvgbCgzdH4zoZ z=wfregeNjLE{|Z*XiZmk&gcii@r%jWhoX`v-BMgwt90`cEN<;ng!BU?FGc&vBUuK- z)FsTzUNNq5*A6zHaYTL%mOI|Ffr~s6#@4ci698wf;Q3O7GItd5EGZ9LCjyMco`j3| z&AKJ9Cud-zEAs3U+QS*ix|#HzMvzy@c^MmniSc#1b&Jkb&VF~Dp1O*9Mp)U1-O3_X z66)2m37slWf|f!V9FZ`BQ_B;#W2)(dc})i9GGKm_pMhD{A`iQgGYIeZ9z1d2bsq3= z8trft2VR&D?6`6S;a%&&6K7uM0`FT79@h?np7MMtc_i?#d%Z=sZY5hCO=O_3?WIy- z(dUkG#}E{h^Fy)I+j<;JAkf1B$$bQtJPxoaDX9aWaTJz3fkS>y z%k|V1pvdR_0X!B|)}nQ`tvVL~5M!PwYDICPC{7YZoha%>(IARO6mm!?yh`#P^AVF$ z=cvg(cS>Du@AJ3^L_3XrjtA%jl<*y4U|i#{?;5JZVc*qM!jo;Q+lPHwM?ZZm3|b5G zD5Z*5{mxVybo6f#>a>btfhZP=Vi5|dqgYd#i|in@Mq1y|QRRKCqhHF?*(`=*0^y)g z28SM5g+Em=KTQ;;i{cDd6tO7Xktn&DW|c9!C}+7`J&WqtZMw9IXMK!H+JK%*7?iCDoyhT!Za4n19Iw8#DNEpzMR}56uX_N()a7k%XD)UQN0`o z9E+K%^qghf(V_#`&zZwY^7w4LF6VJ~A(5P4C?>5vKrVF|7++4uH<$BaDSWc*(ufoX zwGV`OHUB%p`&8~V&y>mm7N>bDbnMR@XHLLj$NU`el4SxHgTQn=3!1zH7uM}MPZ*ct zI)0~a-A0k^GGcKllp~7uk9>HZou(L7qmBbV9f{3?I z@5xHU1K|?6l869a5b^rJy;+HPAY39>5s`a!IY-Ct)BOkZo>9Vr|DM3_(`9#*kx|4_ z;aW6cU4~^tyVqrZ0tu|k{)*lAV|w%vJ-Xgri`|YE^GQAR7+iyQ-=FdB`!n8s{~3+w zlsiOmrzq|vjO;t$r{EBvl3EX9_73<-Tz|$}>a3Q2fT%rfuLs7Knj7rvQLSSp#-Gux zzvBi0>YT;FGkR(RFAiMFqM&6aq$>V?5Ee8Dy zKvPfas7tv7sXreD!Lg;0*mFESA11JL0D&h@z>|*>Q;+x)uaqlq-KTdUE5|DZL-*}5&z;~+CV82^WEy+B6!EB&M+uqSb0J;!zy%l{{+ z`6*)h2zm=U(z7}Slra>qHV}?x0ifN!_Z&#T_kumjqc7TC_dM!A{U4%uK@|TK#fvD+ z*L3rbT@eWp9+J&;=>8)6rx;w$(&yg<>OT_p!nr5Z;^6mnHtx$nqA0EKlbJ7(>aU=R zE%Q1qtk-q(W!VuWu@@R|kU0Mq{>vVjdfDDz1a>1DT?=f` zH(gNSYb=r7aqqaTu4@xSQ8>0y(07G@k7VAco3FO9fp{&O_1*_!>Q!#BHxO^76aSEi zzeP6s$dyS9AfRgK4XSB&jVdh`=L`jH;}K##s>kMlgVr{05$ed`>mK8CRBy@N+* zG)C-mwnN8k;2wN34i?WY!St;v5u;tF{f|OeK8UhI@=3>M;Ly^W? zx`=d>F%sKMm_^wnBSGtu1WSJs}1p?l@sKlXrJcp^c*GY>XS6#C}QR=X;aK`~U!(UwbX+%Hk2w zHLEzxgC+JR%&&A%BSBm&d-uK{+5r|tk@|{^=~pcr`(970PnN?&jDx<@t&FBSn$Z-F zeVc)@0QEZRt?$^-gNU2!*wWM46KvBB_Jhd2V35?;Bxlfu90EwT=ulk5x9ZlnO5)2|FbdH1$0whZq$3^@{ z-C|Y;6TV+UmLweeDP6))9ZUEV8*fBbzC6lo(GK;4Na-0Q&3L7NWYNlS5&v1Yej+Q3 zB7DDSEJ8T8EnPJ3as%~bwJ}-w@({K~8|w#=R%4JftCa(iMLP@^@n3XH@EC_*zSBu_ zI}H@inIy+QRLR>;0-r(BxJ6Z3 zRdpz8EBOndHiC-J(BTk>QXCwN#eCC9{fn;l<<4ZZL`qbQ9 zE3$H(oSUnv9f`(VRyhi78CIF+NSPqiOsmXBb-M7dix9pVjX6wKg{DlC9f#W7CTl6M zedT0)zhyc;-(#B#9O=uGT{IZ>GzV&Nb|_U{h=xjh+HQOUeQea9I|HA(s~XihXHJ4X z3o4yWdKHK-b%-Y=@gewTBfyaDPU)elXUN*Yo?4dbTnF)N3F0B|$bPW{g>Qal(@<5< zM}v@k)Z&(eU-so_%aEPCmqobTA%01A;tX}Q1GO?cl&Y?vhI)_u{cYP{=OAB`9hq6& z=s>N`4yCHAa@3 z9ObED-Hvb&Dj5N3GU<~>s#2<|QyIanVT7+8ge_>ET)ilBRBT2AMuo@VLv4ef*vFP{ zZl4_32{cqT(MSAjZ>FHdyo-u$>@LMhHN`_AYYVsbbXvP*Y3=2-?q00mLxVm;s9JA) z*0&B{PO7SDY{iEghs>#6R9`(8UrL1q=^LjQv2lo@YI_wcEs6U1%5q9UldmjMmMh6a z(SpIIJ1qJaD>Xg_$l0`aF((Pq28dEM0Uh9(1le;kpgZH+XDU+d6zC#9i$ja5jbT z1!Vpp8$R~w%0ZuI>!N9zs(Un?RNIWtqjo^wB$a$TZNT|QkHL~V9|@UsUxH0dQ*_ds zQDiD9kQ6A#0woCIy3{f&&{C+21hc=uPW*viXWk~!G;MoGk@}=#W4b(!7^vE|kg{kF zz70!y$w{B}3czCykbON^`obXT3j?Ju?2qpo^G8g{QKAxfZ|NAtx}B4$pPtn*`gqNj z!!dfXfjl-BjovY(j&D0g~jk+2e*Rf$K zcR-1bFYzr#PBHR_BGIweias;^zMyImU767XH9=Z=(}F+-NqWLY80NwS>9Raclz~%a zxfmtVlm!;a-wVZWZGrf$waVYk;42!Py-0WI67qQN9)* zUL%phTFyhN&L%Y^8>w1u9p8|JkEYd2sj~@vl0?i(b*`>>hsA8@N%__=Fz%BkzgL#` z$ntJk-YLq!?eh0+DA9G=tuh4OB17Oh83J#XaBF3`MwWk&_t4aJ;Rl8K?Iq(pD0C#NQ#`gbk=fDfXEd&1$ZW(x9y5)1y{hpO>`*-QK z&xm&Q2`9ol2HCSlm`AclnDsd#%u~8DjlQfoy{Q(PUYf)FL1u%$msRaaU75w(V`;KF z3{q8l8dGX379$iuco!hY?YmN;cVzjNEH}#Xby2D>Ipgd_*R9h=8Xb4M?3x|lp!He) z-$F1_VUn1J8(6g0$TvKT0nchl(_TS$VI0`&074FlAiG}7_pfI49qLSU<1a$`z&4aL zQT!}_|0I9^D1ZMTe{Yq)znA5Aviw%Ieg&E#F!17v2_{N^|1)_gJaTIluAM$WGJy)VBe<<=CLHNP^xHoiCR4?hql zQQrz*7`ZfZS>*D_6_J&ZtB`f`50M)pYoNewkv~W7irf=Pm!M^zeKi2mXw@Tvb5yll1rfe%95)} zu7(k=ExE2_b;uyG#@e_GaonqZN6r{Zf-Q+ zFyA!aHs3MdHQzJehXFq_KQ{kkZh|2{gDJO|Uz%T=-#mk^w`BCjI|0j4#J0C7Ja9$1uJepOj$I{~yED z%;L(9_#05^PK5tIk^wnBhYt^V{@YQG&jVt^1`THTwsU;Wz>6__Y82TmHF1UUq>9?O-x)05+K;!;J~)>p`G|8?kja(r$8 zt#N;_Aw=oG$&R2}9kLZYm}merDMv*9$r3qN_i=6<<-?R zjEuF695$O%*Nq(3f_x|VMQN=>QqKBDnMU(Kkw&v4ZO)N{Gv-p9RC@T~V-K4$dEAaE zF05^tH*%Pyc(9oYsz$KqZ;-H_09Q(x_yzR0kOBxb?Fe(Hn8T5nw)rfV@I9{oO~j7iL?ZmnyfRBEn(NX)c6 zFOaW={HFQl;>5ob3ZgW?M|u*eHN7g)C>4;`+eO`12gHy}}Id zw3ViaGAqeUvxf@&Q^x@H-@xB%9`c?JgdK1;Hnsr|CMB9jEye+OJ>6Ls){`l4_Zth8 z!Cindt_a^zf6is-$mtl+VP^?;9}?~{z)dbkR|kS6#l-V*U40dtcPhh@@Enn0DYc2*Pecrx3T$;#mq6hbMn%4_Of@S7PHZ}GZUxRT!l7=?opw6mYx4x09d3 zIpNP+ST1&O9+ca)7?Lbaq=JK9hSzs^d> zp<*jN8w6JMRFr=nqS~M{qztbfA9*bd%8w7@gvsgD=yn zSQj@!;R{M#}M7a()wPUr5; z$j|#*Qt1Z25s7mrbK=~i6HWA}gXr-ombO0rovyH>~>$_@S?Yc zppKAt^B6BsvZa@8E8pRNJN0bv86hN1=Ds0mr`a9EL$W~GK^oZtC0CBv0%gk%#+W_8 z{tL-u+e#XnJ16XaHN9)U9ggJxewx<@InSjVR^(>D4lchY3v7XsJE7)|GP<^ro;7FE z)dJPzlH7)2NZYppC3gbU|5l1q&JVgZgom(#o$wED zVgxn(3*aAq1oQB(1O9cyzkK|w%ij-w3CasWtu{1asQLS8*tG>|iP#a!DjGNhJK~%~ z2^=VnMFzBl#Gy#21)IeXABj+=)B47yM5tw6bwlXDVZ(+F3MIr=3S?qHKDZ5JI{XNo zf|whUtF30_L9GcjG=^Fzc|0iO8%jX8bEM99W>?9ajysT26>u*Ct|apuBMwm;Lv)CN z+^n^DR2O+yccoaRX>HekyDYHF0=q1*%L2PBu*(9wEU?Q0J8c1xG{{bP+D6tZq9e)v|MTrC3#WrC6;{ccoa}m11>QidC8vl1s4q+LdCp z!p_aQE5+)r6sx55BboUwgz~ ze0&qRG7pyx_9tdF`YhfQ^T&|6H3YD21UA+EBILGEg*uJCIXB(XbmYM__eEA+{tWOv zxO2)WbLlA;`f}_f@Y=?_n8=Kjf)9;uE3p}Mke_|UHy-0e^(d=@?ttI}v}-^HAN%|y z!l^R10uPn<*p-9M8S^nxk>U^Jo9V$L93+jP{G$SgJ|!qVJ}uKN9Gd}cXCm$yiFL$x z^^VH`Al^MC`UzG?Bz^5IwH`|!KeiRaM~j)epoi>};#Z|n|Fp#LSDT{X||1GV_DAbPF6U#4w@ zhZf>%=biQFZt`Qa^O0=RED}z^rjB>ht?s(4Qiq`nCR*Ke$_k0}+?}N_c};G_dZ723 zNzksP1hgB0(s!XJdEm*~4}}C7fZE?3FKa1|^_0~4vx{9ptJUhM$GhuR4;E{?Q%`x- z(cWI|PlNWoq5YnEba$!!=@sf3i2F%&h}l>7bw|9vj$D&e+t*Rr?Kyl(+3q*1zY9V` zG87B(H!ja2qWyFjT;%QOfG2n)EjZn_lGN^wourQ^&jt!*dKI74-X4nSOlcWa?+Gcs zak8$3=|hy~xb*_drgJVDtgtOs8F7pEA&li{;7?_qM-V!45Fodv6{4mKP$Pnb2mV5W z*DT<+*XVYp_kl2cRFCefM=d=%K#!Kl9!RbP3$VXZ6xX0g4X`bc{BgUYL=HkWP^Svt zUmdC=KPc^beh*;(7e0rjec>}z0;}0sCF!%r*8;`S5}8E@k?Pl>l0WE4ulZU-z1;NJ za6M(&^5E07!TOAC6iV!slm|nmB>MdV9bygq7!ZPC~2g1h+mCESq;h>DG_P-(l=Jm!zZZ; zAH?71d>McA!%$p5--Y>vVQB7QHU5N)c$sbq^0)g@1^LWu!Sh%@HgYyi-)BvQFn`WQ z5o7UvCq3v`Jzh?IdM6-}n$e@3kUW#Um@RU$|Ag5KJ@4|f7Zkz%6Nmi-$^LF)KLO** zDkEv`^&?U+M9L%PX@5gKMIf%5>#>R4Mf66wM~Pm*yuda8^^`+7`4C{({CFK-iBHxo zfx12$YNq}oJr{G%X8!Bh7X+h+vr&Zpl&z1PrZ_fL>i-BJt*NB{WYYgJKO#-Y(4TqQ z`aeM+Q8+PWbs=J*SfzI)M(~pc{oep*4)IP{({)M%Dyrm!HC;~)p+PHH7_lQrh^PEQ z2vf530+^;HP8T7?NUIe|Bq)tse1>i@#SNgyhJO|p7R22b@?RvoClou%JLV$zN%B7r zP!uotg`s2?zcVvCX9v#t0XydhJP7}pjUv?hz;VvwWas>gq&?0y8HPIM`1tXnr#0{PT^b{oKDMpkXE+u zMwBFd`+`WQ?mHj1;r$io}l=otK+P7=4-JZ3(jT z8-6?I7Rx5G!ZZu}c~;e=cQCh<9)k+k%xWE*xRg*B%WHc~V2^TK;Uw_MHz9R=o^G)U zZ~b}|oGAX8Cqh$qzuws?(94rb@R?AnG5YhC|H9)P#uQ`W)>c zK8R!v7?D84h4TbD?g{E09yiW~ho}h6lr$*!fceDL*t5*wti3$eDj8 zyHa|fc*tZd-994&)O!u!F?FmVCt(j%cEX<%;RY{ZkHun0mg~!1?@H`}%1(GQ5zdaE z9pMWg2w(Qtbqgx72FFUZ-D~jgKmwbe?~#DCRgX67(Ua}f_xEUlm;HbOXefvaRC1X&WF(3&K(WrJ6B} zUZV+u^UMrdx9q_XWwI4~IH#@1F}s9VsGtz%WVAtCS!YpQ9 z*}BC5`7VGX)zEe4KNy09_>Yo%W)m_mtCVLG%T7d|r7XmiwT$Yz5|>kS52d2Lk&TMf z&G%GN&K$0El5uncqEIh&3Yk6}JBPca2N7K4CFtM^@SumR!%MSscB0*8(~sW~=s*H(k7Er2qHrl!Y07M4 z#5n)%U_qCnwj;t&;(D>}cgIWE9fuKk``vLk36s?wFC`^oME%#hqo)^o*&geRfP+9Y zewl7DgSg8;`siiE_h3}BkJ6{a;+N~zB~&{?0B55vV%6mYbts{*%Z|a7wSwx#;!0Z2 zjeCx0;n)>y%fpC1Y{{WE8<&7RipLYZtY%wD>^Ns}n%Q>q?StGOF3QhZFEsx+S#7ty_Z5#Y?sK9-nd?UCP;495}mv>x$jx}&&yJkaCU>K4&?Rzl5eA~mI&k+;I1z_=4^ZRq2$8Z ztYpOgK)g;OUZ?n15_PDHucmzC0H}8XoY1|qX0%olg+`J<3@|yZUeDcsGEq+JAU8h# zPfZFCs0oa@+vp33@f&nY$kQU^$=z?xLZOujST~S%3y21H;HkK>Zlt=?aFs#E>925X z4eNgfpmKFHo2%`P#T$HCJ2n!#iDXzp)YGiH6aD4^+1nnkP8>fAG~;V^iy16+8OSlQ zmiV5HYBugN0!CK$HB@_!0M0OqJ0?7g2l*L`WbNk?IkxjfxU$v})r*O$Z$ftHdB{12 z_u4a!2Z&t)VtzNhg}do8Vv=QwaLnUO5tkE%ECGp<#)H8MBIJ$DsJjAn@juEO>nmLV zXQ=J$fN1{|V*QbXyAr&)+pZ#sZqqHH{MACFjDB;>=Uaa{)^|qAHB43{TK+vz<{rEO zSJt11?Tth~N2uG0F>n*mvs?UjqP~`>r&;`F)W!d-BNa3N*0}(V#XX*rYmV@MI4X-l zV*Q!O-a?vr?g5g=*T>G%hL*gJj2^4{4bP6in;!27b`0l)rxX}vGn^i~ zhvayWa~ zb$=B+e2VX6=lF0kMx-NwZ$vr@@E+P_6e-1#9JaWVJjyx-^-*y8iYZL8m%~pux@{oc z?kC-z7P@&zI{oOE-Ce{u)P+7?lRDyPyz_N&9Gx;;!m)ui)0XoYN6vqcoDYzk|0Fpv zZHP6AOV~kohT@BW%)W6;>FKWYFXHr|Zl#FDOTT7un%S3cP+Bg{(n5rD2Zem(O% z$c|}p^psd%K1hQ6o1|hNd=*#LLsa*gE1WaPw1(K zaV)tJx68^}=nk#CaYR4WfVfHaq;CC92PD@Op<$x+q@H@hc|ITW}3-s91{eY%KVjJ{dNr7bcP|!hvZaDr(vbdVHEd{lH z11ZGaHQc>>nrZw@272b#3Y4Z&VCH_%4!0Y}meMKlHqbkZ|qDB~e}z;f&4nsjt+tI*h^&|5qBV^!>5vdAR6+i}-W8^)%IX z^b1Y*HU2=BT9s)jJfOFpyeK)Bq+~~=;Ng+CZ8sp=tLfRe*Frmui#d?)58_#xWEl4cQ!irtFQdM(pFzMS-OfiS<-1`o&_L&_=K*Oy zS5(H2+8|-Pnxr)65E$3(7ML=UL*Q2tsb024?TtE;q8m@(FH>CcPajOHLs7+Gh2DhcJ5FAkL7Mv0wK=9{a>9_Uhn|gGkExv&k zaHovsC?cYuwC3hVEFsHcKf5*n^_4?uh)v}Cp8Mc;>PQKS^wit1KKBdXJ|fGI z^LZXSU@!`Pl(igOU{3K6UKzB`f=>RvhB{i@k6J75M@_PYqO9jE%|KjOpXla?y5Du2 z=M$FM(y{9Z!P#Rza(ri_$9E8s#4}ujNX-w?@{04g#-}h2-LMw^^)7WFB`dc+)y?mSahG;-ThO!{@;R)p5{W& zv)iEMqj;*!W3kFiC}~&U65Q^F>6zfJfyKx{mmZM`bplx9;k2)HJOg1roOWa;m{?Y% zzQvHeCX)6%%S-})u8W*n_QBABF`T&s58Pp7ehEbX4DvmB_t8LwALF{+emn~#;Kwh) zkAKmlKkLySZ9krk7VxMc@iaqP7mHZbB}CI4Y6=?u=Vky4;qlPS&vpz$V8mlEgf|Ze z-f(>)ey4(l`;<&^tfN7}=Om)MsjpZ({gVd1q^7i(`9%Nj5DApe&mjKjF%EI51F|<5 zDh4X+QOQBM5f@fR)+b3%pq7$lod>vBO)|Nu5*zWffAVA!M-?`ZzBa+L2C==U$py0q zu>&?H=#1uO7fd*rP|hC4t<)Sa9J`dY(CYzs99}aZ7X)-4hbOV~gSOu-U_{?r4*`Rp z%^B62`UOUMEd-U;8&VTz*(Q}-MCg7$WE+Szjmm!LHFX)UWZ1ZifeJswb-VrWOpt&d zz6L++Vnhp!NfrFAYLbL{$sQd0)8Obr9mCIqhzFBW1#lq$;OI&{zC;Lx>vju;9E~K@ zCJ0qzOLQ*kK>a)vsUmQ8r{LX}-R-{pM z8ELVHR|Rs`^Js7Mek8Uh57QNZ0q9EN)5{JKqgp4%dmC0CgR4fhs>9%e6RqAxsuy{q zM=2U4;1OZ-AE`pVWHkSvl!Bpf0_8h@R!8 zM+cW_;(C6HH6>ylCPL`o{-J1dFNmRojNi~f4}t_bXbU=MU%P`ILS1TKbO;^P5$odE zK*TA!64O_d9CJNsGSKjE(i}7qSnsC8le_4Y1DiIRqS#8xV>&clWO|w?x_KWbcai9^ z+3YPeE!<0-?hywG1J>HJ1gK-4_6Ys3uox6*w@Ysj7E=q$qr;8pFe5tDhz_<*_cR*K zxHJ}b7WLCJRC`Ez?cY(0#%HOq)NK^cYd%?KAVUB{vy!D`&Z<1k67FEv7H_1qi;+c;b8nMH9u6hI5=Ap8Q z&pL&IL<{?CI{eJD7nW}l>`22bC|pnV$@3|A9BSZt2L7dnx<-O&#DVEsuH1q<1tjs( zgpbNdhl(&Go7$oBHmG1XJ=w4hC!4-Ua>NbndgX5AVCo}b9Uxxg^ii5ko&Nd&1T5~J zk6ihLT|=>{X))cQyENa|L*$1a6QQYwukS;#%Cz|9s3b$`e+aA6NX6M>#9%sz6x)Ob zgdbeDdoX8|BfXjOY-&)d%7z^h7w0Pch7#l9T^;twpF!U| z*4QDwbAzMWux1&+V1dOAj%p)ytlXxwDB;*_Cj1K#KF${00r1FS?|rrtTShI<3CsgtxYd2iPYYj{ES7-c^))z+<@skXz&gqb0&}X7`l4RF*uS!3tXKf0J z?oM@ASAzT%-PH~7{_bjEj@_v~v%4B?`?*HdW2j8CUk_kgjlzCCaUGv;SPf*i-HEKP zyG~|yd${ae%Hdd(&Cc6hs7zzGC$Vc1?0V7l$%Zwbx~tBx>WOV{RN`I6TDtCwYZ@M& zVcd_JH4C2B?pPB73B;PMSn9MI(Plf)=%@xy1BJO*j7q*KZJxqEoQJf-0xlv76NPtT zw(vXE%2NtS?pen0I4_Q!ZFrh#TO}7jG(>3$NMKa$xiuJR2U4C6BsvV*SID`aD55C* zCjvW`#yRT19V%C|9g2?QB?J~1Vdqw73#s4thm<^I2jjvz+b|ayxUD2-P0BnaCOu4= zSWY%m==znsoGF!37N-{Rgk~>L&Ls(kqFz*pd5*<8kfb@+FwZi~eppLj(nyY?DO~6% z=Kel*a6JgXW>UHiU?;}UGpzFsS%qyq#h3GpRFdN_D`CVg;4V9uP*0Uj9B0$c?1j$k zP-*uP4kgqj1}0J=-&j{Z0{8R*#C^QP(>-*g;ajGkN)v#%J3z9+C?i2UwS?qlTH)A5 zEbb`cd79U)J+vHnIsf2BgZ-$-Xu>;VM|i&3%Y!|ZuunGx{cJ{>=~2$JXUJx?a-wyn zq{RT*Z=^UL6jP`16nX~zEskBnwwg%ww!irforEKRxiFOf#?4vmBxf?c)9LT%QTPN6 z%1QQ}n@J!XKc8Ipa9mB#i(hJ3g5^~FMnFq>u<-;DOC=->%ye!=O(WP-Y}m!F{6Xg_ zm`WyZT}rH`({&IRN8rM`$Y_UVf(QFrFm(zs``A0S|MvM8EF(Tc*nIoF1c^sdecUx1?3j%y=51+K|}Z(fP|& z5>EW2M}$(VXpg7aJHykx`~;N!NCj?(JQ`F4d@zkLQF1n6OrLHzTOC4>rERs1^cWo8SR)^=g1pg&|(}@$U z34A9=QHt6$T{gOD7GzZs*xU}aHFE5Jmf!AdfONZOAT9OVosnEGvB6WW-R-Ju#z^Zx zA+v3tW#DA4;T3~?2JT+Ny3deRa>a13ky^u(!D@RRRs%-tex6*AcZdO)x=G4p-($n*$=PC$kSs{Sfb84U z+Dw9C++=BS2xcN-_L4rhoOG5lu^kTE|V#BN?Td zei=n<$=+wwI}VBSiG&CiX`JMUPpc(l>B3oBY){T+2FWCwuC@-D{b7ri+2Z!p1yBLo z!ut&CewsHg!cX#T$L*yblW#k90mrv5CId*{cAC|I)7!QgvbFjB+!qCNdUIRuAjSBV zCi-oDehKL>rOl?J>+P9yR<>@=srb%$do~e#4tpudD}5;&@Q(V+cHV5b#OVJM7rrdr zXXUfaKA&~t@ro=y>yO8_cAoeuRws5>XZl#~7AIb2BK;2r;489p^bVC2ldCh%UG@K0 zyVYJ>WRb%OyeqS)hZA2n?zG|K9E975Sv+9u{=tv6J183+tb(g!^orEtvhST}Gxu1@kGAL_U4?fF!#!cpE%;sb7Kj zv&&`J=aF)Z$6;VjVilFP$H@u}<-?ekOdxgmQq@CYz)w)Bc&v1pGGfg9w(>3BLg zWv3uxr=FmbDP~9aj7_!$-Y#KVqU64KG~eT9bkf?EGaR%r-CLgkduyX%K5LlIxt6s< z(UTRH#>Nc=!vB=%l9>T`tpo{@Sk6ZZXd*cS-)ecQtFCgBH$^`TuQ{rm%ITHDV*Vypj) zMA{ig_MPG+Qg4^e2kDUUIO%- znBo-*HsA+D>Qg2qK6dRwd+#qWC9;zzDj>d^$ArX-50hyiyQm&UJg^y^Ez5Ut15}9z zIK&N)4Hw*CmUWNQ(_|3g(Dqssbgh z?e37xAb}3)jSl(R?vO7~2Zmcj@fAUMI^-MtHor4cUuQG5t>?D{wABmbweWYg0mM4i zv9pc+Jz;-uq#QVVIr*bu{bZnp9a99TAC1)aHaR@u@H6-H414o_RimS7rzE)Ov;h_YCh&oL=Q& z5Mi%X!_av*p&+i?tzcK7U=Ju52+K#)i_#SAP6`IXc05SGZ!QGNBY}DdfpFb!f%Xsr z6+@towm^HP3Dlbe>X=iYP^=*AI$b9ctPe1(g0Kf^hxf?Y%#7R@$nYavw_B@X(x4KL zxs^u?!_m&RVj-&bxKbFuQ=M}uh6O^fn1w~2c(b_-0>q2R>iYtPm(NjL zSlz?^*XUSM3hzF4ypVHA>`x>#3*_2u`yn6!+ZVz1eZtXRw(WP} z(N_20z`-i#8Sv^FrRV{~F=f)t__08Jy|=m`ok$ruJcUo&H8*2N1h@RC`b#!L#OQjEAYMk%T)SESWNw zyqRwEd^E$q0V@5Q(+ee=P(3-I#yb@&s@g?W)#06#s`AFB`sx-1x6A^;pn?}<>DITZ z4nx!E#?}V3XxySIt*SZ{wUsSRwGDG^1XW4uAlpS#wS&=E)-<=SwwcMPAct0xMb!>L z+q4AgRYladbO@*u9YMws>UdD>}d|v;_OhWx)2SOwWlP;Hyqj6 zRMYJ9s#dg(YMnDD(c~envsZ!mQipg_5+9;0SK*WSaIYS!dWNhW?5Sm`&UFyamLMMT zj_emZP#0#0Qq}X(AY>o4xFzA2eL31PWGC-s5iWO#Uy_|TLtX7at;`Oksw=3W-Xnj1 z+xFKv$k${?W)?R(P^+^;sp_hnEN*s?*W`rxqXV-pC(NH6nAN=kxRIPWhQdKv*zPYNVv2|8mV#u7@MfKHlYiARf%A+M2hZw51SFzHPsGqMa--GLy zD9e@Pp=iNi(;XK5i0;! zLduxx7Fa<{J_sqdVTDI?$uA*gN?q&R+6HQqGs#x8sT!uJIdz`eZG;hka6KiP9(n-_ z*B{uQ^AX-WJ)&wwx>D<#w1Q#5CZJ1p zA<3>-vgNtk2^tMGiA5eYTWC^LchAbQpRP=4Y_4soZG`g9bg626rPR_ILhmj? zXx=DAX^>^TD1&vfoF~f!N=*#}tHtlY2}1Nhl@L8}ybwKboM_jM67Yc|B-{)MH(kJK zm9l-Rgr6+SiJ}ZlkiW}yWo%PZV-tKO5Ev^f%Vc?|EDw?8aFh^IJ3#&(DoS+_>?wRL zsw+oS*R@h0cKl`;Ikvj5u2d%G)+ZWTylq`@@TIDjt~9ufPA9AC05ptkz@ml-dg@Db zWprahOJY&W_%R+%0gh9uHdt49YL?w`Bs=F2zq@n^`2SY}GqZFex-hU_@2O~7An+Hx z2RUuvAz3~sv=5|Y`GBmyUzYdD@?P0~k1X$&^>@kNcgpe(S^sDG`*vCWN!H&ceh2?3 z%UfmpEwWrE;ck}gYh`(pY+obG8ztNg^7r+!TrJB#$a0m0yH5NLUMtJr%l2zzd9{SQ zO157q%ayYI3R$j@aF@&W%Vc?}Y`;X77t8W@68<9j`$Ab>Aj|V*`+4GbaJekcmF?%q za+!oXTmD`u%d=$t68SqR%QHp2cADOuMum2&-i=Cip%XP)b!D0-{;Fy-;zD&(b-mZM zXR_O$oHdS|qANAE&7SCArfQ3M=(rOCsut-=!czf<4QBq|ArO2{NFIDzYOnz%jnk)O z{QH}Xe^1Kz_g81UKANt{!@A<#KO93595MfijKLG^lBec91N6ZPrf?c*IwtkJXLY5b z6?+M%3KQ2$U?(;;FXjvnFXR~M&$l(w5no>yDyy$Ko%6D;99CUlU+w82n!mL#q%k&2 zV|*?n<)?yz_K7f>`mRIi?KVQzo4G>P#}r?L*lY zzA*N_>@l%wfRlWX?l&T?!S3HXcK=qVHHkkg_u;AaYp>lsyU8!xQbW_WvT2m%9nkZf zyG*$r#|z1Q5zgnq)*TIAUZ{#;&+EVB93ekvj1X1*u`TYZrW!Pt3=-_;fi)IM4{?wW z7)mpCGPH#eR%=x?&7eu!p09NUcX5M;SY=4d%J~{A6}2lQ7QWiW@cWUjV3Av3v@!8O z@nWI4)?bvty=2)>l!3kmFMtAl3|;^QdKX`KoX)W zZI0)Su|_xq5;P?iB$}ENHJ(PX4ms3NocPF8I#A-`g?{T*G5r#6UwPkuWHai}(i>2Unb`*E-NIra=p)4L`k5QGz=&@{U zPkcNcAed~N8lDdGy5!jJ8?b*^kb8zoQij#8~8 zWBPy-uGH-KUuAXu{5s##lvFtra^e`o-q;~Tp8-em*PIF%AIM?@J5Dc7GF|=CS$!|a zS%y;9JUh`)!)JbuT~zH9Lz(3xb{Yi08H`7yMcJHA)s`5_iGCB4A0lE<%urW2WAHLE zkCt*?nC<6~lFH1=;dq8wZ;C@+upRB)EcGNw!kzlo< z;LOFdCs<`Db=CE=YOrPX95P&MD5rQFkjJNb4O!onTU1_UC<`+xSGFA?)}(jRO{nnt zsH)wH8OeLLs%q;D?B3ncE<(o5{uxPB-eO?=mkzlWEQa{|D2O2Yk#zA7h2^vlq~+e1 zmVZxL{#{wVBg?mC`&$zKO^N@8#NQ~}UzP2z$o7|I`#)v-3$px&DAm6?L+J^pW8i?| zXb>~$3#7W&HHkAityZ` zX-~61WT)_V4D9hZeR0+b9EYAYl%o?(?g9dpVueMH9{5VC{e?8oW@(vi;U!`!!ED&SuHkn1ub6^5tn(os0bBrhmi$!85zzP#}%n93F z!WKEOg<)lZZ=`n)XDpEHfYb${qi2{mCTEkC@lVm!K#wpjSlk-O-OrJ`579?k0MI(1 z)n2*iB5 zU@6XK7!`Ms(q@sp!&tF+!~DKs-`Y>r287Y2UWk3dN@WY5COSKcNLZO`@1UH@lCaX; zTJJ+Oxyn1S@xTan=&bCnROiu|f4#ypdo2E=xW`fXcWey15s?1jwD0eIODMWU$@`&=7vP^kW zc}7{GtW?%0FDPr3^~y$Nlk$@Cva(g#ro5|cS9U2MDIY7}DElDD40Wb@lR8hmMSW7; zroOAL(_YawYxlZ7aP4$`?AqBvS_pTpYQ{B_tH@fFQ z_~j6Ph5LE;8uwbLvC;jKd$W5B)OpXn11kN>l=>5DP1UFA)AgD9Ed2(3wtk~NN54s* zr{ApKs^6yHuFu!+&==@;>38e*==bXP>G$go=nM4+^+oza`osDo`lI?|`s4aC{R#a^ z{VDw!{aO7veTDwKzEWSUuhC!7*Xl3o>-7!#CjBM-6@9b*s=h_vs=uzkslTPat#8w} z>+k9B>pS(9nFSSPmEB4TD<&?JP9Qy~UCNx`&kuACihwvPb77Y2h3ZTesZ514af)4@(LeVQ{?yV^4J-hehO;*<&xC8 zMKg)o5-!89S_NyX!KsSOeP*;7nkRE(38NF72Qbx9aG6qarq%ESH@=M|-5;f@2`7wC zaK!icDRdS7m~f&4sKwPwk_NO3!_bupCpv-ZTDFv=k{r4Ue@r;h5!5mtI!wMa3`180 z2NQeAUrS2;RT)}##@G>66-C(WEAx*XR#JeKLB)iCGNz=uCcjk43)B>rRG>=`p~hs7 z9bZyDwjjM*VQHzRv;sMA0FN;WOG+j01PO%tM+CqDu>;@$9suz$CNcn4R~3v!F!Wbd zbt{m(gQ|O`_315n3$ak~UQ!}?FO+&p-rOSmAD=FH2Mk8_uu*`^!~ZFgcVNXow>MEPMAW)8%*#2200? zO_qWc6Xna{J?+ON22Y%5PuYH{JcIr1%Kn~7e^XZ4|LL?sR;4*6eH`}Z{8i=orQM39 zWcj?2H$L&xiLY+|ZrqXE)?AzXamuQH%&DZjptPpYFSu2*Cu)qBoVtG7_Bn~()w@4d z+9hjMDQk%rj3b<`%yhbm-07+OC)unx}OBz1!oo0@mM-HT{ zX&BAw00uiVIZZYflu6J&HJ>}Zw4I*1wQdSb+_Pp->GnP)>{p5vhzmtx+OP={S<+_HE4B&ke zruvxNQy<@Q^{pSC6+ix*>~Aj_ol=?5AQ>kyid^r}`LkE2teEn}_$hnxSIpeMA?4bJ z(X^0^yI}5h1+Dwu*?;%(5hGHjE_t9Dc+!Pkz<+*!e>a{CiB-^^ZQ-`_3*Y ztI3W2(W=%MyDS7TCi0>e*T4VNo@X!hAKh|I%8wIMl3O>(ypX%JWIQAJuep~m&boZg zu~yZNVP`&2vp(g6b`2tlchia)!JzAktW#(2oYUcEdxu%qT(LeS(7r(gA!B}35hHo~ zEhQVZL7uXwfBRzYWk0R@Dy61jB+L9|6;)Fh$v#aVzB%)aobRN&zPeSO5H~YrQ^QDB zvzP1`$*YP7kH9%b%jWiIdvwK$Uyr7Ids>4OFQ9b+qxk1HJFZ;S^uUgZcU^W_%g&#D zm6DL!Ad30bSQ!Ku$)W1PIbG75U9f#s$?Y2+Yx#Q0{r}iaBi0_t^18E@C%)|X=JfZ^ z{^^RfpBBwdYKPZdFo|AJQ&Mo%z|so5UNB2;;!q?hn8{X~!F(*igCQ)VwJpiAl!UiV zBH`&pG~9hRu@O!`jx(?Wt~+5_-2pgqyHq);b)p0==#K*2>=odx8RCLfLvSz0_y&vb zU@VO6dWPMI}NBVtmu`&U^cX^oRnzAqdlZLaSs#jmB2ld za1VBrlkj2+S!7_9-yg=JEI7omh;!WA8Cb6Z>r}!T42~+t8tJb?)CIH%m4fAX#1m{8 zCrQr1$#!`J5b@pyvCFOl?>%mvt_tu7h2NBWEKMykJRn7?dret97l*v6Yhq9fOE#y4Xv7%Yy*pW7vLObeSTC#rHg zRaRBmtIFr9@(|TFT*X^2wo6o7zG^F0ZAk|^TDlFr#a%=6)_gaJ?E=M9$Tfzja?)Wd zIQ3REidzRtJKS0^l;J=*#!e%H z?a!+jpGCf%U0hRs6>#YRm=yeq+urBF^*zA70$yf^Z=&Cub&``t^DfMepkOlofg_i8 z1#)5wNje{L+BxPDu)l~S8;tw=F^DUsm|7m<*lsVdCjomjIvq^yNtZ?9ne2Yz2tRcL z!goLj&W4}ZWMYK}=E65~DvH>qwT~0o*&Xmy+BpWaRk+ zQRt?yhdEkRI?#RwT1N^UU#Rkz@WK5ZDMICy6k#3C-?O5Q%mm~%K88E?z_p$vNoSp& z?6CD{3M@J4Nv`Fn{33=KsHyU&>O^q+DS_yV9lnDJ>Z_f#7L07?gTmc;0q5%w0{6T3DTfciVj9^#%$6I&#A0-4Pe&lXC?|UyUZ0bK^FS>@deKgAPK-l`);N0b zV3JjMWleQp03I;rm;0-$d*HDX%s^J&&pJVt@>Lg)evwAlfo2NKjuz-83^MAWar9V) zV|QfY%TlrGLcEGZ9e`Pb0(ycJY#t~BD+R!g3ecHUn^0?Eht7_1!m&yI)(O(X_Pnfd z_?1%CC@d)P+Xg9k3sdqG$He?`>{k%{*AI>!O{H-YtIPRamnq=Wg6`YoHF@284J?`L zFYMmiaGXG#^b9dz?|k_&e{u478i|JmaS2kMV_Zqa_?ih|%e`-l;n+RW4H|f{zK4T* zFf%&)jX;7lqOKlwyc9>0iu=QH1>?ew)kH{phQl27`K8!SpHP9QT2nyU-vkiH_wDg0 zvZ@>_AG05OF;qtv!zb~`sR{3+G(ptou)2vXU81^1@*xx1Z`-NMF&)QAPmyVc`2)oj zg%-PH!o^Y@MTr7u-iR8X|U8VZUsCKAWsw$cQ?2ms9>ZHP@0JhzhO2$*5N z3M5EgBm9?*=f9%CPy)OI&kDztT~$;NTeTqR z+gM1}vc4mg=@wJ71Zf*tsb57!DdfkRNkZ(#YapuRXa;2@8`kN#%EJ{_-MG30S6E5o zDj!!^8sn-MS6J-g>PuWv_PW;8ZFRhfkq27TA1v8Q{tqSxwcjIT-$2=UxWW4 z{C@%e*YXlaGlC7PmVLRlHb`_JzV&7Ba+_RRdOTI81|7+Zq+BI<+~C-(W8EwX$BjcY z`otr1T)ekeythX@KNUyMmAmB1r|aj$>u1L!mD-^=9BkB2bKvxOT;qTTkA7~v{!$#z z?a>rV_s}`<)P!>?4v7qFxSXzp&PMfAN?1Ep3H6G{X&LOS!XBtyOu&odj5Dsz05hBz z2~Gx&uAy_|aqt8?nkECHo{1wBP&VYq5YjXqnw}3$2giE{#(Vq6d;1AxdqgTSIJP1K zEsFFv73pVDgb6wnoO(h~lywUFSAB9GBpnS&^Wwc1#Cvn&y~Bj0|H_s7=E|A+h4Fe` z%x=ljFN*4x3&Yxk@^C$!`U3rOfkmBMQ=MTJb;PM!{lG1b>h_1aDC<{uL^5dc;?Bu9C2W{$zN7r0&n zu2T}clM=i&f_HDd0=#irSFjDSo)Tsqnv`G+*BaCs!G{_lD@Lnf`9HrY5*5U9KJenaPg9)>zwjPcDq3evR9CrB1 zbfAxhSSU}0LUamtAQ5JS?L=L4C@$j$@E$94hY0xE zP!YyKgqtD4+yw8O1n+Di$Q61E(NUd9fVp7-LUYWHnvGf!gdr9VcD)5s?uG~p61;Z^Da!OV z!W?emz97s!bO){%((qYG!v{vV2ZEHt2q+sW!M`EF{gB{Z!9HLZp zPYfFYUmGgIWQgz(L|ByIT_~iOqIa?yVNsZSXkoMw9)=)S!w4uFD#3ps!K0Ai5yAdi zJr%=pYHKNYI`zRLR+gyFcnmDB151<*Wf=@2qJZr(uw5$H2B)G<*Q~6UMzekbtb@}4 z2llvbF#8#t{ZnAS++aVG*t-S$uB7>Lu%A!Mnfb`=OPW7T>}PTIxEAc$6cYRs)qGOP z!r~Bsd@aW=v5=!_s2^Jn%H48p$*s+Hy2PY|b)uY}Yx|&`*+7>mF_wN2(@U9>S^tHyzNHn4Qr3s%g(MFYFzPnJEA?vJi^t)bwjMoBzcTW zG8&TPwfA0NNV1e9>C&Dj%k55*UrSTpI=_WA(_j1<(pB z)3=_vwi^D87TI(On^QxtT-&B_16{WHdp0GM09^GaXmO~$_XnXxP3VXA#zEauDm$rB z{~kK^tC51eNvA{YjcJwx!i`oaIobUr9P8SzCgW$2od_>R*%14ZR6$i{gQ(=xf!?B1 zz5Y{0Piv?S`A?;_IX|mih*x+j7q1VAS9Gc&9*2Z@Q!V0Mc`E2TK?ow^+G_aT{N5)u z*Y@pcrnAyzYu@0@wI!sQ4Ro2r8}z?tc)Gy~-pO64W$Hk0Vk+quN=!xU=YQD=eJ8G$ zBpbiNuMwKq*wm1m3b~V04Y_OIKh-mc7~ch)Z)@;v#rd{keA(YfzRAt)jAt9-+2$Yc ze30{O2cB&iPw3A^ZHLtGfpxxqxRY8s^95xnT4{`;Si*}(c|oHNl{9Mf(|Fh8tnf{7 zp|+_Q@1YKxTF&Gwe!`z-UsS zWM@OkRU|{ZRK8x#BJb=>q8dtXJn<<`SG2R^3D3k~lM*|-lg@h%vd(7*P^u)~YAzqH z8!X>iE}t9nISu(9|{PS}g{6^&yL*P$`ww91PL9H^lBx^Uw&@pKYzJsLb+QX`>_ zBh61|(0CIb0fJ7{WEdL>1LQ&B< zt&ybgfa2Y+@PMM}2bIu%h2j_X3~o^APW}cJ{^!(xR6+-0G`Ky775&1_yh9%%nGXW$ z1~u)Wlvye}0Xw1AM)hhZQcQ>iNUjWjD{FI-T{R6(9?)gQ@ zIIMV%G(?8vNE!IhCaNBo7iB{ni|k4_ho``bg+?am@>FX z2_1#eUWdK#Cx_K4zGDi`^z2SwC}(j>#&3`;osOsN;W?)0zbkq&kxY?-?|@_k0o?be zpwD{NVk*_m6!5)6zbn8rnbGYbm^Rc57r+cQb)Z*Ly~l+mMusF6W0{R-c(LO0HBtGz zh5L=^aT#_sS03eQqUuB2;>Kh;Zq=SA-53(>I?;+;fQ<to7-xith|i^QEbt?kXMX zI~$Hj4&3%nMa^KRsC>;M>8Rq!MfBk7(=_6SlK+d zZm^B!g9L1JE^L&cdVQ+5w_&3@&;oU62^PwT>hH`570x5I?*^PFQ`P?!JuVq8)1tRU z3u9ac?yS~vr~rfe0I1tLh#^lexpA==X$}vMLWU(y%p4ZM z2S_r|uZGlPk|5DhRNt{ZH=Wgr3bb;CNP#4y|wBxtD`DuE8m-I%N2b<y%DXO+J zCeKqPXUj8mt1=LBYeFCbbostiHNbUP#w^L?=UDUoEEqgsVsEVM1Wp$j+FMgYPt7AT7Zfa0d22DggzpjcL<#o-((ftWFce$0U_RVn~Bh5E0ha_J|;q&%@K07iq5qV zvVedP@9)=$(ACVumM-6dS_}f1yTOCtO_0DKIM{KZ_gd9^jWG`1LUm|}N?l}~r>~`0 z!UpX%a3^D)=EL%O^0>FTM7VCSMBBMUhau54)f+Sky@*&g?w=fgE`y0B^6zT@^YGy6*ZX)qM;^N`D z!Q$=V;@LW3CtCI1ta|4f;(bcuT>|m88{*M>s-as=p>7Tf6`C8q7VE*=Nx;2aKwLLi zz%RLg%^={Ns&~F2-B%>tos6q7S=^(B@*wU$g|C$8b#np1ri9RZi;NTozXl1xFhfY6#HnT^!N7O^m)?Pe3&ZZ@$T z17_$kwC^?}`4i#Q!ESfPqolxbKzW`}O+efzB8bhyJ#EB_=V8+*Q5+Ys2iJ>eB_G7C zd6=U?C~a2uBJpTE)%P@;QEk{ai^|W)#N=*ZWk6KzfaWd)yBlIVP|4PE&2Zs)S`9G) z+1)^@?^#kTj+i{mf@)A2fuGxpRb+EQc-E@00}3CB;}i_21VCAALWyLKKno~kK(vU2 zXaR`5!q8Y#@GeLS!&qc*iCXv!%->+2X#)}n?4z-|S*dzg7(UY$)lePpSV;Ps7(Rnr zFRZFpz}QA~htGV@eCBiJGaY~#T7&k_O`mx&>@%OcGggynI|9n{qG|&2uHLQ)%H|64 zG%K~N0NHu3TVJALw82q>UsJeRX*!lwEYpIWW08PMg?)MhbE#CoMY>v>HLy~4g5k#;MyNjD<6Ioy^N;7)2G2)1Vd%0!Pb zXcgZZYNTZiUJ=0D&|%prifmWF%J4L@I~{@JiB0aL@Vf&anNhZ=o~`7EJxRfcJg=Pp zNzv*>v}~T2|3PPFfCM`8GIZwKs`pK!KhGht-c>_y#_C9lAw1xu(O9e#hDRKNLE2z` z|4ZlgKjV`^+b@IgS3j7)Ydc zo|L2{x6Qm2A4KGL5@F5+$wgHn#AGsL7y=*<>OWAU#ymr0p(w0=Eq^gX!1=`M1B-vB z`aTNBBuvEH$QOnYvyW60&~WzH7B-0wC*ol#c!&~2OrQ|}Vv%7aF?nCrx7TAbK7GRR z7sb^g%tjtrGTgiPmV#5;z>CkJd9ehF!sBLc3G36K8ci76VV^~Dh~`+vWU=K5v&tBf z+~&b`gCiCle*`E00?U(cRqr>d_bbECClTYXz}T{(7@SO%-!RuSwz`5-sP0<;B5$u* zc{M5_+IRmzwCg|uqPekce9#c;dg65ui@I;k8SH2Bk09#xFIDJ)+pcffWH%L68HZI5 zYoEs31uBQ}945@^Xn~+V{sTd0g9HTKk9&;YRPRyMd&Cg;Mzny(9A3;tq5q-kzajk^ zy>x?dt%YAc49=tG9!>e4_%pP8{sTr8FTR9+V+Ka-1hQrs+L8@kg`Y(UQS|+>_s9`v#AaNh<6l^MUXH0Y~gZv0%$=&`d1j zZAjtB3?>pcF9J@8SJFsyoX&S%r1WX6Drs;nMmscYYNnUuDXktxbz@2^%H`FV(u$uA zjVxu2DXomdQyWuS)sZ!;F{KsG8E8yt^>g`=DFG*SXdJy2}fL|L!xohgv0@yQ5>}fHugMWd2lZky} z3~an!6y2dS|AOG{Cc#@{5WG3IJI<}2sO=tZa``S0=Y!_X*o5ZSPe@*5O1ChEboa;h zqkHQoY7=?KY$D&7P2?4m9|bc$SRPh!KsvJBaYr}f(Bk?C%eKdmM@<|gWw_{W;WM@k z!Unk8IxwVf~XR6{;mD$@ULoi;DsH9faZr_!iL&sq`$NoX?Ekh}?kLI7l`k zI(}7Ory#~37W)4z^#9Rhbr7<{rVe&IJeE0h56!Y`9y39H6I`t#seC~sBc&Bj4OB~{ zBlU?S+x}1`90X*|)I)h-ZMHvEsb3AtZaaMOCekv zIY-!GGO}z#GOFmb%RI@fj67Jr7`&W&!Ru~ z$?#e9?U&P8-~7|iv*^7LpEhHyA3DR`YIth<5QBOVe%fjMm~fV}=;r_isgfc-CY{tq2b|?B`cJ_3TzdQ7@*#RK>Hp!g=nKjx;>_9q)2GpM z5gT$IeP<{7B77eG4tP-GdGwS7q47NW2A$5|cpg1Fox1Tn`o{C<8_%Qv|MPkDHYr7O z_w73_J9AuGzX6$pMhqV@Mz(>1;=Zn|tV{{_Y7V*0 zq9v4a_)6L{lm2^W+8b+_WV!9W5i3XZ>u~-~_1Z7CJ=~$QP5Ln`=djG&q334}%o#8k za@Ld)d@eKcAW%@1K{CCH!9c(P z!bw?lUtd;P6Y%#d%`do$rTe7{e|a^_V}k>+=|)Nl#&ZfgI^ud0SO&kB2IEBSE{X9= zJ35kvgUsNp{^_Iq$PzHSi9L=`enJ%oC&NAzzQCMotib1Ticd)Bnr$`cDlaiX6XSNT?&gSkxl8dXnvmB)LPfO-;6Yl4Y*Y{*JOskv)psO_3i~u>(nGv!`gbr29@| z$MK89;UgF|VZ9_6wdw~R^C73ZIJueJ6lUpz+@)3d<<+I|`{5PkK;`{QCtULm<_B~K z_YrDAYf0)3*OHQkX%hG1DnGJwOvHKagR1hUlYgX*Mh*miS8Oo^bIC?6_9xnyne3HG^1>wfyChjnwq2pfyA!ZoTG&yO0Eh+1eu4EVpcRU4uUIcY})AB?)AxR#YBwv~&?`vgur#4M;)fRU|DGn2_ zL*DO4gV?cl`12aco3cMq=G|(QcYCtzX(dl?W&5<1&C!}V*Q&vMXn+w-r!MCp8jlbG z7~T`nsWs!kq{*rHvqnOiD?GHFdNh>?rXT)JsWE&^6ig%G# z02&t|>L5pforSDS9vzL`79)|M*-vNpa{|Wml*j}ZKNW&X8*C0tDo&Q0tnMIpO_jS+ zZVNj^a^P4YF3gDRJh&J?oH>K>ulun7S4BRHtWiBm3K45d0+e5Y99s$=Wkbl}Xiaqc z;{@}9z^JTj^FaCs1nJY0(42>p;{CwUQJElhNg~U#y72kT)KqtJfxk)(FzYl>lF^%A64 zDe1tdigG_s z?0HW%NuJI~I<8<)hPc`JnBaxC=5m0)oBSX_`hld$9x@;Y$)cs;eN6AU8q(xa1oaPP z(S)7DUybG)So8Gyo3k||>Y8{LGrSwf5&8Ix8nht&90PfvBS3~>NTKEp=BM{k&6ok% zRP#2gnP85Z9ORY2xor${9r+^j!#sZxWxYkqTGp~ZhK65>y2(>62HYo%?p{$x{)RL> zSn(xDGpSDaaW)b<^Hd|0Fa#jyG4dBNG;=L&W)uNH3kFbsE{Ft4Cw+`Q1s3_9BUWM) zhm?tCp4cQoxGmJRj?eK~*J%l@%rBf$Dx!*b1bY?juZZtbqzpVgaK`E4+b7JsBgA?B(S5 zGdOza77iwc1XDRFmnlKvka8?nb4HIc2S0QfV^LtX zc4vF=Nswyg!uXi^W7e<{IRi#^?~NY%4}<%b`Nfa{VHb0FERh4_t*3A-YwTFWbg@ZY zk-CFt!ZPQ@rpS>JoQxCkgLqu`BH)7b^B+f3)zMb9yHtBuH69_4jj?>BPxT{!6tDq7 zfv<*=$^fN^$##YcXAp#QkRb{U>)04L>AW6WEwf+s5M%x`qS0aAultz3{VU8UY4*u2 zOijn99019}0{+@SMiPe2i4?}i71SUgg+nx(YkXn1VD}J)01~HP&L?>!zP$e48}GxCnr9aw&og32jo%OmW8lA~L=8~XbvmK4x@dsXcr znjoEQqL!1$#xjpATVH5)c#MSzmx-I-@Q{Cr4k{Lg88E!R#Vjz5C#+L$O(15-Nszu2 zgWNi2{8gHmWM*&bA2Zq^Y|OAxXGp=zxUE$~_VE3k>08Fi)NU;7sw&Nyb|cUo3AH&0 z?`*=CQ8#iX|AmA#j&5v-LH~3LbcRFj5;6Bvvd`dABeRC*4a^-$_cOHG!MaOjLmCqZ zX6kAqV-Url`tsY%VAig4s&(w*UDmIrq_l9TX3$NVCE-|%BwPbZ{bkH1 z8jv075!Bh+MuwM+WW*Ds61J+KC5UyE`wdHX#B*m?^0^RWiVgbj7)=)Y`F?^WjtkGe zPPo<_;ab=|3smJ71fnOVK=t^1$8Bt2hZk+Mgk#%#Mg;wW`}1}dsj^Ees{JAwn}KSH z(B;8et9on3BgapC3Jl-;P&A?Y5o7-8#pu+V^ypwT4dAntY!r?9k|VusIB_A;Z5lqD z4&Dh;-FcG|q^04Grk*r=+Ql&E{?$#-e=G4)oOFrkR;V5wF~;ZTBuKwd$~qdwRh5?1 zfUh$#f2*hM2y;4tSk7k>DY%8<{SeW{mcN_PfK@6sZdJTZhgZ=OM);8%9q%BdM(bC=)7c3oe0y530N!R#5F6vP_Zmgi zW#>S4`zgl$aJ@v+=ms1_o7;FYu^2+`>n54<1FMZW?&>x7$R_nxHa z2ATJ)WJv_PW;8ZFRhfkq27TA(ieH^*OeBUd`WV6}3i>H?Vx!0Za0n(K8hncE4Bp#WP`Iz^Jx}$Xqk8)o zhoH{n1L+nTNJuEs2fFS@b`mc1E+y?zB;?b(B;wd`9B3BYgm)i!x-VEkwA#~=50B34 zyp?F2Z>2#;?bc1h(rVJUjc5$D(xAj9bf=1ORN3j(D@Ox?j%|Rth6lB$Dn0t1+AeGwC*BW1JxK<HQ4~oUZqNSCGrP{*7QcFA{ZE_Fs7#xd-MSCj`OSOfErIvU^+Uh>yv9u#U zUH4UZFmrE8QfOX;vdOwE-|Tttnk`Oa1iVRCDbnfq9nP%mm!0e!-}~#N7wT`22~&co_dVj2JT1TS!0i=h(K#M554W^f(wL2D-%^4fLmD zaZiqoZt*k&{aHf)LipGF@GocrYi@Uja$wnQWZ7*_eFW7B4_ZMOBTaQT#i6yf?rF1T zW*I!54`Yx5F)&D7E5^z&2FV-)gEX{atR{?ZiF}-VM0$)QnfEKmA%$`$_x=z;Ex?3; zt_preP^@*2Qy)c8o8of%jHaWzUjUquB~_9RZNS;+7-AW@)JA!;JfqdnDDuH@HKi+s z;{l|>bKOfI0mr)pj(3sj9b@?3%cut5S9tL%3jH>r!k17XbdfO_^vf)&zD968gh9R` zRaq-k9ZOI@D=ZvrA*j!h&4~=MpP*PP%oaIqGE?#_5xCsu42@xt2G?7-WnTv&sDJ4{ zP@i6~g8ElM{Swt%qNN)ABjf~Wvfh|jJ@Hs9rs#FiR{a4Y_m^94`i+t9Zy>8pKvpIdLxfxmB=~9Yi-vNiR@of_mz#&2_ zFYe}<643S2K^z55#hA^~3npoM>q0eB36p-GYPgS624 zT%(32$Ef#Rt$MDBHr}70g6wjqWkO`miWBD9wkd2~)8?r`pItoz zVM_xrsg2zcNq<#z#jm7gw4rdG1zP~}Y=5i^WmJu70&F`jJpWPkDJt(E&eahaA$b#4 z3_P1jObsTwHjU$qi^F$K8L4<+>MfBjk0^H z=$d{9N3L&CC5f7C9;nseDYP|6U=EpzIplg3xeG-`zBZ`Vr}GXpR2Dg}PC*mIq10C) zBr;?np6-NGeY4fj^{99mt7xMlEbuhafwEqC02YaNQzV|^yUF4?46h^M-K0kJwLZgQ z=FBojO( zj`CHcq3^-9&Nl9P4(O!CD?5i!R(rEJ_)8q3&u@bCv%pDo%6n3 z^)M1HkO)mTM&}=o|G0hF_$z4muz1D{>jnrs2-gkvptC>%9`rCgXtC;jQ1w2bdhb)c z_o&{xR3s`C4%Hn{(5fejh+Ygm$XqBK+9+F8>@|TI_sxsYV&-l@7E5g(kVE&doH*!X zd#dkI7AG<|^K*D{9&zX)mT<>u=-ve~NUDY;irhJ5J6NPRSf87DSdbeKjKnhVUqr(v zXvp|2z)8}0+~TvDe8J{&&$Ft4qIJ|J>=K$#;R*{Bt$`w-!WD||85P+TVX-m9J4;MO z&8hb+!y=+5nf&NMW|;l_hUP+Gd!A88IY8+mx_%P94@U7oi|6rU}OX^L|hy^(z5s#LA-XZvF2);6jFGNlOygok(`?vF5QqV)#FGI{tNJoinLYDAQ zT$54lG?vT@N)Va7hV6wZ=&y*Bfp>U#v3Hjb@YWL zMWYm9C#lQ3gc_4Jr_;e*^mn=_=($j+r%|~AbZ~1Y7Wvo0^tUt`zl?{A-eC;6(u=~@Ua(gXN{ukVMK3Qg$n(;nKbSHiJh_3EBd0jqc z7QVZdGXFKZ-cyV8|AL+FttG^NZG7AZ((LZ+eq4Ay7JadhzI;M`@gT0E#>yf>aiG)m z9c-+8Vi_xxzY>Br>feTcEbdUi1o_*hv&baxZoM{#8h+}3fU`1UX|mht%*A?{H* zm8JNCIqOwb-^>KqZ4ux-ivU|802`vqfWV?Do7LEWe}ZV(Jh*P~toAHOU{<62k)NsF zPmRfJ1*$`zhG(46XW{Eq-&agNeoy%&8DbT{JzuF-4AX?EzOPj)I&VNsqK2?SjLvGJ z18@sx3-~uN=%9~MecwdW2@xG$%k9sozkphp3)c-c*Q+1_b2Wvz4y)duRPQ0x`-AE| zpnCVK-hGDkUIP@YvV|90dGR_g-r&WXym*Tj+fan|8@C|1E4FF;b~uY>%Zy*h#_s{f zW7G6sRsAfQtk*cDU>{5@WFVGl(Yy%l!=!8^g2WPJ4coceK|FpH(>1@}e2gId` zrXN>zH5u!PxmXgML(|s}z}&8Y2Ycv(hudKW0HRgchd|XOkc2!e>0?GS%@e1ws(v+C z`5_Oar@6ZKksY)oubkq3RwIavg;1 zOF~kTO^aOXm|S}Zw7C{K0T*7!S6C!tkPewityN3E@K5cS4gk{WGvJzX1kf=pv`}*- zxD51Z!36)DXeTh8Wdr96)UlQEm$=AC)I1#YYkUL6Z#YKicz8fDX(-w#wQDg>luica zeT=dvQ3IX*L`T*_2cR<2qcfvgY}K#E$h&y}fT08?b4ww-FG=&XWb*$&RFKj%vah4e z$h-F-f&QuL9U|N!Cg>r6G7J2Oi;QH=lf;<)ESQ}Hg~Ni`Nyv4CG4mvoQH~PY7h)aU zk352#84J+4E=tFWf?enIX~jhPjS%*W&A@kYD2JXxsYrQ_)_8W?XdO)C62Ai_qcw3m z#yI2R1TH+S4CA(8lx_GuzJ65IyWxJHjnx4pj!eD}2?9~BD#oZCNR-eOUybdsQ#8)3 zDVjW|)b?WLufBF-SdlA9E_|g?)r>@VSXg5)*z3pWUi4+B{yV>`5B&sIn=H;_?pU#B zF^AB4*wQM7VOD@CAXLFn=Ai+Uu^qzvklJ(lv=@@ck>u?)HbKYZI-`T;;Q}@%0j*oH zhG1+LJb_y4e<;t?C0Py47-9<`j%woRKz-Dbh-?rx7#hn47O#l#79J}3?Mk0hg)Xf? z&U329oI3^A867nb@9#GF#)p}&6SMv)#2F6Y`a2HLj;KUBKxe_44tVf%=4R}G>x@** z!#Q;loIHPr(`mIise+S2oK)?9(RDN-iAs`a+JB(~or0p1C^}(9Pb#^G3tzEs-jS}m z;99=|Q!9p0a0HE3-Vtztw_IZ88Lekd~UzqWYui0 z7Ooqt*7;nmKH5O<*@hBBQ5QO!=F)S{VS_ve6`sDtaTu;p3`fDDQWk(RGN@$)!DQ0a z1srCifZ+>h1~ZCavIu50hZ!SaY+*VV5llag^AA^FjB5DPxte~CMtA-F*lMKtd3{-# za9$=WTb!50%0yA0BzOK>Str&OY!V4(^FYW3d(AYE zfY-FeP1WU^cdX{UMDt#xdB#Y|ox6CqXJz>Awugho+pVAj+6 z6l>wH?7^?gSEPB0F%l3oaA!#I_6joZ&A{{&X}X^c5^?)-rRKScSDCjjS85?Y(dT3} zUnwEq0%W~Fw2(`&g_7P!<5S5)SXPF{pw|(&7_tdM@B6Z~62D!#O7k#!w{vag6WPcG z@I{~!^Crw3DM322R_Rl&#l#F-Bj(epoG3EBGR;#?8s0&oL zn+pr)*{;AkD4{>=9JZ_;3CPI6%{pQMIC;ugF9hk8zf6Ma0Xre`^KQkxZdO3gCxX-C zm{;CI(v8<@-xfOz9Ci`1vNUgt?*(#bJcJ1^xhre?#{(o*C7EI&u24M43(Dk%Z;N^H z5HB7^0RhPe`Plp)G@Yr(l4zzPAdsV{`l_{z07<_TP@ZbKdYsF;j2BPvVmU9KTFrnm$3(uYiEGiklcAALB&h10FON(H0Ix(RK|{FVysf#v_m^ zz~aPNn^AhrKJTKu+ ziCVFq+(2@EC)TIeGZ~>HSq;5|85JGP#ssF{(X;yh;j)s=>2nQr`bLo8j_@+caZThx zGQww>`-GXlLd^Gz7aga8d4xx>{s8b!7aNeT0$7M|iLqOVCG*19iI{bOSbSCSU3>CU zy+I@a&uLlaQ*L&}cfEGfLcdA0uGb=Bf#RDQDNLh4Vbp&n>UWb^DJ^I@l>lD{P;d^p+XAyb z4V9zuKlC86b(4Iwh>2WD5n%}Y3rGs_h%CLOUu)gCM6*E9@~?h~NZp7#;_DK2H}ETQ zy9H8NR+izfMB36?=gRW8NGfb)=}zS<%WT@B3Y&;b5yQF;_Fj*%n*1H~NKC$(yo37j z7^>K6@;EL$OEi6?xRIR)Q(Nq6Sz2Orzva^JqG@+y9C`!gy?nIGI8-vyn;z9Xk41UY zqhY5BI5gidYI>Z|6W3T` zhaHzfR>VVda@v+4SO>McIW^u75tQgvkXn>l6QxVVltGDvEUf81LEJV#DofuQeav`m z#LN22m&Pg>fa!Tv(_dyviyQW>n&)+1W!|uF)j}_` z8+OJ;^SwdH!-1@C5-l`hV%)H=z%-5MjxL1tW7Dyx6sG4q? z0{VJBV%c5D95RH%x#4z*W=p? zlSqQin(k?Z?F@vh;9|CNqf0pd9%m>Di@$j=nTtP#7gzJ*8Y0DgjW6l+$p+C!7*Y5w zy}E69D_a{f5!*}Wv)a(+@c5zzI5M^wPs&GP%XuA_?0Q}Vc`=n2(@+R;`MU9>#qA_z z#uPW`G8+DY$kR!z?eu;D_HG`fF=82GcSykdsZC=cP=Kl4B_^b)!=y#2FNM1@<>m~NSs$_eGas%)+dmev%y#pMH;YYo5-IMjmODJ(uE@QP+7Mx377#7Kb0U^|58p?c z{;9YTnuLdZwIM)6?AzW&L;!CcH;ARv<9r{-B*I4)g9sD3hll{46R~Ur_&$l+`>6#1 zB4WepULpc`4q~}8^6idk6AMJxCifGO-I|!pENhhq(13LqrppGe!=3;MtiuK=1HJn- z?>^1@wdVa&^M0;*_iElf#yV^{pfD*s$%|)Dg!USXD@pBhNDF@zi>rg0=McLSdKSPD zFT!xp(X*r){YRQq`71Ft7M1pdLlyI^=YY&teO&7UGy$$aCA-C0i3`s`P5<7yRQp-; z9OhN#Qtf9g^gUauF_|^r5hmD+zz%&5hFFZSW(;Fv7eKs-p6dIB7_KA8uK|e%$B~dC zNbpy>Hjp^KX!X;SQv3Y+7a+D&-%-u;D--f1(A0Y;TPF7}AqO5>N6KMw-SD)YjA`BJ z`;9bsxn2#-7tCHE4SwSqqvvMIIMY&5Ro@YmLD{nUV~X}6KR~NeW)_N7zf)vzkz}m%IZ?wY+2- zDw&tOhYQa!&6EKXrUMfuZibe*@i23()B5JXelq~?gUH5OmiIk;6%N4dk85-S*B#ez zA?91PoY>;FJ4hg#2QJ*;!TJeEV6c|78tAn-y^_;=+!&y{(E?-d;l*AQdQhbV65f~LdX8p}Ig23FHT=jT<3Y;TK=ULzLpD&Pm!CPsmPGLz zqR8v(rbzL9j|!JO#9r~-N90;M*}GQz={mv5tYriYko^wTaQ%3vhw1x0abbF9LCXvW zasGioY#v-UxIcda3G`zvBV@0tcO_-{`1>7I6sGv?dkRT@3{`As{D})sJEz{(88xU|gZVRT1Dqx# z-Wid@`UFrzZ2=Y@)*YA#5;FS`!LIb%4O;s?&z7nEYS>SP84)Oj@L@_Q10#ymY20_& zyC_U#S1;{BR*A<XSHqwuJS=0xb+U239AcG0D(n6DA$pcXxDIW-O z`TC=&wtW3iTZeq$H^$_b2e=WX6$K^b6Dka@Dv~HN)i0=-g!|LWL+b%?7T~@gW zZMCdYY)a`T)Y?`lKy|e6unQMHAB}aGY#f?uo9r^w)@`ytg5fLwPLRfpLi#YnT;P}l zb0ykf*#DSNQ({BO@+36mm0ax~Qhs4YRbh36SJj}cU(JLG{wfP`m3bA2PdAAN1@Uxg zwhW()gL}1>IM^Wh5)gUH)X%Ygqj;0N|xuKfy>@+O28i}`)st;lAXMl zi7?+Jers&v4C)>eYC&u$S-yiB$}IACHf;ZZiF|KtWX9rQ6KYXxC|O=uCyU2SLq7<1R*iVbRxFvOE+u7g=hUZevV@Jcclf5GeL! z%JKyaAzZ@{el`&fp?O&TFmEmF;qOHC3`P>~5;Wv!GhS0%?@4N|n~R zgc74d$bLYS7-C;ls+cgrV&|6uAq;_<+{X$q zq&%vfTH8ONS%?Y)ZdTE8V3}?5!y?O$q`DKi;PkwN=iD^ z5K@((>;0}opl__#f7L>q95i~zxU?Ws`R75?YqdzY-`|~2smbmix zjxj%`mi*M8B>!d966TpZfn`;VWWiaFRizkhq-s;U<3BK&4T%%4;ihw3%}aZYCg?XTnh2|C@6{LcSRN{v!aqCN4g>Pi!A$vtabWnK|KT`+?LbJx6+Gf=Wag^ zeQSz^WU&Fi#r$OEGF8ee$S?H^!w%+t@&@bEN@(08Rzo=&y2om$Ktp=%hD1C5IT9VR zV-oiPil1iS%90&Z!mh!C8R{mg(y)@r{z8_co_m&6I>%&=!<;-!E3pa2$$Sx%ZWlr6 zHXf90H;ejtqJFNZzX_cUC$Y`ur992-^y_2CplfUU0vU6rDwSAP!Ln@zVqYPWYSuQ1 zY@3b|Q-b&wmK~BmFC<(cBz%rb=y;Y(=6Hs?rTs}>+Lnv&Pl)f2@=|`pj1Y@sYw%!g z4P^O&`n*M!??Vh7k!_jQWci*L!CjW`Ql(;%*BA>be)EAP29@+WV6{FpNR5fUhnuwZA~++W0&~;A^&cFUrj-zvfFp4tyuY< zfZHzc-xcuNMEyJB``ZHl4T1lZIlc-9;8ArUsrI1r#t zl7FZ#NE|?LFUI{OWhAyztYN78RjE82Uo2Y~`!IGZfHXNUq`xKb*xBueY&)t-Iecv> z+=bjpwn-X=ZJY3+8rgONWJ>d^tMf{*6=G~^1kWRPwH@P5A2Gi9O6gatzeX@P4th0J zRnR4zt=U4DjRV^sBs;Qr=T+txK=WGdvSwLFbMg@NPb(G$m9V^=>~CQ+TgC}lM7I4- zBQ-`qlkEwbR5}EC&nvAI1G2q2tMBihSW@86q2%5sy8un_=D#M1O>m9BSONCdjJu+q zT1+QO*P<6G)-LBxl&0~yC(4PsY4yxBXKM91(HUADPIS6fj}sw4_tRKlwr6RrDL~sZ zMcJ2^wsW-Mf_u*j%UW5sJs9QJ zGnw%op#DJ=#bze9vI}zZ$BO_b)_C^;%4WM;lh86$nnfl|=H|Pfo9|B6O-9fU*lY_( zC~QO22EET15aA`fY`aI3@@mSmhq1ja<7UQouTg8>bjwnf&2|^FLrmfe;nQqKqsm|H zubPNm`Ix$}TPxgNp?`Oae)~j}AB*xMQSK7uPEo!GQewTCWql)hMZF{X*}6vb)8sLAuNhvc zdqlq+J)+k$mz+(WlEz2$4a_Mw)G?xE+h!<4{Tg1uQjE9RHl55!e+iPu9O=h+S2%v- zrTte?9u?&;ytEw=U3yq_>Cd7|4~h1Jyp#`^UAjMZm+m`>F8w-omws7amwsMvm+q~r zOZU{@rQb*Q+YdCvX{l-H2ilHggUdmK%hA%wmiLZCUfL6QX>0D}E9rPAUrEO~`TnN^ zo2L9ZoXtraaRpT+m55;F)|Jg3c0VjR;eUnng(%67bzQy?Q>m?T5S`~dE2Oc9pDacT9?+9{1Fttl#DD+@6h zJ;R*3ty7v{z4bB-*0hDxob7u{QbKT+)VA%I=e|`RdL#4v)&7SvhV^;mL%gLR6=aMp zthlPC3^w;GHRXkhzofi6;4dw$DKGMukFCDC=Bi0)X=!8qCHU%B3bAojf_mBk_ojDC z8(UdbaizZ?P(5~HL3&#EG}e$lt{NL$B?V)v{0M8+ezbK@OY2ryI9~d(S=%<#l)1_c z%1!D6$|B_h<$&_1GEZIUT<2WveBSkv^KIvA&NrMNI6raT?t0XS_LV`ZPRA9DVz9EGei)S2o{>OA!pb)mXgeMo&oU826FZd2b?_oxqQ>$Lsa zQEjDj6|`C7e8Gu#Vw~%p8=ae+FF9X!Zg##3?Y2O_H=*Y{&TY=^&K=J8q3urRF6T$k zd5?3i^E2lc&M%!`JHK&$>)h`=;QZcs(0R!Dlk;ciVdoL&QRlDD-<`*te>#slgRZHr z>8=^BS*{ygH@fDy=DKcn-Qv2rU4K*WIprT@Sh*aym}DKuFbC3Tw7ePyWViU<$A}p&9&Y29(v$?^uSK^ z!^f`Ou05_#(HEb)zCoXS=Q`l}!F9;>lj~>K5!WxSUtPbsj=BDD9e15@O?6LmPe*Uf zM1S4rp5vbDp69;BeXIL+_k8r<0{7kSd(eybyB}~bbT4u*c0cTX#J$A*sC%jVarZLx z?sC?@&!C4_xSw~ga<6f(b-#$--ss-!-hw`FnORU#R@tqjuwvpe=>*P;w@aB5{P}@y zX=&uuyrx@W6P*UoeP{iu+Lp#8D2{huvV2Vmv9bVP|%!hb1 z68T{;7@YK>g`i!YL*ybp48}j1)iuFiyS$P!wm>nM>M5+IDTA5W$+v6%-r!~*tG%g$tbJy*HJc|(OnzZ= zf+LGpN5N%E$(amJ*qz{}4VI)uQJR`?!uA9=FHw@Tp>!4gm~g`W)Ux{W?opp4&CQGy(1a8HKyWggBYjG3IGEH+?pjjnugcJ}Gsa@eq^K&ttjs@lSV=)u zMRmo5fHJ0}x+cF=$qUpJmQf7te7ZY2M=mLCNX&8MEhV9+{dFl zgZ=Hw{+>yHQ&!sl>7+=Or5Q4PTnVPts`C8OZpBiveBQ_#pZMv-SGRvR?#OLxu1)?p zWz|3CR8n40T2ts3+$z}uf$@@4*KgZCC(*ll_s2@RWUVS?E%AbJgyWT&jyI7zUbV&X zCKik}2p3>Qln(`_RF_nbt*)r4D!|wB3Yy=shGMKj>rc$+JZZ*nca$x-yVJ5AkEguQ zFjm#VOqbsBVYYWi`tiM=%sjBH_nww1Z5#~}ePVv0e*zcrP1{AsJKL*9RqT~dEW19i zH6_$A5eupUCe39Rj#roVy)J3^ymy*8b{;v9vZi4)s{UDTX-QcL zA_aN!b?=|Cbn5OWFKqjrbj)4y%*QF$HH>5cy912inA}qz-*WY>AD$II{+#S@FBzRu znb05^Cozg#@6q|QSEsC)^2PWmd-7Mz+`l2^+J@1zkc_)v?sWyN``+1q_xES*ef#Ur zQ&u*NB>EhF#57NS)%V!>Lk|3VOxN{~KG^%tE-99HBl)knmoLt`e9o~})sA6jK2Wnh<%4z&B8hhyiW$M6 z>x!&XXYZWT;bwb>S=U^#J|)n;K?ETqc54~Q+ixk^s15RzJ^kAkb1(a8)mJGs4I^3R zFRQ4U!btXM`tZ$}Z{&O@-SyS2@`SjVDVrKbvYNf$$w*#RJa_~S!(2AEN86(-R{VN2 z<=fL5q<8_X4H(5gzu9r+s-_2aOuXx|%UX8+?5mW7)CN(+lNWzgfRP-kE}YXPz1aoZ zSC!np;jxylr|ef6L{fyh;3F^1%D-pY{w>Z&dbb!8{L>~SINg2wj?2y*m*yKWXvnYu z{Ra-sbPXAfeU<(L`ns~RGNoxvv8x)dxTWB&biZzsT7*#s^&gr&?EGN^GW+(dA1Beo z$;r&g%I!BKJ2$i6fI&lskL#Z`D$Bwsff(J!86}xW{jxK`X7G@H**O-paRYNl4$B&4 z!A>FU+c|d2F!tcgenWGz@$5b~lh_HoaYOnK7(Qyqz##)hT1d1b67xBUWRt}I!`_?6 zH&N&R&nM#cU_g=^Ywnu@t$c?uzr94tq;k(=ly=&@7L?~K4#w2U{km* z*3eW}R~>7tamp+jXQ+u130K!Q#KN_}Gm&~qJcQVt$Jq@tac9;>nj($04K>vbv4soL z%{796g@kcF#~5W|L?YF7HT5;gSVOA1ab7ACYi>)&+n`&rrbR#=O2`**8-b~7=O)phau#&{&0sLshp zlySU?1$)NpqUmsbbxk53pVty=tBs{ovDW5=d8}D#qBd41n-X;mwXxdjRJd_oJREJE z*KG5#L1fE|xGlXV9y%`C5UmZTlOmqLZXlsu%+bnBw5n(dz1)hUt8T0Yfgld0+arP@JEiImmzV6Y=V3U7}@fTTMDH;D|k;nK+SnbtGQXP>0C1X_~{^b|GCa zL|8iAwOmAjh=jn$E4f;zLhDV+>AC-!xAiRhh^OteT%byKP? zUYkZzS`bUr*0sVUZSi@HQAdx8T@tX+6NvfRcsx?mP#sODn&xp&2q)W`!p&g>mQC_e zr0V5d)jdoasp`6h`a}bAd39^Jxi;3?*1E7s^ae3N_B7Fg$=Y~*O(Kkxkxr(Y!;RvI zA^PrQ69v(qs858`wTTE=Me?O6(SfFz$VfQwy>u#Gr{gw4KcQR1gfq>=s!G(xlF7#U zdc*4yVrmneXS#_q131yzWE`H_3O5%$RP6go3!yd=iNzxk^g(K2Lt9jkN<^4pAv87B z*VU!!V;mus2Vtg#&={$yZ%C#Pfy6<~mLi9sh0su+YHUnmgl7m1c{o&=2$kuYrn*?F z27^{xvn~G@kk?$ny(VPB&#bLW#B0&}HEp%cv6z^A#G!PSi7=xknW(D^*I}~I7D>(% zyG~SLFB74%HXKeh)YdluVSYl)Frq}WP57qjbh17fi^WqwNQLXu%^0X1u`6bny-m!@ znq*@l8IQ!On`FqwGTP7>i6&~3)%z^mw{4$1TE#5*nwnHYq(0if;6)D>tq`~1BZ)L7dFgrv zzi%G;wI+NLv#kUShdInX3m3NSLq8%HF+bFqSiy8dG99gHN-(5oxJg72vsl7Jsf=R` zjieHoZiORl;vg?7Qg6YhQw_=5XbKY;z>BkT5x&8K$BewTCK66F_g%VXF^6MjZ*x+#U(D2KPLU&O#on+R3uL?l^XTNh;v zYGQ3w(*-7C&TTSr(0dJ$csN#DXCOsWqAFtV%{8$wbTu_3!w3{IEjUfZ(>;Ng7%0sq z*37zCEE=h)X{4zEmP%qO5_4CJg#m+wYZFZf$kv+Je4Dq67_AmYT{xAD*C!E+3`2A) z5o4Z(5l^OT!wq#9sThXn@gl~23nNyCsbfXB08^ zu`n7j=+;N0VI4zsM-gM8i4jajYhuWE2_3^`UNNHfHBnNSSH>cZbu}2R>Jn`&b8Be& zlBXZfG0~z}Or+~E`-z9E=lG%+>c-iJ_>1C%| zXqb~^X|u@$^XIn(A;;uXb?IYcGCc+O;ASS?69gwtZnPtdy3q%{@m zddz|wYjjf9Mu3~6ysEPw;4`)lBFXA_Dp?;*q-(1aojAa?Z1J4Rr5)?A8@y=QiuUDm zDm&M#IH+Tlz@^E&Yyv+Lka9PETDi&T|~ zF*itd<3jwX3sG%R#Ol9^79*JHw{~^Ssa(K5P~MopUVnA=5aW3fmY zD?t+5aKuVH(3n%X1P8Huk-ga>Q&U}A6HY|Ysnsz<=gQR`E739CU7}+-BtOa`QD2RT zVKGHUa2nLbdzKy*07C@ zsYHVL|D5SlCX3x$z|q)z8Cq4EXu&A{tF2F^tFak@J)r4RW(o=vaWu9U2(<8x$vV9^O?uIq>YDnxR9yq| zP^xPcyrp|-yDp1ugROGOvX148b#e+PH$^A+l|>FK&{!CoO4wr+#cSzcPBX7llnutv z>FvqsRqFJLRl{YXDR^^jO(XWhs+-!o7a@*$s<-@aRXg4%qSW8Lw1ebtU)7;goy4im z(5aSKR2vay_0eQFhM}~5#mZbk(vz%C)zLMhOsZ3&N!luIh*sM?L*9%f+e}@CaVB&$ zRvp7$ShNXqzXhw7b(7`MV@p`_V2_>WR4zkDa0f*WTcz{&ajn8SMXyD%p*oRH*TFNQ zB1JtuE4vQwShZw%*II;{PFE*5krRyQ1ZSB9r`I)MsEfqvxx3Hk;q?7DX1$I%$Hbgk z7e<^nBwz{*B8&3JN!Uc0Ru@TQLWDh{Ih+xG&7sG`8C|Cj7Y!CxeSNep6~R8l97Hfp z3GyPPOr*+WtP$(?Mhu#SgsCkSZfSG)Zv@N%|phm`-YoXOQ z#3S{!=|&SxoV_`?wU}tZx>UL`o{HN=#k9Jo#Ez^r&!iElt**yDbbS&#y=Jai%Ux~- z9>N361@v4%zrWAN`yCiZZsa;+}Z6fV?3x=?SJ zLjfM-86!w@(N&lcn|yTjR8Dn~uHJVR)kt+s3J=||zhtdb zbgB+g7L(~ZRmVbZyGb?DR2@kr8)I0|nN$19Lk;VZgv;nm^)k#k#7S={mvV_N<>U%u znt&9Siq=vW@`s!Ylo8y}hvbnCFoCK#Q9q?QaL zUZXJ<{mU13&Iuv|v@b@_;H?L^B^G9jmUdu5V!4i(&AeQS4LapNnUt|K#NK67x<0~8 zGPSajXkbhPWxB8mD=QA>bl8(!sbnNRvw}D1=B`<`=+OA`E*!7j=<4V3N>Zj8(+gbM zN8u-n*J#V18RC*kyiR!f0Frcq+)pN)2*-(!MtK}ws~rs-*T_;=$w7*=3@v|< zQy)_1N)9iLMR_T~*Ab5;1iWI|;>Gw%g9GwZg2c%rX#yZ!2Pv+SLkM`;Vp^>`f$Q-` zZ{`}EtUPnPYYE^x34Y14Rja#mBYi|jj{#{6ILIS8(ken~KWKH=@-^L1qI;>y>ISaC z+TDQl5wPYF)_tR0+jn!7Y*3`gnq|uuhjm0u*)7EF95I47oHKE}UA(4lh{t{3X!k3l zU8^AG8H&`{mFi$e6u7P40ukxMRAq?Yxa{CG53tQs({b9fwL zlrp;)O41>PL)`r)7PzJrxV{|g+N{V|0`Uf%#aP<0h>o>#F8|?JulRtq6P>|>0JRWmAs(f z&|o{>Qf*&uit~RQ^03_jsRA-H*i|<~_KY0wUNGKui_-ro(EnV)(U+F>D-P13m6hxv$QaBEKBM=Ft|J;-<<`nlq2 z2F|`dspZgRD^2wla`64?0lpW&{ZNizOWHUfqwVOLAl}c;90TA|&}P8PeNt^l_k5Vm z=<@?O-R}tWZh&UaL@#>aD{y2P9e<_b8t-$JtY?U9s{-d{xVxwv_1}%aI$*FQ%>)-h zISS(Yhe^mRiPm6zRYwPupjYvw%v#<@coj>^oC=I1mO`%n<2)s2`y{qTjx0Mkg0(PQ zQs?nA#~9uMi~!2}Lv8u{v2y=$&|Kk2(WPtXY_=UEHV+sSphu9Q&V~xN={(F&#BnV~ zaxKd6j(R45awTy<5TnOS9`;Fz)#1b2mo2Bodb*Q#d`!!Y;D{{?f%r$1GbfPcT*C*+ zCGUfku|s4EHkQMW*dL(uXUj6L0luIg_`qhj`P>itTwlO)Za?9gOpSSvNd_OLAX7eb zAb##0E=gqwQrG*?uh@>r=c??>09;WYN4&5di2X-Ml9voah(m!$`zO429X^EPdPwa6 zpMu_%N&-f|VjDyE1`HV_P$MUQ!6KB81blqy5ZMjQhWcG)ez^q4#JNK-R?voHt>RcS zI)L>hurmLW;1fmPk9Cby&)~SP zcLMig&f4t`7r1ovgL9zQ;Yfyoeila`vl8fsjFhAqVC?}q;#{ZDnS;W-&P82ahj!rW zTXqc^4+EL+KxUGl!I}P^+Nbbw6Z&8f@AwnB5b0IGJ`mH4z|tWeLx21^MYD$u+nF7# zam3cuK>PxTQ($*OMEI1f%YjIS+tjZg8%-#_fwr+5KMOHWQ3-eTFxN4|F~Auj!>tUa zy2!e(9>=je*8uw=U{BQ*CeHWjF=X4)G?TYJ#$0wdFzd!h(h|f{|8>J$qnLwVsF3^* z`Q=C9H&6K~LtERTX56pm+@DBSE7R^RMyH+4YLwRq}~lVPHG8O&tZCSAnw> z+7_-JCT|=rL*dc7&LqZH5a3%=VN=zmoay>wKwvja$r2Epsp?S;RpCcGs~yN;-5J0> zL({htDGL{Hn?lV`kUdnn1pg0LCAParQD`K&T8{nT@jyJBrg4NV7byK)?$MYj$)i+x zoGN>P?borFFx+Z@COPh|>e=KDdTpI~gv?|Y4&4HT zWS~Ku6eghPO-8MVQ|nM&hpFdDpJcWt4pXxePb)5=wF*~_b2fmG{=acie##=7{p}UFNouK9}=t-yK zI+Y#&JW5Z9Yo#h=E&G`3?wm zH>a0}(zMG##HHZp6{1v(jut5`XE_&6>QP;fs`3+{_p~Z;x5-2Cma9PQd7?N>2F2m% z1&mc#I=n*@HqYluL7UIDoP?C&Pw)F=w_nBp3RiwZb$_JFU#RkTs(U*)c`Br)_EoDp zFikTJu!h_5Li}~1%!4$w|BO1k5R>0q$Oh0}#!!5n>bhHXJq=IyR^UK)7ylGx$Eww) z(S*gXZb#|$IImvt`A zVO>2#J^C8ZTP9-}Mb`Zl-Ex9~s1Mc6U2E|j7ITVn4A=6g*MWC4@XBEuCg-U+@x&R* zWgNBU4WJI0B1yXgRX%~wP|h>3^`Y9}s%O9}IBNV&pq>O&KW0>vR!T0*i6>4dujHs> z-vX*UmCdOH?jlbJuPR7Vark472sPb(fT?C|h@&NS4Cl$;_H#zV`EwAGIK6nSH ziD_)|=a#SGTH*uz=ERxvv(Fg+`7V%N1`_i*&p>z&&n55$%xQQkMMy%7ZA_A76XcRD z4x*y+*KlDD`T!(fn~pEg(@Ye3>h58#k~a)IniSF&T_aw?FfDK$$2|Q*V6Lmg7wO3Y z2w~kTPn%#_jv+_Zb97xH-Mtom40L6NB#kBag4iV!46ba2Wqi_^N8a_E=P!h`m?L3* z^MQc@*I-DI_4v?AhqYwTr`tFD6=+uh?HDLoaD6`{V;X87FMt91Nayn zK%h{%tGuN#-53+VsrCWTOUH%E{-E({IZoZo598He2sR8tdi?mLH=ReEF&*Dw$JeS* zKM_>XBBO;qV`{Ya1ek5eoD0sgqzMdz}i4cF!@xCAjD%<) z(T+71liVOx#z+-PkCwLx&j4^5N-#qS%&@?y~$ z#FwsL+0|`wr#%@M=AF?J4%@9>2}hB+3X8c|3&u;`U29h2QI4rOH%YOyy}TtnKZcjz zV&N3{&H_TQ^tW;z{HS=63Gzhwg62eP4Daxea6=f-o#ibH@w#9V7343TR~UEfGtyVi zIs2QKT*cCKPj~yl$tdY7Wlm=l-z#t9I~UjnVdNfiuf|(nZCDhp@hJVICG3H)smL6r zh%60Id_coaCca&RLvo(#OqrCq35|tA?kq2Ss2rbyay?w`dZgU7wcPb+x$CiVxmb}0 zD)Jy~JSy^FMINHaLlt?L0xx>AJiVYXR+Ea6<^w^*^W|7d7Wf7u&Vlp2+~fOuq-r$3 z%vA9VLBQ5@t!t449GOY3#I$YTllMr0!UW|)Ju4qx5Lk7b(% zx{Ya5C~YZkv7Tf1%q9b%$6MuXEo%;9`&0Ca8AQ2_gdaYLdIs*j2%p(mgpbV|w*QEc z_PmJLrW|B?%yM7>Z~Jca++g|2rSt_=F1z9S{gfWAFH2JuU(>1%{fV8mdsiUIp3G(t z%-~xJx065@G$d_`WM$onYr zLPg$}{Psmk3oTPBycvV86$5_n`(%-#?yZsOSSrjG-YS(yy*zjJUn@_EWrN$i083Fawq+if7_xq8cTUE z_G3te(%m#}%}WW<;DSmMJ?4 z>e_gaCE^QtzGGIzkT{cqsC{|o8d~(){poQ>Li~CZrQ=S#Gio|zB@^0HVPtT8hOZwd zGFeyWVQaJ%1S^J0L64Y0J*S|P5ULoibTRl?Rw&&{K7i*|OS={e4p1$5CL%O#ky#CE z+^O?@T35R+wokYw7EPqWNkMU0@@!-y9&H_Rf%yWjSbDC<&`>Ddi$0-)zJdmBXi(~* z%*patv9!g#mYx{WU74qtc~P#R<1ghc^YBtK&SB6wR|rhmpji5}yp2|M`d9Q&P3hLN zRLG^KI}TwQ7E4bV?r23!nJkSI<6T^$v50?}+!G_ronTrx{)zH2PnOG1mGAm&Irh-x z(TY4qk;f|XI7Qw~k;f}?sUmw7xlEDE6$T`UER+1rYPjM>`&5cc3ZeQhfaJ$QvN%hKmy6^v=2bPr}S_OO!? zJWuLggd>XSbVIC0a3PR%kCyQA-wM3=XLe4Fo>|6u@QPt)7kNXs=lXuq>eY+d=?j=} zHuBOGS1n zm|xJ-IX)9DlpYdCEy1UY0KKP&&G%S}!N=hA95WD%3Z(}zR4;6dH8;a?t&CeJc}56w z_vp|<=~-R8rf>p?G}~g?$0K=;L(q3%+Gzx#K7TD`eU-DP@JK;gEsVxw&F`5Rilvvy zA0k~?GfQxU;R+5jH^rJ;7XsvNFfEn}98-v5X;&xE07M98WfG=Y_-292GZ>RCy)cLu ziZJnFH3KmHVucb+!dRggQ!!Q;hzS`h4C*hTag; z-6QRDYa}4{r2(`;0{5_4FHAs?xH=6r4ZI8bZ>l~0qrB9>nJX)gcQJ} zmXHWo!G(077seTd-HgI`qflxTyhfqSD3luo#VGiUg5M~pMxnweOfU+XQJ82Hb~g%> zc)^3z!zA<|0qLUdX%r?Kg(-TWzl4&zm<3%MovDQZ0OTIZYplcls0S5yk#XD?_aN^c zC>$C_6-t(X{TA+n{ka%_)bx_gWpC97H9W;0EBA#0}PIIFT=5Y@& z&xfM|hI0?LpEO4;?CKusJiCs17~VZxB+ZY+qXm8A9^yD?k81Rty9i&&V2Ac`k4|;> z=coR0hrV_XFuxms3V4BgpzzrORKY{sgM_MP)WLn+L!DnnKt24+U2N+KxSqRE|5gJ4 z;F9hkv@j7q`haS>g>8Fl<67*9~ zKMnMgq@NW1G}2F+ewyfKF8wsqPYeCD($75lnNL3p=w~1LSx7(o;-|laU-v-ad>QmZ ztGkFFp2MoQzXTL_A-|8{7G#XuFm6HGxJ}{~?2OxeaSIWQ+l9D=SjO!>xP_?hLjAZQ zZXv#VAl}9^&Mcw|YPpN`Dx7^p4YYL+&}*uuqXIT?_vaP3gIU}KbXSKP7>eHzB233` zNC_B|-;fG0FTWuLU~qR49h0SFuee7qxQnf`v#3GmxC`ibFDZ!b;x`0~4&*na9JM1{NXn_Aq!f%pvt23*QL*nX-TweU7~ z0XrOy8~C5QKR;TIJGi8~P(PZETevAf;$S;&;JEJo{8&8h;LG|Q=>_-J??^g$ynaV! zMGzpy*(U*Thq!PL&=U+cJ^D-MprULd{_~ng554^4p_e0h(FVB9fE(gp9rDsKLa%@E zB(Hxps;@+~o0SImB==bTu%A~r>*vLa1V{Y#=yzQ%2 z;cvqAm)-=rLT949bR?<=11~!ewR#Ugeg()qMMl_1CdqPgG3ghpl6w-{A{UIyjvY+` zN1SB>B>5zDDZM5OMkPQA@LiG};H+lHnh0kUaAY#!I23&BWdPEA2{{WpXXIVh>18$t zBRm%+pY{TDq6x~o(`z0e%7HKo2>p}+tgGgr?Dj7LnJ`M80m=Xr8>m>sLMnw~K~cGX zbvf$O><0c%xofU*LkXw_H$?Ba6b2aB1am6Etfc_E6{TJD-l4-1 zVu0R(wrT94hSxX(u}4prTHC%F`b^@Hi4xI&RG>;;DpGv{ZBz17r5S}c7tJ?-Hx#Qb zI;|km`v~klbEa5pSqhbbH$uFNR|w^7OD{8c|3531EZ$^lmvLP6es|;QcbyY)wY%vj6?} zKMVZN0{^qX|19u73;fRl|FgjVEbu=I?8pLX`5t%LC8ehgS~6_hH?1PRDBhrzo> zq~)naR9Tww4B0HDy_sJPj{V2xXGu8zmKL?DC?1$u6sRl;Oe;#Jhqk0$YT8wic1=)c z6{$0eCT)yvE0m^fjFfxisZ?%AyEJvLBK5JtEgQq#Qlf^j9ALq?h7Hy2InTLPbX{f!DfUhh}P6Z86oCsz>1Sf;X?%BPH&=$tOPza(< zYLzuyht;;aT63w|i*ZTQsnE0@n${Hs;zfa)qCiAfcA8z0y4;Gy1x0F1MIwSCOwa~! znhrs6%`51R`eZgFod-!Ty@Kx}ZpH$=NMobstB!EU>i6wxGO$ z`U3qjS5PNys*@7b(fcI=ZuWkOX7@4sWj@rcfx5WnRd)ydQV(qphPE9=fkj1u_M$*r zQQ!bw;RbuxbO_2U5|n8dlxZ`SIY3Z`_03WUn}o2q>cUdAxiWrPLOdb(T(i^i(F2U= zV#T4np*k%eV>M85m$baHICsq16fUxdIpGAL@#^Au;ILvIZIjid#ak#Aq|8tXrNfFh zM$e#rI>Va`Q+=o#SW_W6t~+Pu99%2G^+<4CUmRFl99X0Co}qSuH%0LXV!hsCon2dO zgzFmA8sW+;c@*TC33+feEJ-%W{D^dzo+h0zoHE+cJ7XTZbqJ*eavl#kGsS^pbRk<+ zxp>Q_6T?zwBng=*-gMmXdH9z-#waDjXbx=v`aFn*>&}^}C-(*5z7gC{&{^+`%uVX3 z{iutOoid|IgcB?~Q5S7144nkt`|G+x1l;yjgf@t921GcmIB-gFV3RJ$f$BiLqsEZ{ zr&$7IPcb`c6KeG&46%?m&xBO%5C_-3inAEvoC9&r(giu#u*hJt$mL!sQ%(Y%WeG$U zx!fB%7rd8Q7Qt;_MOY3IE`kUb6bH`JrC6bk(9Pi|?iX0xv*)3FIfc*V6h1J*#So+u zM!>bN5*!8zE`-3XU~_u-ZiaNAcA)(z0h z5jI=gvzI%Ka5V%u0!F~KuM!*u39f?#*XZnzR!b3<#|@V<6Q~ca5m}--bUj!e1D3e< zm1QP_i~_cQ0^1vOwwdElrH8m~2Inr#P;;5&vb;6xr*zS9u*IyMgZ4xhO2%HEw+sc{8QIrP4=IoHb(FAPNPA#l>Mq-L#N0ZDKmp~+BV7#{@dY=sjJI>TJgtnw#?}yDr}1 zFrscoyW;!bshw}y{Ef<%X4OA@Q z4eD<*JT0&?=W`btTpAAyDkc50gGym>{!3QRY(Ex%mY0{dOHx0X4Glv|A@`6{L++mI zr(S}H@x6fa9S*)jIp3j-FZ;Fg9Wubpc#a^RBYp?ZD>%=Q;JFLq3H@2rjxL?H>69>9 z@n0~4mDCL5dFW_Ky2SRY+V*jVwM7$y?8 z+QA+qhaM(Pkfg~lE-5->0Ml+1`Z03{fT1MHeeqdl*n2<%(d31a;|(S6B^gGR^7(3* zymLH>YAC&R`-jzqlAAJBa?%OqWzr;wMGMz8yz|4T3zd<4_i_19?z4Oka{2s_Pch_s zh~!g*PWWgJ*7gvG42YwfQdSY=MFn1KEDKg}<1_J867OL&XceV)=#RF41MQUH1O|=2 zH;4p53NehWgfXEM=GsDvXQE^r#*A6R0(=yJ=ougxp?WF8XKY&j(rbny6%nJ#9u?=&m1p^ztj|8T_UPw)pMgBN>Uxpr9!#SQXR>q>V#Cw4XNV2d2)#9~q zFk<0m`(9iIHo~jj3a;AyQ;cbi0G~Y;xW@XKY=1Qn^-7LGy1LxdPcDzMqpkrkYiFHs0vYXERJFQM zxB&(2B!^!JLL6-g-9v~Qe~S<|0a!gzQC~3}@Mhfs_ot4wXk&_L?6YQWCI%-m)%AH` z@MNJ^nI^ZA0w*i#Mn#9zNx3J%j@Yt|tRZ{dMwB*^X}NAn@Kh(EJBiS#IW564d8CNF zVu%K#%T~pch(aJ@6&dZ!s4_YmsTVy8j<%%G=P9hcokHo4RybtOw-hC-XE6PcD5t3x3wi8$B5^Tw`7j3H z43R%`3GDmHnHQ;cqR#j(Fa`-O;k=E~w!-YWV0}*+<9dx(k}ygAzK~{}XzdmoZ{Uqj zmx-1C7BNUL4+ZYzjnT&#MXBQW=nG{6H+3`V!`Ew>?QUJkO9UlfB5^O#l>~rO$(PYC zN+972K9KoE#;*|D>RZYvR$d`8Uyj{EpSQ`pLRw!UYOP*r$uW=(9)cNgh>A$Q>V+N~ zXyai6A4gsVO|lao&@Ljcdks}^E|mN1TyKK}oa+WS*L6zZ8YOU*;a~5dC3}_CJ*KMY zo-ME{B*|WbiGW`A2LD7Ny$dY3DtELuNb@sr1Di{kx5(|Tvs^97`a)-c@;zmIOYcUa z^B2(3{=^atANW}9d#HuNDEC?6k3j+o-vWhiGF1I5>asUks#?w_RPMmpG7^ZO-`*}m zzdctLyp4@cpE@XexW9Z~sGj2CHhQ0|BCz>?z#F!FuFQD$miZhasK@>P%`JF4)Aw%< zeVs<@mVCiG8042E*4jRaMN#0IfuEis@8|_?35v+C9DM2a zASe81Z%7yz@o-bSlK{UVJUqJ1Y(qi2U19Tr|3f)+m!fe`_%hM84q&}v!GeF5cMAVqGxXBWQ=By53`bpX3>!N=xgM-}V z&E6vA6ryYf z#{vL{9#=E~WJLgM(~zS*P6Yb{rqvyKMA4Xyif~H`(wJcI96%tl2L64{k@!*-_3KmU z*C&jA9jdcpn?=>MiSz^+XA(*h?L&|l1Nepn?m|zKw8OY4DEC>EQCyT4Ajv>ZuV|QyTV6|5i`w~{bHB$kfcVMd^_$o_LyX9pfV4IvLV>8Xz zt&$`k_H#UJ986mJh)+4;&X<-(Wt<=z(p}KQpl770-gVgqPJ9Qaw%G2s(Cp92#K{dF(@@Y}Q`80G7K-3Owtiz&s5@h&!FQO!DuE6vGx#Nl zOD{d6{>7eoLjV_5vGF1{fzsf6jLlv|m}75e38xn>5N9^P*@(9{3ZeHE?L9K*oE@>- zy)^g%V;8pAxr_uDp}JnZE(!?7HHL!rfug;ysPEccH%=`d{U*o!m`PLz#O%9f_Hei+ zzumfh`}PmRg;II&6H+$;6!7O*WX%CP3VEK(f!aV~exmfQZW2In){hkJV`A5+v-=AP z$(ec#+ojPacJz)N+3vzjaprs=$rD2paVH0!i-Pu!fN(BFp4Au@jyM;NDo>D{G6pg_x zBDhX*f32ok4 zvwwr_>0Lm~JPgjONs}+J_d_JN;4#HNC^I_kaD4P@KIfw4312IB6TvUx()vP@Q7sMr z+h#;_@ky<26L$@8L;q2xmO<7L>Q9RHE!D2ajeUL~2yU}B^RB9& zZNk|ANWeWxcLWjGAp|nze--U#lI{pdM>F9gNy=aB3I1r*iB|3*3ljXV%+-#uuz7+9 z#bc?iS6|5hqO~7Dk4HiK)uwl$v6$tK0L5uOu>pXhM7FM@T+h4xLV=hHKVMF621L9J5UQ(pps<^W4KPQov%xo1;L~=DIhleK ztCj*X!MP4`O~)Z&u#+^57BRzyc<2`oKer$23l4CJx%_ih0IFBLPI=Rmk$D(+FwFq^cpRHB&PjCZlA`w{!-j> zX)dFN0!VWO3Yz5m4Sh~M5Gf57GjF{T=%8{nF1<@~4e=?lX>B^3q2T1wsv*5YOeqZx z_Gv??FRlea>Wk}$^}ycI^v(zL4S>#TWV7dGvFC>qw;OeCe-pPAj9z>Gc4FE;RN~VHll*t!mP>OdHBisrg@RV> zW6AVhDsNY`U46e{)CrDcE^t3^^Ga`;bbx5mF$^&aMD+!If%&atbT$n`&Ow8m&cX_< z2ONBDd7WZ}=k*62VAe$R7jtesRG(o!1XymREhsT7J%WNZrVo9Fsdv6)OkFzJZHDny zu;{%rA0=t}g?9C6BdIeV$8E2~vCtmNO#CE~?z@Sfaxltc;-?*8y_xtKz;Y8mixP9b z=TXqc<}oqrq@gev4dpKZ@;A&8gX5SHUICV9E>jD*mN3V2l?HcX@UIbOeXhu-~C z>Q=|w5&-pWhE1{csipqZ{dEv!4)q2Kp;Dj5dA-#eFVl{+&Y!nQ3fr_O!}h*8eHB}B zaDSU|*GkEI-X)fNnUJB^va0C`s^F?3I-cCJ2P?)n{};l|vz*BOo#F}l<8d{7Ti@h; z4;We*v+D;IW9Qn!=j+4T;v*sr%wF^0Ujfuwpq2Z6gWpt@`80)0^(l~Ztt~#IdckC- zM^W!vtAWpnH_cVQKtUVl<9`2ls`a4uOB6z?Px~)T55B^UNYXYq&YHjs_)j7;i3Ixw zrQY@4M#MFO{f@8#RQetzTziv!Gj z)=CyMx6ghB6j#E9XP?@hB!Y}m?;^Mfc8V>Z*sK|xn!kFtkMS&&{wtvk4-HjMoS3Ju?;Yo>Uxcn zp@7gTeP$4MXCx1;`e)>~RrV_icrQR`9yS~VL@U^2V`eR_3g#z95Q9pCGksdnXJjWA zBrvoZ0rH_LpEi>*+lBP`?Yj}X5?Zfj7)cP^c%~PQLLE{_6?NEXD)$Rj`m`BzI~KR1 z(zZ~dy)fSO;|MIr9>s2`?_HkpfZ!2OhLSdmn3fZkI0qFau$i4+T2S}0jZfD6Ng>i~ zY2rf(+j^Q$o#5LG{V>Z%y|I0EfL$g1I$-u5?0(GbN$gradm6hcv-f1z3fw0(&8H!y z{X{8EC9-bqYn#iO7P1e%{YtC;p=kdkw243yHOhlAxHLGM`NAZ?18olnT8}5a!xj9c zQu5TvfVA09tE}C_ET(uKFs8!wvdg)=!v0s1eSA?CQa6 zc1xMAA@7c=us$}-BTM>Da6du3|q*x+8K6+d^m|!}@ zAWMU_%zzORQ;bBlE{`Wg0m(h71|_C+90je`Cn#gRETCSG7ZLE%gp_eZc{QO^H9FBI zEWKOz9P8*>P|Qh=y#ZppZr8v>PXN{?x`5d8J*8wGwdz5ItJQ!KQ!9yr)?o8r(^biM zW?F3oplE0_a}ku+$opwP^&V_Z#Mup}X(rCIeRwQ@tk&lTybC}Dj|I{`oK*7ZZvd&zh>S~ZttME+(}6Z!Q*l5MU}YxQM0AYo?mq_%?6;5xl zLv|l*R_H6M(%}BS9e@*={$9XA*#ml2j-*8gEn-pB*+X28Y>C?i2s|S{$fqqL{Z`VgtR46}L_ZuP&@am&`XRo+ zQeR++FR<9qVJ#Z7i+fdIRwomEJs`DJKF6!dOMO@kvg9ogv9AcTOF&+Harp@1$t$xA zpZOx~)aH0``A7hVy2unqkpQcGwwEzQ(H%QL!b;l`(k2Qgdo+>l&QG@IqFT^YvM;K8 zWpoTNTC-CIw2vV@40tRk?X&?i0Op!*AOQ|1Q=Wj5J((YZKDrC%lBK)6#><_$ZMkc* zOtFG+PXsO;w9BV^(#f9wEnLH&UDcd^4EG|KgSZeMICyR=l6<5TcOtIGCV+YO4MqbeAyG(z43bdDU8KUM0BIoM)N0A42}v3 zZU&Tzj(Ivj^p~E4r~1_XY{aAh3GMD=EOmo;fU3Y1iAy@aoSvIhj zS04eL?0Ep*pnrnM8@zz|+M~qaTn7X8rYRd%cR(Le_5h1Acr&DZoVc7Tcywv-62|38 z;$m}2E(cuX7K1iIW8xYY2N zH&Lx#>C0Yfxx~MD0@H^Sq2Xt-0Xx9_h|*i20NLLmLYMopmy?%~E8x!@<2Um&9xWFe zuzvv%hsa(@aK7NRtf$|ndV!No1R7ZJD)4pGc^~EjB%qAcM0;smtd9U0y56TTw2ym3 zlZO(Dc0JMmBp)CfUYTy?!5awj(|nLzKSPYq0jAwxv#)7JrkDZvg@Ydcwi$Wa>E#G= zVe=ucl~~|$6CysaK0}mkX5aqW%wqX(pwFD_OOohXpL&%|D3cvVt<8lZ7gJm^0gcQ2 z$p@$Ul|yP1m|J16-WgvL*i~?`%{0VfBZd3+W-{bAB$%wB+-KkZ0VLqtw;>ze;tSkl z`1X&eR_|a_I_n|OEs%mHjkM3fj@nT#xbQ58yUo9V1EGE*)VqB4ji2ltW(K{9g^Ouu z;UjCA{{l687uvTK2JdmsoEZhi(akzckVeM=P5o)wFCe7dcvIUDh42wPF3q0Tp-0utAYuJtch-da8XmCb(aH~%*W$#7BR+@usWm&sFfV8c? z&|^OBai4mxPj6>F4Zl5urauO__L$X7z3&Y^!NR^sVDw}@M#aPkt@nffUEayIgTsn9 z_!Ofw2tc-@2!c2?$I%aWux{5WaTj3nmIj|DyOw}R=m{zfCZ13G*f24K%1`;Qe0bca zvDRUzG3k>&rNL(jYdGo|J+=yXgsOHS3Z)=+8dw z1&2usdzkdkPLsaK3^4{YjJ|s*pGn6NqnCX73^vedFfP5#U@wynyYgJ5{>|3mFxNE#2lwU(xcVjeeElUPJW+t8vN-UFBq7eG4Pvg}y ziNQy{?1w-z93SjMRQ;hNlhDXGiY0(o0B!83AvJDg^CBK$vw*2nGqyE9Cxh;VdfMWj zO_XgLvtQ`zHIXRIgZ2ibIS<-e7W#n5%t0k{@CXXp=Z4_qqda1ePciV&7urU_Tv^dH zA_HUue$*)nI;OngZtg|8b#(>!#X(rKzeqS5q0w9?9w*{Lj~EvD2kVkrtJP`$Iy5mg z6DWkf_G$khG z&Rje*zwc{@;rcpY_5%zae*Kkb9$<$b0c|cW&;A9Qq-T|5pZlzGa>OByAeSNBkN`5{DBN6rG8(qs&noA# zGR1{rc002px5qCmjZo}nF5)ZU%jj7SvKwzfnVs|{bv%A3*~!&GxzFmX=IRtfog#mr zzh8fj(A`59HthALNs-^2lV$s(te;K4)UF9{5j7b|nylfPpxkFoj^LUMg(iayHI76b zs2@$*4EJXTTVfTW3jT@RE1}Z1-3Ene_X>`=iMjo;z{m~3d)17$j2(s| z;BpJ*12*S6&JIH{)&ph(!Q>K*#vDAC;?vv{00nOz_B)KW2_)dn0qmxY_6J59b~_o> z>NtOPB-HJ(p>`?>H`)&&vg0g++H9u;$NMSYp1xzy(qJhAJ(E}t^$X9cIdSePly}Yo z1RDg-Mj_<&YaH<$LKH_(E*snXEW_t0kfwAwEmG$KhdOaPo8*lp4?K@i*Su6dpUSkB zzYqm&ykFGQ+~MSGj3vj#faEn6$xDcgtbu%=oq97!pnuBIKjlW}T!}i!b``%|gNy3- z+qa3>qJ0w{5wPh=IqOAekMAL1dLnL)UJLB3U++ae3!dob`H8RYd}NR70i{j!+q;Kj zSvI{hVB3_Ta2?a(aO8llOz!ESQ^ znu}Z;x!WC3=8D=BjxU+-aKM>+9X4urIiU2c-Xm???SRvBW)HY~9dPDTS)Hr?63=}O zu-wn9?{`3LHa1^PRr#ozb-og!cI%~YY>;N}kg8)(X{XF}k zo%yr*wub0=@Mq&~4ayN)9CU3D^f3|TZ|6SjfU>{SXFzQQ6zQ0`S)zAOF^8o)dWhbw zPS+EQ5jud9geP+P;{VZ{6p9#y${rNxWd`>0hK~ItuvHb&hzTf@DKyis1^s#ze>*{& z>CdW|WZ-Sq$eJps%mip{f&TH{PtNs3s5#Q z){$W;V`;>S>Uih-lDS+nDg%+h}0+TB80PQowu=yU*tP z1|(p*d;Lk3|Wx;RJnB9+C@Ib*h2apB7L!)+}UvK9YY7EDiUnwd0EGl&vtl0w;Ct9iX5PmE?KWGL*Jf*3ALX{0z0I=O z;bgO7hya_R+-IAWfCOyT37cj7fn)rEqYRr3CjB<}vq$B!+0dNIBllwpkj+?{@+lw- zx9l-iwIhLT=*0l`Hp>9VlL3Zt1EAbz1MI>La3)s!r~3n^`U5BX11A|a*p<{g+n+rt zmkmbcw1J1);B-sb?5RTeWUK5j!r5ps_I{mN+}>sx;Vd%3Xl?|Q`)q{WxDi&v3oh^n z&NI{>Pa0nA&z=X-daT|{(FpEk1Y_Gt|04y7vE<-ge?eZYFV3O0eVhF<(y^Qb#8tsH z`$ynxWuN=wJA;@~ZY$(-qKgRF2OzfU_M@O(hLM9TCIF}efRFb54vS3$3B=7hSnNuF z;0nWHyQ5mY#;>j(h5?$sxHpjo=qoMtvsa*Od{Yo>%DdPH!~;OfUc;b**ZS3ChVw7m zOd@1n&FskkEWp*I;~u~WUFX-X_1o7)><_hE?bog&pgjQuJ%P|?&zK4l(DN3A$4&mg zjsC#(hN{!hqTc4uUe6SAYzIt7BLtX1FgEA7gF8p|Ccz{(T4hH}+=dosOxV5SPPXSW z6MV9F0633Z+)CC60*JXq6$;v&Hn(5^Ap*eX*nWq(!XN>2-3xQwZ5S$oI`w|PL$$jF z)y%EI8h~c+M+@H?AITx6GPc z*p7{{{sWmhJ10(q4j!|CzbyD5vuizxE^djb4^jVNBg`bMe;BJF7d@giz*q$*0m01Q zh=TT@r~%j0zEba@pdlO``iQLYAkSjoP!t0$_yK!h#szO1j12lTA^rh~+OxI@VfAgOht??fS?fh00j*zw)-U-3FZct`8;UPR zi~5>V@#k|Xz67Az*K#Rd^*YIaFp;`f+yfTL(EiRcKxnV~voDYx1X5NY_=0aR|2Twb z*<#>L-9MZ(4+SI(AGX4Jl>}LiD(3W^#P1Eiz)5h(;9HDS7hrM&a4|ufAK-C33VR8L zFc#aQOh_wy=WV4S#VV5GEw+^6t7sl>6MPYe53N`YeXS_xyo({eicQUR{S4 z^+SL5Z3x+84zZpZU%{3QGE-(cjdt$|y1Yw$gXvUv_CwSf;{Y@62V~qMxZEiBS?*)F z+@HW3KQ<&jmW2Au>4zT+BAEI5IDlq9LkrK>{1FV#*Pr`CpOTOp0HS^F7ohZfy>U2K zo4%@UpD&o%+vJJt%_jgxGCjf0m^R=r1oT33v_2r@C%Ms1lI!Bg$(E{CoRG)6WI;bJ zjFqlELcTWH^H+v}zW$O$$;p7T$KzLeJc`6A#!mqx3%=7((7vR6jV|f4 zubc%c@bPcqE8F~mfBFOeFg)gL66t%V$NVFg$DBi;KlroXn@(d{(&*fC3Fb!;#xkh^ zb3S0Q|76MQNBUK&{_W3hWA{I>`{2L)+P}#GF94)D1I9~Z-%;g7sMP)?vJiZ?>L)An z8weK@!cTb+bU_$n50?Uiv}0^BC|v?d=n06?=bpG6B+wHcH6D=FfTRX~^#^`7I^zm7 zss*ZJy7hCe&bShw*#b33_*V7D-)PNTMWj9vhY^tsx!5&;(E6)+h!m>UaL|tkUPs`C zYW7#wQ5I*be|=R0^k#-y9xPI|0V*whZXjXAaY$fl;bXg^o0F%KTCDQvnkY9*piG<_ zL6QZ?O(a*5n#GX;WLrxv%Qt;hgY;%yu7RpHh{<(xFLGJ-A-~1 z%wygjR4{N3Ha@B`0Y?N zFj&>!k$4Ez=-`KO$qr?b85wURIn5)eSBI+VC>7%I_2Ofw(nhN4F3iEK*I79>A1Z8r zIpT4mJs7mJc#DAV5dVO`M5SU5ZM>EHlpTbOX?#e14D0A;NDieR|KnxVG+0{%1!!=8 zu8fnWDLS(vo2#3`Z7EOkc5iSjqx>vUwtcIA9QO}G?r%`R?h@&R20U{9 z*6YBs3+?S)=r>3zCiI&qu~)d>MnNl8RX6?h3+z#3Vq{j-T|o| zFq{;uh}X0Slg5;@-X-oH6y785<6$ywH!|h>RF6NM_B$N>Q;>jz`{Ce<8YnXy{4-R8 z!RP$)H(b;Ss;a11vEhY6Ob>)VeVzF`HQWA9#sv7Se)=+tKapZYE;&bL`(XV~NK}yV z_3i90i9`j(2A(7VzQGBWU zpQweU)ZbyL??3{UngUDhsRjaurM^cs1pI;6PIr!B0SITzg3T%DzX^1jnw^eD@r5Ed zxbfa;XojlIR0(JrfcO>(1+4A;LT!fCOs?n+2FWS@LvrH!6RrX}1(EQHeD=j8>JOzf zSjD2_XTSsPSCYmvt&t07&); zto|ry)hfQDGF#R5Cc_r>AQH|a&j3J%W)e;@k)y~hA#zo!ZEKB>8E{?u)~nU!LZ1N& z&d&XbR5M-^wC$}`)i7;$B|&X30T711)xSgP;H2*mjWmQGO~TixHVfudCC7DB0b`QcIu?r`cAhHst9gFNlO{iCj4m zPEtwvEre5f2>VRJDiLlZ!WB-!wxwTg<1k}l8Hrh8IuEM}Caa0Ws)<sO}tBd%n<;Zt5Mo<^E)F*cJISu{>_&EV&u(H@&+KM3sWH!~BmxxQ zGfBRfJw(*`dDIFLmKzyDV;MU{x3UI_`aDmq1_=yK`(bces0J1ogHssQ5H5m?+U6Xb z79t7v7@TSVnr%Z%kNxbb1J%&}WVARyv;!Tgw(F`ca10W)#M+j5N9BR6Bgj9fwz$Z% z%VJ92W0$3#h#bIrNq=$bAXQtW>Q(xSQwOQp1K6_Z5A<6eT+Fgd(kW?fGjLQI&y3fT z*hB}(*{OP}2SI@=Wn`DT6fUB6sB}_-XHF-LM$mw#EK;?_Wcns2Np(pcYtAJ^Swn~Q z*{2qO1bpgH_|!5raIoQ1`=A=4EF@97oIbTImrv~n&}^6KQ{ukGN;R~c6gvPQ+DeB{ z9j5Dcu*0X??DY6jx;MWuw$e=LdiYH{X|qD~n^mf|TGgv`zgeYbS1`Y^bm6>d=d3)~ z&D>}aQOfD?PBl6RvQy-_M%4~i^(vj`8a3PL;7Jof{`cO>gKHVjgNf2QHMfm>$ZX+z zIBjdu%~Gx~Jz5YluO#J0bM;9HLr;82&YUn6cJA%o#g5>M*_X53aqnOj@ zLmlVh4Iaa=x(Lf=$z$_yTj_+xjH3bhxUmB@XN9)*V`{YM3@)%iYOPJuZ(Gk0eA{ zLp=65WgG_*NEv(Mp~4Aj;CLft9FJ;hXMGBN|EX%q{%QTl#WA zWX%X+M**+ko(RjxgQFtFJA`y7HibY~#X1tc8x3{^XmYB$$9_M`UOIA-!v@b{d6FFVCK9 z@D;xsaGeFlccFBe90&fs8Gl_)-)FkPg5_Ik%+$tti$7Vd0&?(j>b#q*HootcJs-kw z&ouCF22AJ*RbvRZI1wyX+7(3cHUbc1CwocGcw;8hJEasSd6#L zs&=Kys?2!XtY$A}@n&&##@kga-tHo5ws>QBEZ(>yfU};f?j~4UyyyYgenf2iRE9CnyYe*a|R0x|hgq&_~@D>LDCg5#rb@f(# z92PCZ2H5MV=idT6TSvb`Hn~N$zhb~~n1LLh`MZJU#%vxb(yh8p7#kSLyjYnKb!mhX@}N#J)Poec>&n82+L$eQ?)F z{I5Ht_9-B;%naEZ;k|s>ZcXvM!P{Afd`5(9&mwix;o)O0ym_?ibVrUpBbEOKV(hWa zmndkrGh_2GX2$-Cnq>{;K8NxDfds<%ZiMljMi_sKI`v+A7=K4~_u1>dM;(Oxfts?; z2){E|g#U{`ZEhffk;eZf2wQ|ZA$|fxHf#2PxX68g{Nlev!S-a@N#PejXb-5`Lu!^c z^_CHey}>Oz1BXc8LhOG9aSG(^B<8(rMQI6Zxr-8fn7ND8AJRH(?V>tvYcqh{sAF;4 z4+ZVvoskHVKe97$ko*xQOMl|KT+gn5pjqmp+%K7Z%s;z+KUHFzQ8a7SR?@u?1PGRY z!Q>vQ8bIQ1Rq;XspD4EzSw;aHIm|pPsoZC#7aP^bh(vKus)LB?W2$aA(@29+-Mf1Y zAqZQR5&4k=4g~}=^f2P_2p$239#S>dwIgdt8>**%#nYE4|H6ND{T-w=aUKW(T!rw6Nu zUiCW9@6n`-ZJ&je8DWnvm4 z@VBTm3#Hz%_9BQrYWucR&e_EHZPjrgmRZWF<2z2=y$Sc79q2d*KwQTNfxk;SMp5c{ zEc95md=Z@3KJ8MU<=w}YDm6smSrTa2vChZ#acZ-jCU~AOZO=P7F;hbpGv;Y|tWUSn z_sa40rmFXtGd2*(=kxmn6V0T?9TQV|{z;}Jkh9MtHtCT%R%O`H{J?3-M!;wv;K47f z(?sR>c3{@IB$3StKH6!Q|Io?3g*bkwnnH%VosYK2Kpt=KV`hz3fJ4rCB!cZ^+YTa| z5hBGNd+Dz?$+H6QXZgDyZJ^ogo*>G$E% zFXWefaoHKMy}{4PbN2(dZD@g<{Ph$JA9$wtobB!l-X*qFVI`VBfR^^Ts(z{h4c>xx zwnBebwJ)hA`x*RY8*P%HR{Oh}{S^1cK|ycuE0U!R_>@x*#1)rCB-&?)WO_-6KEQP| z-WVnu&0@0(PJr2#wj%i(-;05xvkHDgG&?vEpy_|imUWczmt&WrRr^L&|AD2Flgp(1 zT$T}+e=voN0Qi=e9YV~+aoS>}C>!kMYshu^>Ae}93v>(*$ z*Gwecv`X+_M$Kfr|6{(Y;w`QEUe*4kYCn?5hmpu%tEM(sJzvlEjIl||HRKj%EIl&2 z;G?IyxmS@$|H;E9_)|VvL;q2=pNRV!;tqFt2gZ-Akun`LfgGhA*_Lq59CR!o_~>^$O4=_f zzd3W1;%EDNR~!jWLk}N9MHL!@yOih;6y>s$Bw+@5gM)g9z%+RW5SSqE0Af2q zkjj^n=mizvZ2Z0PeEQn{-uM;0YYf7h0Rh(dkAy%&S(cKjA1h0M=Wd~G7}}GiO~Ik5cM~|Y$aCOzNbdYxy+AsXMxWqQV)=H zV{|1SqMNa#( z?E%K`PxHPqyE9MuJ!Q(y?(IGi*EOeEU2~8)PxB%}n|nQ}UV3t>J)=qN(T=F1eS#$5aei<8hrH(?0z;k) zLtY1Myn7yX0Q3ScUgX6~C_El-q=P;PhV@VxZ(_VcbeY^g?8Zi}*X#FrS(SD-#qae- zGQD)~)*#IkV|R|9<5b%9px*hYQSXv<{ zlyPqog+Z}y1{bK^jd`0?yEQ|=ntO)Vf2LPdiHA|n@J8G;?i(}`IPGDS00s6P2%@p^ zh#48(62rxXj1o1-rO@u@~0%Qlh^cSWlv}EOFT}?z-gaY%Vsuw zPLixq;JUS6e|-rOPrA{+oxT3Ey`oC^x3f2rZt-t)N6nqng(>@*Bz5)TS8d|rq6|w< zu8ghwnFMykqs|?uTm21T?aHjq>Ba8upApe`Tmjr&6SCRg(CFUm=Xrh;cpU<$g;*wjFaS6+?O2ux_H?&=_RsWT%l( zQ%18^bc7RTG{V&Z+#`~4kcI>Q`Q8ypx&6HUd`f3GHBqK#P*ZQp^z*#_Uex5JCdza_ zHJwA#{h3}r8{|)?CP%K%>-Q7onK-qdV?2}q+8h%gF2#=_yx!L=XF~)g@Ip-B!@Yq5 zZ4U2(YR^cPk1~scXOxzln94k(4JUxx71StlP(+4n*D(#W!14~ocW%`7=BGEzHM zGTKpwNxX)({Gz7zB{9V$rXLrRuZ!tk;*E?V88|?De>4d9a^p}pfVfM%xf6(BAe{v1 z=zJm_?d53NY7QENT248bC?^x;5FDMrY=Z7`=S;B%X($Pq;ynrOt1@y*t=t8~UFt>h za2uOYYyfB&>P<<6y5Xqfz%RfNy2Avo=VG?{oy^20_b6s%!yc1Z*;te=QSa^%#A=xN zsE`CWa>sf7nY<=2Za~&VgfIUPQ|nuf5m2Y2zDAsh^2w61+67$dW^@djH%v(XV~wU1YM;rm^ekypc@ z@z3^pF2}_My>kn#;ac)hh>7J9!xYQk-8`ElUd~#&&y5uZW_-WT>$$=!h%9flx|-Op z0K0f4z5Zru&$p&;t1;s!0cC|Pc8ys0O$B|@pAV7db#g?w23L5xYw#v9Sc3W4PB|`v zjNc}`CLTye$E8~njsGn6+88WkgZ>R_&jQ}-j38oOw+tl*SqI`@R0e9Xq+V!&rN1TG zC{A}M!>T)JF#&Um9x#oft7nCbFDKy=lKTbPu*ui`S~h}QM@*Ti{8_8%#KZ&7Q-Vh2 zrJx`Sjrp_;bu5dQ+V}f_4VG!GS+D6%=eHw-qQW%SWVkV)6L$<_0jGgKiNl|4OfU_%U^PW1LP7skPhhfsT{qeF_~uP`nVe+@k0UXh?OErI+-cX(pGPCS`XaF!hNYK@ zXT8_*7{WT%+j$OQSmlpwzY5aG8nmp!*B)sUdM#QJS&#adU$=slzl890Q2IA|4OG!B zPPS%SOY+_T6+DCEdVA&_h=6Bi!82RDflZocj-cAJ)f?Gl=b3lW2<`9j;(cCxz>AMi z7~S;=&OP^A-L=)uU0)FCeHc+Ovuab|msGdi8@XTi7Cqo$dI3f5F0X&Lmx#8bDc)Nu zc14?Mt>?5oXs*gzAa<8#OUMB-?WN?))T1W3{+*82oe4t`%zdvJpbWLI$(T-?_kAuaL=)J30?`--XQL~5Eh=2sQ( z(^bX$j0!y(SIV4&9c#DOzNSEBlQ?Drn}0u|y3VNce~m3^9G^|cUr}g3_xit})^4bw zMBv}}VhlN`Lili8@9_122!!t_!uO39yPl|n!t;313x(%LYwW(Ui(PLb{oWY6pS=E` z5dl^uV)v6b@;!^)kG8S6LmZz8jLD99>?`|{4j`szLd1WI9fd2%P03M9BaLvZjc?4p6tboiJb;eldPA=u7=@mz0lm2|(99QT zqM@%OK&^a{CU)qniOqn%hKS8~+?!K&uqZdvk6M|`Kpb;hk{z|+h8;Mrw;j_7P@!iL z>^RLAXy*&G(d?Lk7U;N)5W0M@RHWin8Da%_y;dfK*Tq08ZV5qkTu7L=6;0AcW z?+bW+flOZ@U30<$GHb$@iykGM>5V;h%s+-~HVTOk9U!EwDk zb0-;A=vfEP^zsFI`U2-_ZdpwL`}iW~+PP&78UbJ}aU0xnH}UlInFpX=5TIQ*^kKf? zc4&7q)`Kb1k4$9=?amp%I>rW6>zgU);=Re@ji_W-3Y&4@AK>%k`>@dCD;+l4^*n*H zEu<{ppzM66>>fL1_iD%;u3D;H2)_JR(h(@3A6^XFAAA%&kI)?(`dX95IiBNGO5zWwza zkrr99{X*tG=AVd}i*M$?0H#QhApwKrkQY(Q{e^CjdofkLj4FT77b%87>jecPP0N|g zV)QD(Fn!a(sFyCeUn2_BkD{#soj*gY$4N$P2_ZANPlYOS8mHzCW!FuiDVhRKK z4k?)A!?K=tR`!6gQHM4f906fulEFWvjQ?HYH$J}@86zA`x4p|~V8zgB6v&22=E?WK z%PwI)z=6NihnN|>8eO<+5I!V&dJg;}9OO>*`MC)nC@=+kH&vY4M`WuORK)jS`K88OJYeiyI8(datIObrHJXoZ$gb9($e}^2n3di+! z)iJWP(DMphHOm*c+!vUs`AKRBTwz~irk$T;Gy;Ia3nvPryAp|Yj&*DbGe^M&tPS+B zsR5DBwN6=cK+4CGXx6ioxtuy2JF-aQKZ{C+w8&gA;~Cz0xT1r*=-x1Sf)Y*V!7CtA6V!MEYJekoT?4U+!E*J!C@i%p{;xt;8^PxJXS2w zH^w#`qYwGEOas`K0Il#vmKjtdL3XM%C$uL91Nsg)kE{Tt*5~*W@%-IVY=3S!K}`c0 z+==6QL(L@3g`OjTdb=-ht1obiFL0BF*@H%?@$$mQi_?k2fb~qAM{Z@#)%I)e_K6DX z&-HTdCfEURcy9H1dU*9qv5u(n>ug+3TFwTd&WfeZCh847&z;r<7Kg#J_7(<-AK%2B zj$`BHUuQ^(+{viAZ)7_oeD7=(Y3)KPHu^jp@Ff9knS`&U0c^Dos~6m%;SaFhg~3k3 z_iWafYB!77j|*n%+2o7Y1Z^V0T_KnTO@po+(zVGKx!vT%d$fueC*DJHx`WAcyXgM9 zAI~9CI%m#SHox^CQq$%O*TlfVs3=I>soG}sL{AdA4KpB=_M+phKJ&Z3?&8B0o&++w znRO`U$~-V3OL1K9EbRvo$kGSU>38@7+qL}6N3~~{FS4D5*Rrzgk48WqNUVl*9Yj2P zEbGJ_%=63-kzF{Bt}gjHaWI%7d$e`Xv9z2ADFj1M8(lZ-q^bf``5*KNA#8Gt{+fkL zW|jKga{6HnYVf4Dj|<~-0avE2TZRcm{I`%y(Qs73sW`5;Q%6DsocbZU{$5|;A|8i#%lK)G@?k@aBa$kL+dM(>m>=}jM>8tpnnFx6;~*jTF`u7_ z8?TAee-t5<@{k=zlK(M+b20egt$n(;l-ntti%>npA?GHiNwVBnmgR2A(uDk~nu?;3 zG~XdP5G7R#%h{MIuK_JJ6EpZ!s*m94D z5Bf&w`U*ieth}nYta5Udrd5@~4rV$wo#SaOu+=&wzE)WojmCIh!8UQMS4wr1*k85t z3if1Uz{4*bd=VPWA=Ovnj%dYQC1Pu+y$|xz+H_MP+g%@ z&9tYI<>_cBEW0c?uyS-&O-ZdOtLo6!yKeI2V2wez%CZW==jy`4LU^{cKt@g`A-$T* z@|B{tlcAQOx<+TbT96pT>)4m-REzDYWO*SPIQHH%LqRk41!#-GPT9*Ktk8uovlq^& zR_atY*;C2#4b)I!z~4dh{T({S*k4=I`v+bh071A2wQ;hi;yPi?E=o6J+`T#HRHUy|vV)wMuU-k8M>hOYa~lKsf^?p`9+uX}pwc!Oc-u zr%TmEp;AMfc$5_-lrD`ZtqBJElor+0N_e?7&01?DJjcGCTnJw*5>l@f0Dipyx)eYa7QDsjQmuWi-=aJEMmS`KahX7#lI0cYQdua+;J}@zCQP@b zOGPzPFjkr{Dax(sQoov-A+=MuQ`rl5xnp;cKt)-ZE{XA!c|DANEOCNE!t}57~ zGTN;a9oEvWXCJ$wlzUEqKL($?07j{np{(480+%j zdeFXw9GJq4(@Eb2@1p%T zQU1!ygrCLvPxR#`;QTS2+3EZto!RO5p0_)`6Pb5ZWZpNNUiq5SD_?PX`BP*bAOAnH z&oWv0jQUKEzKB|$c(h-x;bD4(O+kW#YpCDM*AlA>A0hXSYU{0mKGrj*1G zkXOFW^RVG_ z8t-e4I?*RWqO28V4KI}{-dB`L-dE%b-KMD-H1Sl`j3^708!uw`R8g8CRTNw#gC)$>yj__q zq+bQ;d}%c+Ln<9O!Z-sv*g{%X!n$6Os%&aTlFZAH*rm3pevoEG$NUVM0`$q6D%qfT ztI&Lt(7ar?YbgSc3p$g}mgqY9sy3`G2X25)Q+Fbiva*6zcd{x*U%`01k*joU5aoIS zZC23-dWJ~D?phOd@(3T4}MW%oi^%xX!Nx5U$TUxq{% zj|RcAa=#S=B^FG6UYPovF!fo{S)LJH^=Xk0Pm1=#ymUSx_#PMKW1{_0@Y7QGe}ey@ z;NQ>N<$bV<4}}kBNP~-NL&Hp#oq}CpS$+@()J`!$Zbvdfn#+ZMLn=PzUJ+YuSEF?FO?5O`93e@BYI}O zl_8C;DGLSj*eXe6VpC?z8yV7!QAOo-u_M51ajksC-pZFUqyfPq;|h(t>xFoU@UCzR zrI#v&$t|+-UWQZ-zZ-f0bC-j;i^gm$AK7ZnnW=SoIa4Z%wd|NZ%D?Qg)E6p<{qftrlKJwd@$(LAZyi_{yQf>!<{92? zaplxZ$$pS)uj@Ara(qRn^vL9k>vJ>N3QRdClMkoeMSYH_?{X1lPs7o1HD7G6S)Qsp ztdwgqZXr$1l!}MdR2c^-ZedAWJ(t+&QIv{IZGj-JR56AdE@ct*X*!UQFxjxasEG%p zIxdju_CRKy5Xc-INLZ(}j@nn+yZ?%~Xy)3Xfz``&WlQ2JTa-z2irwUKtv!ru;=;Jz z9)@y<$h%trhmS2c*^9m*uISq`qbntS#9nEqkA`Svy~y~xh32)o<~8wReP>+V>oTQj zhFO7f6e@NI(OY%VTjF|hlfAhc;;OvQ&fINr&D}4|eMpoMfo-=Q{|9tl%W`l}?Cij& zIpwer@`P^SqnHtBj1~K&vV1U})I+gS;j-5RyjMi|ve59NuHm^%%)yg_v4h?-R@G0% zQ~gq`YB6sg(Y^6DB2`pTZFBYUrd7}Dh>>9k)~1_xb@hhX4kmsfO#4Kb_K~jheVxM+ zfsgF~L)7m=)UTraMTqh_RPhTx!|J z`iX=v7n%3BevAbRsEs{*f47k+8;UYnlu4p&z)Ly7qnV(1Z09)qV#LO>zill0GoEFM zo|t71&jV)~N8#uoP@N{u+llkGqCAzCatom4!&Wno?FB~@k2KkkBi*sWqV2(!o|sKv ztcKX`1IA_#r1F(pI@oI}Gyxdh_$;W}OT{l|Y`1g09?KkvVT#Xz18KdT=tvmh;k#rP zc-Ssi!Z1+|73E-2p3h5Xe-GR3a^`#ZZdX6yr@p*Q=*3HCPY>U<>fzzLYv+2{+Ro9P zw<|fkUFn8)?7AskdApnq5AaLpjxg1@3?L86a=>G|>Xntwp6FyCYs>euZR3qyo?MSK z%(wui3q0E8Vf!!%$lelxubAUkCUJbqM2=q`r{f%Jhe(!3+rXy;7!PvOn)G6%wOy~8 zV22$M3ky$QDLj3JC@(Cfn8uMi>ICwTu&7p8R3qxEIiFmvTU2Im(UdqARah;m zibXCfl^*l%8B$($&Op#i`wm(h5P@YJm$FpgzE0p?B5*GjxaR{mANsELNX2Y_t;lpA zocEkLo_GuU1q{EwuOKVephsi)q`OKj&|AV%_#DbTz$%~mB4(n?&}-TL+P&d&|t76XuMjjLq_5Tjz=02tT12pv%MMl`ndM2wAyn^9D8n! zYtMF$)3HsI_X_;?z&>nIDOvUO`nQS8(^!bSU4X=3G6q_P!5Tte5|F|;e zK~e4(Aoii89fwEwxw02vX!qn{;p_)_y}VNgwId#=T{fT;Wsh~VG~e68ca~yN%gS!Z z5>u-%k6GeObU6R!gRAo|K6obn$q^?0A7WJo!^H%)a z(cH^#C8c`V0QG8gO}Xf>#?76|YoTRa+Xg zEd3;JoLMx{D-{wo?PG{h$6z||qO|Lk=tw%BD{GL?K{V*cK{V*=Wix$ZZ{D8Ji?=77 z$J-Nn@^vwDvLi1Y0pXN0L64P%;|xx( z_<6nJ<8l-)ua{Lgi?293#Pdoz8ccJx2W~AWFVT0xxR2^&#SO}m*x@e2E9KLQT;IT_ zgu!-{m*zx$=Am0er+Z^psI<$-?m%_*N_~q$cr3*vr*Q+NL5|n5&@&HRoITHrO=NK) zWsGVAxj`Q<-64x2Ns^NWc%us{(J$qs{$5EKtwW%_!^X)<@}T2GkdueNX@Xh5?+MU<08rwWSBQ-XR7|IT8Z(|y}XymU+uo#wgWcY-S$4{qmsZk&Cl}gBa+)dh9$at0j zx*KHW3cV)^*mR>xRxbDIYdBHQF1=|to)!*w2(Y(_a-}G57Ud1Rl$Yv8EJ5(%I8>Gw z9Uu2{8{F61<6d?g+zk0ffov_1@v&$PV#zMGDb~m?{T@ySb{TYMRH9gKX`2x1>>;eT z8CS?>kBHu}SM-jDMeo=n>UWF!U1GGnS4X%7(Z)t?uqHIq9^ zhA~IKh`WzG)0H`$gdUS>XFg;QLO;_f0$$-&;}q5C_GNb|`=$(Z@Ht z5`6rYmea>?X*qmsF(e<;G5iT1#o1^4Jsv#CXK|A3lO~(i6Wm9NFLv>ONXjWbZCFY6 z#ns-xrw^`{A*B)2^QQ<6qcNq3+)@|Z9D=LZLv5TnB+JcwQccx#(?r@Nu8vmmbSQ4& zT9ub_8g%k5cv`H^cCk9!#MSBYX^W=lf{Gl;Oglq2&F{0_j`YTA&y3Zc9#{LB@hq0R z>8iVM)y5lSonzH@idEY&j#@>@u03IO#U!W(>u=s$7#sxfB2Vm(Qg>ln} z63KCifH9Sqj#6Jrq8sSX^6fj9j3D1{Wwj8zNbM>yLdY!*JcvtR_?(1Hs-G}1b zaV1rk)KvuWe2%NGvcwfEtE>$L%ggI3rvxj<)m~P2$@HwOtZ~6IoCaN3^aaaMPd||f zWS^Ba4omB)$dKA`(~7gRI%Tnj>^B{DAYaxU$bFFaQ)P(x;kw_o)3wL-pz9&mBd-0f1FnOv=Up$jUUYrx`poqU;4D&?s7uvl z>hCJWy-mGcy+d84-l?up?^4&PcdP5wjp`8AwpI2W{UsPXKUr}FG zUsGR)xo@lQs7KWI)c4g7)DP8<)Q{Cq)z8$=)i2a9)vwgA)o;{q)$i2r)gRTL)SuN~ z)Zf(K)j!q0)MIMcJ=;CUJ=cA;d!G9m_X78|?uG8f?j`Q)+{@g{-8Z;zbl>d0#l6yf zoBMY69qv``JKbyCce&TP*SYU@uXk^7Z*p&TZ*kw_zSq6gz0JMdeV_Y&_XF;o?p^NP z?mg}Z!m!u9&%NJ$zi*9Cz556EkM5t`Kf8Z% z|LXqD{k!`Q_n+>+-N)Rs)90kmO`n%OKYc;^wdo7f7o{&wzb<`Q`ttM}(r-$?IelgN zt?9R?-;sW2`kM5+($}T0Pv4NfF@00|7Np9y^zBHO9Y~lay^5T z9R1<`1ZZS}W%?rw4LhFQrMt`U*C{)vdvtG)EmtWL^#yxL;$GuuW^#} zW;{9(1fsj=6iIrmnvSA>x;zmGY8eH^bFYfh&=JwW#R1A!>>SqQy8Gmg!=A*Hnxcw| z;J6`W#Whv6Rg*)mQDwDtMdhx-P+dt`6+(g$cvPQplgcW`6=$DSQeN(M!Fnk`TXiM) zF3R&nlJz{cF$8>fTiflwe{DTv#Rr zMoVW)fr2UcZ&J1t=r;h>Lq>qE5dY1T0{K<{76JUgr;XO&7#)iXD)Pv&t2<1;`nMY@ zZn~xY=9f36K3G3hwZcsoEq%RD;N|SU-+O!BSDU*YX_DH)Sug0*ib{f$ImD-xF@JY( z)QqTlPd>K!s?g!oNc|ud*MxMLn@3MlH=cLpDMOb$*TDJOPhX|(sh`Z+5IQ__{=D*)(>Kn3=ibpRzm)#SEZhE8>Xr2q8NwSAnCYVm+HN{@*|OI= zCQmx2&*vA8Os!6-7slyKBDZ^F(SqHn_s{%r(##`8_s{!cU+S#-$ux*e8ov0-;^ybw z*!P{UJHGeqCm*Elte;549C^enZ~A!7hVuu0b?K-x9$9~9*Bia5yD5$S)yiG#yKD$z zO61iKKk~}fBllet{N>Q)sozaYZQ8tE?gj4hvPn#2&&3z7$-8*rAI)l=L(aUT?vd12 zPpy|oyj`V~2@GdU%xk;gwS{f2bF`U%`NT(3L#^v25E$_+9uv8IY1w{ve}Bcc-#%PC z{`*}Yr`FX^WJR!|s%9n=**$UXb-kV%{H1jB$IIl&N%K+<)K4USBZb$*Fp-y(4j6{d zjBZ}sx#chS-~a0`sh^)#FT;yzZNMb{_36t~cO`!H^0b@Bk8jf9{f|>q(&{C#sJ0fj zmzc;w>Z*m_>;}VM+*P)G--aenrr!Rq)6}y5Xeu9F)qC^&G2`3qDxGz1_F2y#IOSBl zvH{cR@Vc_%OY+OBs^~Y`2~L+Jg?q6zXSk>}jw4u1yAL&$rBhs1dU~0PbhVP85KnK; zlivo%?XkFS10MO*H2IWN6?^9u)peoZgi5^A!GRBXNa69E`qQ>JE(LYl0i>Z-l=Lzy z>5O(DT>{c}jI^yzI&{(`D{TjS>^-~#v>h022c0&5u$A;>B7F^{BN=IiPTJQ>`A`Q? zrs0yn&nW$>G-m9Dp{hQ4BeJrkL$@S4!byCU9WLU=-HPpr@JKLR&KNqXQlC;RpXdrd zucWA&Px5BY63+Pw)>Yv!I7bX;+#Zge4pSGxQCDJ|3|?wD2p((ze!?^U2e}^aOE! zs4&iQRT@}1Em%_<5G9ou#_6la0tBT$6?!jU?#;rt@Y!BFF(VND+}s&IiM#VBo>u(pW-Q>oc%l zpS&Si*#j%fXpb*}t|P;BJm!xK#_{c72oIM_n<@=|Y$vCxaw}DCtI8czIYX8Gs@zeP zyQy+dRX$~_NnqcqN<1mnfUbL`@N_Ql(vdjsiR;#IYb)M* zDq10`s9ZG9=lgeIl{KeGkEOu<803mVUC$m`S1}3ugi@ZKi4ZMV{3Obk73O}HbV3HeM(VL z%_`ob3Sx#K$6KGqM?M;T; zfsRmx8-^;t=3;E?kB7!t1wqqeB{dh4Iyff??~~r~j1Gg6SihAf4{iQ?{ra+r5*ku*|3{Ca)|a zuYBE_ekxJP-+IHvbz$P1UMURV4;b^nwG^oRk3~ zFnb--i}7|KI#ZpchN$Y1XetyuuK6qKb2UXe7Msb=lD5+H;#w2_9FD)expx_IFhgi* zV%uNdW?tk!VTG6IA)XZJ9jY9VH?;3y8kTw8VFGE2X(&YsXk$dhB>t{EWIEJ2-9S@u z$&?ChBoO0-S3qg+#D+y>6}cwlYyw)HQcF@kC^!?)Ci;TzwbnvNM<*LiSd_6VFT&i2 z)VDB*jPZmsje)a;hS^SPauIv4Cne~AfB$*lKM(xpf&V=4p9lW)z<(b2&jbH?;KUv% zPqD{Z46>BsD2eb~y@^-S}@0{)^zh z2l3xSyp+SMp@>z>IR#1!eB@G`oyX|q76nRnGF7I9olRFu1+MVln#Kn0;;ST{OuXg1 zdvboDTXLXFa-efE|CFDnK*sk3eV%iYJ>8P|d;RfkS+`Tc%k5SSnM7)MRImg~3e>#+b z5nm9{bes`6HyLg0W%;>)dM4gdjbU<<-KRM7hInY}e+u3Z$0DD97 z4Tkj94e4z#gaI7{O=klr%D6yJ6q6o6Iub|=lLNz(0|m)}Ap&X70{OfGxtC{jvZv5C zEP0+WmavSDS`#V6@mz`p;xgP|PJwRD5Q8})F1?}69G5$Oi$6eYaME}?#euQ1@LqO9+a9V$tU5TX`JdTUEQ2Uv{@(P z9>~jS<;l4z zR{LmZpAYR<3)L55$z-fIUOaO%I0AX=T zU|~vNfdDem(?|rWJpou81rS-N2WkOo#URYT615bliU0>?ec_Y<&T_z6CV))QJko?b zvdSfe-2`Y^6cBl2l`D4zbeBavg46m!CkDB9AlwBA zt5X821d5rS_C_bHj%tsrvN~ZcfLsPApsX)~D}Z1<5UdmGXL-`lEoV2E!aj<@I-^Qd z=Wc+?E1?o)eN~3T7*U{hGt_PrYQwWp=W!cVZ?vl30@dL;po4lG*IWJ7T>Vz4zeiI) zkJM)h^=FXf_dxv$TF$J%$Jxm8ZKQraSC3<%o=qX)zfjF5l{_pCLCDu~><|k%tO4cT zY&j^ORiHF&uD8=6CLOF3BbI!v`$`kAI7^GHW5;k&qP1+DV~Ls|z0wH9A- zUQ6b=Tl4YuEHZCMYxc$1d3ljR+7TabhqZ>7b=*uG*T>5Y$p(&OB#;!g4h+|jY$PP! z)_dpo>xCPhgru-Fjz{9Z$Z+il{j6WF+);#N6Gwt$&Ee#%&IL*ct?)9Pon4^R@iSUv z(;<9L4P6S91JMRLZ1K;0N-QCy>i4kXXzRc?!iu`cH?8U8YV<81DUJQ>`5HF$u9L!D z$)=;NwP}_UB8~2M4eo=Rrg><{{Q+X9A&XJg$G?Ostl~yDkd?K~4@_wr2(}fGcB48H zY)fl%@qr=^ucR%9*PY-^X{*8Glz=ze0B>qr$WMnLK*X`p@m=|~Pg;TU`DuEx(qVJn zkY1pqr0ETGcnWXu{4>YX1y=Y*o=|oKLO zq)i%eJj;Y)+N_LAY@KI9yxjCmtUcmRZm44Aa8N?-eG_s@D9 zvGhc6Qq}xGQyoOyW(W7&7%o2$64 z1um5Ji3kDe3qY*^sD%L3kJ4gm|MxFzvGo^(f%Qd7;$DV~ktB)`xhT>iiay7Pp7~GV zC{G2-e4s>GUzBvU+ZHHW3zUNhC4OpvzfbK@-nx?h4hxi8rc2UM)I?gx!JIIbp>}fA z?SPstdr{UG^)R6B0MzXT>fyLd^SD$qoak8#BxW zI~q!CTSh}kuxr{sacTP}UJ!06qTXesH-$baYG*%q)?vtm(Kr`rJJ#tC=1q!tbn`M{ zUNOu=Szq%?VV)o6d4+jp9F8 zLm4+8TXyAJj8KW8Y$`@SqU>8%b#&h0NB5CPZMK~ngN$Uyh%q9|{$y+BM{_@6Vqyr5 z$o%7$9{kDo$4MY-aI_W7oxv%^I^dERWMoT>LL;)@ubldDXhkU#6GLc3Hle|@ZHB+O z=p>MpjDI`dG2>ekvWkdT#bcf9sm{k;dC|k%(~&xK{g1M~sZ)d0>4?+`sDU#?_S6>0 zb)HTvfv{!WyKYc!w(9S!vZ~&7au=%dXRDD;Dvl`49PXU6)k4}1kf#^OGdyQ7-Yk}U zI#p^Cee5(6(0g1o4>eaA8p9Kf-O%6RzHwmJ{)k04#G;D`1iQ}1s)?@EJ>AKvY+XuyD`#u! z_ic7jcNHT_m|eVcBJw8@{rY2{4Lv`5%0NU{?m`k}HxV6q^|WVp{=LpXbWN0~wIIs) z@Xf!w_j%Dkv>;045=5JZwd`E?+lL0CYokOyL6rH;=a*D^cN>TnMv1Zn(e*FL17F`g zcVE=HMNy(0LDZ_{rMZVkO*arNjuQ0}M0-L{&wRWm&25^Wt|Ou@EJFvFheuw?(^m5} zWtPG9S(pScK3XZY1QwL+lu;@%q}l*!hyoX?jgaA`b^u9aj4W*|60#^*CkK!sCbY%~ zwE(2JSpY7x14wK!vMc~8ye9{cVtkSSDbf~z%KL0=8800sIhj_ciDZ-xl; z*PiIF=c<8Rt;^nmYA9IAi`!6mdKrh(-m1Tk%Bu9Cw6_}RWf)5P(oh<{oj7w1X{yuk zfs_)Hx-ZDsUy|g`>Bl%%;oOtQIN7zWc3D8z3;o}J6J5c)FguDK6ggKPmcwI=Bd_yB z7}#=?Ll_%f>1dseF6f1XiF`WHEag^2Ett6cC$?j9=#LU4cqExH`|_c`tvEDY5xNgRUg&g zmrlh7$VPGjM-g6)V?^M9VWmpf0H)v=2R)2(M*P&IjdDs%i#BFN!+ADjCt#YTnt5Li z-_v2CZY551`REQ8RtyLMxf(CqvipFn2g&NMjwxDYeU>@cjg3XnZI!5;f&Y z6eNqY6{M!wIo5cw;wGG0=cSD*&jsv~we@|4ZQs6oFj}=n+OdiZq5f)6Bqd2{IV0F8 zL>p0&p?2*fHEY5PK*MvAwzISZ*n`^KQL2BWYR8|EGuod2LXAH{{9{yq9J=r+NIORB z2hk`>s0YC@g7#Wz>nnGx>K~!nnU;}rAv29_h7|~OoKW`}+Y7TXJ0s_!SlE#Zn15h= zcrG-vE6f6_;+OnmHH&E1EO(shzsS}jX*uI#MI&9K9^FU$7ps07x)VXrgBzZP;PWxp z4^iXDZ~Gya`RxEHn4tQ(e-7fz6URUQqc)z4(eR%A(u{Of2XiYr`DyOByd*WX!HEK>K+YWOQ&JgoimZ8;ZsCj5F2`p zgY6Kmx|r!8oqR9u2RJ2x4a-r9wo3W1z~|e~8IwLJJ#7F=>mBpFvcCo@^}La2RbZ=t zNREdQ>j2gn67-q=8R%m9_ACx^i&X!__|}60Kk698{56UB>p4^$&tFl0#G0;~!z9|8 z!mnc;ya9OFKw@24x7vz_8P%HP7h>Ym_uT1Cwrn2HREj@X6&}Q!(J!N@iVFn zApeQO;$XCK*c(vH9QGy-a;K<%?uoYu&v85vwUm3pXp|0=O);8PW={}Jv?uUorR~u4 z_HiBaPll%BLAG(sJIpbDcm!F5o>xRu(z~cc@ty(HMjV^ROP0_yo#vvArF#=b7$$s}Sd4b)k=1WT zX@YexXpdd=`<=?jW&kEOiox7n_CbhN|K((AWRD>qaf3@Enj76=6?(pnEwec zK1Jafu11FGE41U>VPnf+z7Rxau+<;`7yI7Y4J%>!M3`}y-6z!dMtC=lHkelM&pb_k zw0{*NAi9E&-e?Mc&f$MS@WuFW2**5#*4S|2Uuk|Ct}i|R|DqTpiS5ykqm4^#7Xs^= zwbea-M~#Wt7`B-EmXukv**|V6?MbpgiaS!;zHRs`g9~T^W-f^F2}>xeUqFq&f0#dC zgGCd+2glsyz)7-rYMbnf-#K)&1WpsFcSWkScHM8GAksh1HS=H^iH?E-*UUJs_cilR z5P@sva$GY{RRg8kHS;g1hJs&Fc&5c!egDpB{@}%*L|PfULB(&leJ29yDdiM;`W`1# z+P!X#=fuNHOeju1FQ-PY7XCqA;_ifqnzra+kITvUK?A%|WxXUZD6w3U7+T_9k_gu= zfM}M6X++yIh^FVRMn)K@Efu80-f$je)$yL)zVjGi6pItg)%yBYvE3! z#yVYZY+yA?OWTtKpb2gU!E8~Sii6x4s-L^PIq3@-+-?=CyS)V{0k9=6TJhpkV&@1s z+{iz2dFZ5FZthso7Bf@&_n5@!#Zq3O!vNfN#f#4Ai{|uVk z=(WNq+VkSHsLF{5b9A+3&Pwi0e$Tk}sR^IoznpS41{#)d#COBUW-BW5pNvvOtsw)V z4>*K7a1?30pwUgpjDn#RUVJcFrTga1yx^m#Djt2V#zB17?d;#><>#J=Qdq$_G%wNf zvG5E%4~v4HW{m+u%gFd(qCL~bGYm|$uL+8{U^1aTQW|HKQbB?AfC8%&9M^l5aymp{ zl`;#fl*`q?Ol_5N2CAWeUQ>(WEEJxr*!n^|;V@hE&rw;Gep_y~8oA1FTW&5JN;?wg zOvcIMsneKm%SG=~887|msYrLu)v71VBplNQ{47Y#ou~Ts7MZp9=aEx7am?Ag=*)|= zQ3xFTF17_nBy8^fbY&H}Ji2l*T?nDeQg73*KPeslm(>XWcYsY>r$_I_5iy&a{-Gz> zv}JrsV8zx)4O#(9kt~+=h!Q-`^J{%8L?d zU3T@`k8D12{SpIF?=te^CnSCC8iyoiS)b)uH(SraK?IXwXdmXv;F9W8&Q6irp zI#jml+s7s!Fi7ebCCU;+qhH#4>x^de4U+PsMB1Yp-YKKr={vE`K-51ZK+kRo=H04Z*kCnE;g0VG3C1dzgeavn53x?#1&;z5eE1>j%+ zjLeVIU$3S9Is_ExuQ;xEf4u-A&|jCLzb;V&i?l9Vh-xSpfx>e=%Q7)JELZ(2R92-= z4$IZZ^@hpe1~xg2bTdM9qZXeDsPo*&1Ec#zqU7b3+-hy8C39&Qsd?r7lrU{khi}StYdoGW7k4cIZfcj3|Pvp>y_lc~?=3cTSA%(a$q3 z8b9<1*BK+yi0-|Tc6%IkJIv^c?9dTcj3^_z=yP}{@Llv-yc78@`aqt+cf~*#xiL;k z-9jl<0t%!Qj_aLLr4WIX+R`{baGM%fsby6es-fT#YVACyfkPU^F6An4?pdXJer$)| z0?);-qlY)ev_!wSsYVNX*TYJ5)4BBH$hk>_@hXYOTo^9c??i|`EoUto6DmQ?e}k4s zgt>Q+HC3o&S}w(bf2|r>rT6$S!9;ey=!$UpkU2MrE?;ZWU?7YR4HU7+ZIJMaixyMV z@P;dEJ$~b)Es8?%SSddZtVyw~b@5m!c?_&gV_B!0S=sZ;pu+F4qF`OIY%?rublGlY zqpohTai)ch`lFSNhFlBVWfnGCii7GWBS;@A-hxN--h@Z-@H2vOMLf1F5S(*23;k7~ z@o%Ddhb`2txf1>`R`foW7OvSAa+i^uZZ*23%Soo9xHt=nse6^ta&){Z>A%> z<|OI8E8z(RfkfY*YY16+h7{}uwc*doFNFnS+D)40S!ZUV?3 zg#5q&@Hz{*2_V0v|BZosDabj%>v812hXAgyh%f<+PPiJt8!Y4|fb^W^Wi99-0*(Ae z3%Lnktn`~ejv0Hs>bYAz7YTU}n>3XkTUhDnv6+?59-Gv`ewGQhSmfv6oOK@j5{~~~ z`eF=!V)Vg?_m~TBx8b{LD=nG5Jdh)7xEcj8;3EXohSlLj&1_%CoO+)}KIGU5!ngLL3-gV(8 zKYOD;29d&(q9M}efp=Y5kL$l285t!WoE@#E;cT6){ElY%!Ki$e0tVC^(8=k#+g4XM zv#x((%X(Y+Jxl`xh4MA$Ea!Vk*uyqg z2$9_o|3$pz(Ia+jY-to_vsoJLvtwh+q9~iqvgiP3v+cbP8`i+4?i%g76q|!Wgk1;S z%c9Ra=t+wEpAcu)2TxMOqe6sTH>(Gt$Aq{+HodkU;+}xGNCb}gMo)nQNg`3g8!_Iq zxz0G?9x`)K^rIYy>^KgaIVkW^js!E+qy`F&x3=j{adp)iO9#sPeweIyS zT97Hvq3}GZMh@C_uNR2h(7j%?oWEo_e}#k{X5B05waB9o{k`s2%kuhF1B>o91B*?! zddrEkU*8h*Vw}iL_W^rtaJ4r-u3lU4r zBI;}4J3`#eW^w-n(Yp{4c^tm|K@UCBohJu%r|4}rW4C(G%q6;&l}p=|(N;h2o4G{S zvT|vAAR5;P;6nF0q<1fcUZxQK2-QOza&EHrt@duo(ggm|R=j+jeQp)6nUFDK%5oPp z^{J|>#5Xb&)*?%FvfLT9h3vaN8iOo_RVO}ZuE@$cXw0jb!oD~V{oFZyc|caqMcW1R zQC(T$UwaPWBg2DqAOncC+8~p0$@!=@Tn@%2V+9DL9>O4nBix?$R9FQTS9 znCZjgYb~(VIwZbUSs9JScwQNUwivIJ>L`Q68tau}R9nHrFC2Uk8soTZ0-9o7HXgO{ zT^35wa^+IIRDT3MeqadFDR5U~1&+N!r7Fd46LLt7U2ULhODYXTkpEb zlkwpR5eq%5AbhSaJS>D~vXS`aF7{u$?m+DlD?WtsW zAsRUL-ZSYlJVxvb&=!N8vX? z7()%SZIsSX$Qb4mgA>WoOO}T-hG-3A_(5klism6jGh%ziH)uewFgTojc$<=aYFiE8 zl(uoWgJ>wMDK>D^pv81IP1Cp=r%6RL9&)T9*4jdEZD!NjT5oNcCQU0UH#tI9+Thz@ z<@kojgp#VdN#()p$z?Mtil&qm6B&J<1Dz_D1~}!kG$|CUsFoJAV)e771^7r2T40>2 ztLTs>m6#OZ1NOeO4wxDoikFwN2hm;PZg=E`?|5Cv9qxgZk!^}OcrHOlqI4p7Ud*S7Kw7A zC@1jJaj_`Ji*lSOFXE+gp(w|S`Z1y$Ey_`%9LY;%1TW>mx;F;K@kaj>cw>l)5h9vp zvQnr@CD}Ems)85?$;wbwqR;VZ*(oa*s8UTf>&<)|K;jPvpNVFeDg_M{aI@)uaQF;i z;B;YNg>K-~I0lxUz`$DY;Ui-Pq|;(8yc9&3@eM>ZsOfB~sYVUve*;aODwUc&6#`8c z6HS%bWLc>+JB2)e^qjf-eCI7XAJHeU=o)5~DwS)Yxdfjq!<%yLdY!*J zcvtR_?(1I1^{j-?zW%FE3FCv|{0r^Vietafjt_4Ji)w@8qF-YFu0hM>Ij+U7Yg~)e zJ6x+>kGc-I9(O(Cddc;=>s8lRuCHB3U4OZjsKXqo&DFe6-Q1)DNk@}@N}A)E>zW6y z1+InQUglciy2*8m>oyn3SmRpf+Thyky4SVcwbQl7^`Pq^*CVd|t^=-vkpCFuA95Xr zj%QuZyIyd;2wks0*Xyn~TyMJGa=qg^;(FKhzUu?mN3M@upSnJCeZg>i10>(OesKNd z`o;B|>kpt>q%KjHs!e*)r(n-2E2)~cS)w;iI;38cgGHgUva-mZyymQunqYBgS`Zaj zH-bj)Plu+zvx>{gGbT@AbqfA<$N?fX{V|#;<*d$ue;smne4yU^$7sqbStYs+Xkx@j vj3zjP(IhaMzs9i>!#|9sb|$MyWHk4jVrXWEjHYA~J8r;eM#U&23=RJehbsoi literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/libs/libtiff/libtiff.lib b/contrib/menuetlibc/openjpeg/libs/libtiff/libtiff.lib new file mode 100644 index 0000000000000000000000000000000000000000..b050b61f0dec2bf7087beb8343171a9d4f0e0845 GIT binary patch literal 543310 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 */ +#define COMPRESSION_DCS 32947 /* Kodak DCS encoding */ +#define COMPRESSION_JBIG 34661 /* ISO JBIG */ +#define COMPRESSION_SGILOG 34676 /* SGI Log Luminance RLE */ +#define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */ +#define COMPRESSION_JP2000 34712 /* Leadtools JPEG2000 */ +#define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */ +#define PHOTOMETRIC_MINISWHITE 0 /* min value is white */ +#define PHOTOMETRIC_MINISBLACK 1 /* min value is black */ +#define PHOTOMETRIC_RGB 2 /* RGB color model */ +#define PHOTOMETRIC_PALETTE 3 /* color map indexed */ +#define PHOTOMETRIC_MASK 4 /* $holdout mask */ +#define PHOTOMETRIC_SEPARATED 5 /* !color separations */ +#define PHOTOMETRIC_YCBCR 6 /* !CCIR 601 */ +#define PHOTOMETRIC_CIELAB 8 /* !1976 CIE L*a*b* */ +#define PHOTOMETRIC_ICCLAB 9 /* ICC L*a*b* [Adobe TIFF Technote 4] */ +#define PHOTOMETRIC_ITULAB 10 /* ITU L*a*b* */ +#define PHOTOMETRIC_LOGL 32844 /* CIE Log2(L) */ +#define PHOTOMETRIC_LOGLUV 32845 /* CIE Log2(L) (u',v') */ +#define TIFFTAG_THRESHHOLDING 263 /* +thresholding used on data */ +#define THRESHHOLD_BILEVEL 1 /* b&w art scan */ +#define THRESHHOLD_HALFTONE 2 /* or dithered scan */ +#define THRESHHOLD_ERRORDIFFUSE 3 /* usually floyd-steinberg */ +#define TIFFTAG_CELLWIDTH 264 /* +dithering matrix width */ +#define TIFFTAG_CELLLENGTH 265 /* +dithering matrix height */ +#define TIFFTAG_FILLORDER 266 /* data order within a byte */ +#define FILLORDER_MSB2LSB 1 /* most significant -> least */ +#define FILLORDER_LSB2MSB 2 /* least significant -> most */ +#define TIFFTAG_DOCUMENTNAME 269 /* name of doc. image is from */ +#define TIFFTAG_IMAGEDESCRIPTION 270 /* info about image */ +#define TIFFTAG_MAKE 271 /* scanner manufacturer name */ +#define TIFFTAG_MODEL 272 /* scanner model name/number */ +#define TIFFTAG_STRIPOFFSETS 273 /* offsets to data strips */ +#define TIFFTAG_ORIENTATION 274 /* +image orientation */ +#define ORIENTATION_TOPLEFT 1 /* row 0 top, col 0 lhs */ +#define ORIENTATION_TOPRIGHT 2 /* row 0 top, col 0 rhs */ +#define ORIENTATION_BOTRIGHT 3 /* row 0 bottom, col 0 rhs */ +#define ORIENTATION_BOTLEFT 4 /* row 0 bottom, col 0 lhs */ +#define ORIENTATION_LEFTTOP 5 /* row 0 lhs, col 0 top */ +#define ORIENTATION_RIGHTTOP 6 /* row 0 rhs, col 0 top */ +#define ORIENTATION_RIGHTBOT 7 /* row 0 rhs, col 0 bottom */ +#define ORIENTATION_LEFTBOT 8 /* row 0 lhs, col 0 bottom */ +#define TIFFTAG_SAMPLESPERPIXEL 277 /* samples per pixel */ +#define TIFFTAG_ROWSPERSTRIP 278 /* rows per strip of data */ +#define TIFFTAG_STRIPBYTECOUNTS 279 /* bytes counts for strips */ +#define TIFFTAG_MINSAMPLEVALUE 280 /* +minimum sample value */ +#define TIFFTAG_MAXSAMPLEVALUE 281 /* +maximum sample value */ +#define TIFFTAG_XRESOLUTION 282 /* pixels/resolution in x */ +#define TIFFTAG_YRESOLUTION 283 /* pixels/resolution in y */ +#define TIFFTAG_PLANARCONFIG 284 /* storage organization */ +#define PLANARCONFIG_CONTIG 1 /* single image plane */ +#define PLANARCONFIG_SEPARATE 2 /* separate planes of data */ +#define TIFFTAG_PAGENAME 285 /* page name image is from */ +#define TIFFTAG_XPOSITION 286 /* x page offset of image lhs */ +#define TIFFTAG_YPOSITION 287 /* y page offset of image lhs */ +#define TIFFTAG_FREEOFFSETS 288 /* +byte offset to free block */ +#define TIFFTAG_FREEBYTECOUNTS 289 /* +sizes of free blocks */ +#define TIFFTAG_GRAYRESPONSEUNIT 290 /* $gray scale curve accuracy */ +#define GRAYRESPONSEUNIT_10S 1 /* tenths of a unit */ +#define GRAYRESPONSEUNIT_100S 2 /* hundredths of a unit */ +#define GRAYRESPONSEUNIT_1000S 3 /* thousandths of a unit */ +#define GRAYRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */ +#define GRAYRESPONSEUNIT_100000S 5 /* hundred-thousandths */ +#define TIFFTAG_GRAYRESPONSECURVE 291 /* $gray scale response curve */ +#define TIFFTAG_GROUP3OPTIONS 292 /* 32 flag bits */ +#define TIFFTAG_T4OPTIONS 292 /* TIFF 6.0 proper name alias */ +#define GROUP3OPT_2DENCODING 0x1 /* 2-dimensional coding */ +#define GROUP3OPT_UNCOMPRESSED 0x2 /* data not compressed */ +#define GROUP3OPT_FILLBITS 0x4 /* fill to byte boundary */ +#define TIFFTAG_GROUP4OPTIONS 293 /* 32 flag bits */ +#define TIFFTAG_T6OPTIONS 293 /* TIFF 6.0 proper name */ +#define GROUP4OPT_UNCOMPRESSED 0x2 /* data not compressed */ +#define TIFFTAG_RESOLUTIONUNIT 296 /* units of resolutions */ +#define RESUNIT_NONE 1 /* no meaningful units */ +#define RESUNIT_INCH 2 /* english */ +#define RESUNIT_CENTIMETER 3 /* metric */ +#define TIFFTAG_PAGENUMBER 297 /* page numbers of multi-page */ +#define TIFFTAG_COLORRESPONSEUNIT 300 /* $color curve accuracy */ +#define COLORRESPONSEUNIT_10S 1 /* tenths of a unit */ +#define COLORRESPONSEUNIT_100S 2 /* hundredths of a unit */ +#define COLORRESPONSEUNIT_1000S 3 /* thousandths of a unit */ +#define COLORRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */ +#define COLORRESPONSEUNIT_100000S 5 /* hundred-thousandths */ +#define TIFFTAG_TRANSFERFUNCTION 301 /* !colorimetry info */ +#define TIFFTAG_SOFTWARE 305 /* name & release */ +#define TIFFTAG_DATETIME 306 /* creation date and time */ +#define TIFFTAG_ARTIST 315 /* creator of image */ +#define TIFFTAG_HOSTCOMPUTER 316 /* machine where created */ +#define TIFFTAG_PREDICTOR 317 /* prediction scheme w/ LZW */ +#define PREDICTOR_NONE 1 /* no prediction scheme used */ +#define PREDICTOR_HORIZONTAL 2 /* horizontal differencing */ +#define PREDICTOR_FLOATINGPOINT 3 /* floating point predictor */ +#define TIFFTAG_WHITEPOINT 318 /* image white point */ +#define TIFFTAG_PRIMARYCHROMATICITIES 319 /* !primary chromaticities */ +#define TIFFTAG_COLORMAP 320 /* RGB map for pallette image */ +#define TIFFTAG_HALFTONEHINTS 321 /* !highlight+shadow info */ +#define TIFFTAG_TILEWIDTH 322 /* !tile width in pixels */ +#define TIFFTAG_TILELENGTH 323 /* !tile height in pixels */ +#define TIFFTAG_TILEOFFSETS 324 /* !offsets to data tiles */ +#define TIFFTAG_TILEBYTECOUNTS 325 /* !byte counts for tiles */ +#define TIFFTAG_BADFAXLINES 326 /* lines w/ wrong pixel count */ +#define TIFFTAG_CLEANFAXDATA 327 /* regenerated line info */ +#define CLEANFAXDATA_CLEAN 0 /* no errors detected */ +#define CLEANFAXDATA_REGENERATED 1 /* receiver regenerated lines */ +#define CLEANFAXDATA_UNCLEAN 2 /* uncorrected errors exist */ +#define TIFFTAG_CONSECUTIVEBADFAXLINES 328 /* max consecutive bad lines */ +#define TIFFTAG_SUBIFD 330 /* subimage descriptors */ +#define TIFFTAG_INKSET 332 /* !inks in separated image */ +#define INKSET_CMYK 1 /* !cyan-magenta-yellow-black color */ +#define INKSET_MULTIINK 2 /* !multi-ink or hi-fi color */ +#define TIFFTAG_INKNAMES 333 /* !ascii names of inks */ +#define TIFFTAG_NUMBEROFINKS 334 /* !number of inks */ +#define TIFFTAG_DOTRANGE 336 /* !0% and 100% dot codes */ +#define TIFFTAG_TARGETPRINTER 337 /* !separation target */ +#define TIFFTAG_EXTRASAMPLES 338 /* !info about extra samples */ +#define EXTRASAMPLE_UNSPECIFIED 0 /* !unspecified data */ +#define EXTRASAMPLE_ASSOCALPHA 1 /* !associated alpha data */ +#define EXTRASAMPLE_UNASSALPHA 2 /* !unassociated alpha data */ +#define TIFFTAG_SAMPLEFORMAT 339 /* !data sample format */ +#define SAMPLEFORMAT_UINT 1 /* !unsigned integer data */ +#define SAMPLEFORMAT_INT 2 /* !signed integer data */ +#define SAMPLEFORMAT_IEEEFP 3 /* !IEEE floating point data */ +#define SAMPLEFORMAT_VOID 4 /* !untyped data */ +#define SAMPLEFORMAT_COMPLEXINT 5 /* !complex signed int */ +#define SAMPLEFORMAT_COMPLEXIEEEFP 6 /* !complex ieee floating */ +#define TIFFTAG_SMINSAMPLEVALUE 340 /* !variable MinSampleValue */ +#define TIFFTAG_SMAXSAMPLEVALUE 341 /* !variable MaxSampleValue */ +#define TIFFTAG_CLIPPATH 343 /* %ClipPath + [Adobe TIFF technote 2] */ +#define TIFFTAG_XCLIPPATHUNITS 344 /* %XClipPathUnits + [Adobe TIFF technote 2] */ +#define TIFFTAG_YCLIPPATHUNITS 345 /* %YClipPathUnits + [Adobe TIFF technote 2] */ +#define TIFFTAG_INDEXED 346 /* %Indexed + [Adobe TIFF Technote 3] */ +#define TIFFTAG_JPEGTABLES 347 /* %JPEG table stream */ +#define TIFFTAG_OPIPROXY 351 /* %OPI Proxy [Adobe TIFF technote] */ +/* + * Tags 512-521 are obsoleted by Technical Note #2 which specifies a + * revised JPEG-in-TIFF scheme. + */ +#define TIFFTAG_JPEGPROC 512 /* !JPEG processing algorithm */ +#define JPEGPROC_BASELINE 1 /* !baseline sequential */ +#define JPEGPROC_LOSSLESS 14 /* !Huffman coded lossless */ +#define TIFFTAG_JPEGIFOFFSET 513 /* !pointer to SOI marker */ +#define TIFFTAG_JPEGIFBYTECOUNT 514 /* !JFIF stream length */ +#define TIFFTAG_JPEGRESTARTINTERVAL 515 /* !restart interval length */ +#define TIFFTAG_JPEGLOSSLESSPREDICTORS 517 /* !lossless proc predictor */ +#define TIFFTAG_JPEGPOINTTRANSFORM 518 /* !lossless point transform */ +#define TIFFTAG_JPEGQTABLES 519 /* !Q matrice offsets */ +#define TIFFTAG_JPEGDCTABLES 520 /* !DCT table offsets */ +#define TIFFTAG_JPEGACTABLES 521 /* !AC coefficient offsets */ +#define TIFFTAG_YCBCRCOEFFICIENTS 529 /* !RGB -> YCbCr transform */ +#define TIFFTAG_YCBCRSUBSAMPLING 530 /* !YCbCr subsampling factors */ +#define TIFFTAG_YCBCRPOSITIONING 531 /* !subsample positioning */ +#define YCBCRPOSITION_CENTERED 1 /* !as in PostScript Level 2 */ +#define YCBCRPOSITION_COSITED 2 /* !as in CCIR 601-1 */ +#define TIFFTAG_REFERENCEBLACKWHITE 532 /* !colorimetry info */ +#define TIFFTAG_XMLPACKET 700 /* %XML packet + [Adobe XMP Specification, + January 2004 */ +#define TIFFTAG_OPIIMAGEID 32781 /* %OPI ImageID + [Adobe TIFF technote] */ +/* tags 32952-32956 are private tags registered to Island Graphics */ +#define TIFFTAG_REFPTS 32953 /* image reference points */ +#define TIFFTAG_REGIONTACKPOINT 32954 /* region-xform tack point */ +#define TIFFTAG_REGIONWARPCORNERS 32955 /* warp quadrilateral */ +#define TIFFTAG_REGIONAFFINE 32956 /* affine transformation mat */ +/* tags 32995-32999 are private tags registered to SGI */ +#define TIFFTAG_MATTEING 32995 /* $use ExtraSamples */ +#define TIFFTAG_DATATYPE 32996 /* $use SampleFormat */ +#define TIFFTAG_IMAGEDEPTH 32997 /* z depth of image */ +#define TIFFTAG_TILEDEPTH 32998 /* z depth/data tile */ +/* tags 33300-33309 are private tags registered to Pixar */ +/* + * TIFFTAG_PIXAR_IMAGEFULLWIDTH and TIFFTAG_PIXAR_IMAGEFULLLENGTH + * are set when an image has been cropped out of a larger image. + * They reflect the size of the original uncropped image. + * The TIFFTAG_XPOSITION and TIFFTAG_YPOSITION can be used + * to determine the position of the smaller image in the larger one. + */ +#define TIFFTAG_PIXAR_IMAGEFULLWIDTH 33300 /* full image size in x */ +#define TIFFTAG_PIXAR_IMAGEFULLLENGTH 33301 /* full image size in y */ + /* Tags 33302-33306 are used to identify special image modes and data + * used by Pixar's texture formats. + */ +#define TIFFTAG_PIXAR_TEXTUREFORMAT 33302 /* texture map format */ +#define TIFFTAG_PIXAR_WRAPMODES 33303 /* s & t wrap modes */ +#define TIFFTAG_PIXAR_FOVCOT 33304 /* cotan(fov) for env. maps */ +#define TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN 33305 +#define TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA 33306 +/* tag 33405 is a private tag registered to Eastman Kodak */ +#define TIFFTAG_WRITERSERIALNUMBER 33405 /* device serial number */ +/* tag 33432 is listed in the 6.0 spec w/ unknown ownership */ +#define TIFFTAG_COPYRIGHT 33432 /* copyright string */ +/* IPTC TAG from RichTIFF specifications */ +#define TIFFTAG_RICHTIFFIPTC 33723 +/* 34016-34029 are reserved for ANSI IT8 TIFF/IT */ +#define TIFFTAG_STONITS 37439 /* Sample value to Nits */ +/* tag 34929 is a private tag registered to FedEx */ +#define TIFFTAG_FEDEX_EDR 34929 /* unknown use */ +#define TIFFTAG_INTEROPERABILITYIFD 40965 /* Pointer to Interoperability private directory */ +/* Adobe Digital Negative (DNG) format tags */ +#define TIFFTAG_DNGVERSION 50706 /* &DNG version number */ +#define TIFFTAG_DNGBACKWARDVERSION 50707 /* &DNG compatibility version */ +#define TIFFTAG_UNIQUECAMERAMODEL 50708 /* &name for the camera model */ +#define TIFFTAG_LOCALIZEDCAMERAMODEL 50709 /* &localized camera model + name */ +#define TIFFTAG_CFAPLANECOLOR 50710 /* &CFAPattern->LinearRaw space + mapping */ +#define TIFFTAG_CFALAYOUT 50711 /* &spatial layout of the CFA */ +#define TIFFTAG_LINEARIZATIONTABLE 50712 /* &lookup table description */ +#define TIFFTAG_BLACKLEVELREPEATDIM 50713 /* &repeat pattern size for + the BlackLevel tag */ +#define TIFFTAG_BLACKLEVEL 50714 /* &zero light encoding level */ +#define TIFFTAG_BLACKLEVELDELTAH 50715 /* &zero light encoding level + differences (columns) */ +#define TIFFTAG_BLACKLEVELDELTAV 50716 /* &zero light encoding level + differences (rows) */ +#define TIFFTAG_WHITELEVEL 50717 /* &fully saturated encoding + level */ +#define TIFFTAG_DEFAULTSCALE 50718 /* &default scale factors */ +#define TIFFTAG_DEFAULTCROPORIGIN 50719 /* &origin of the final image + area */ +#define TIFFTAG_DEFAULTCROPSIZE 50720 /* &size of the final image + area */ +#define TIFFTAG_COLORMATRIX1 50721 /* &XYZ->reference color space + transformation matrix 1 */ +#define TIFFTAG_COLORMATRIX2 50722 /* &XYZ->reference color space + transformation matrix 2 */ +#define TIFFTAG_CAMERACALIBRATION1 50723 /* &calibration matrix 1 */ +#define TIFFTAG_CAMERACALIBRATION2 50724 /* &calibration matrix 2 */ +#define TIFFTAG_REDUCTIONMATRIX1 50725 /* &dimensionality reduction + matrix 1 */ +#define TIFFTAG_REDUCTIONMATRIX2 50726 /* &dimensionality reduction + matrix 2 */ +#define TIFFTAG_ANALOGBALANCE 50727 /* &gain applied the stored raw + values*/ +#define TIFFTAG_ASSHOTNEUTRAL 50728 /* &selected white balance in + linear reference space */ +#define TIFFTAG_ASSHOTWHITEXY 50729 /* &selected white balance in + x-y chromaticity + coordinates */ +#define TIFFTAG_BASELINEEXPOSURE 50730 /* &how much to move the zero + point */ +#define TIFFTAG_BASELINENOISE 50731 /* &relative noise level */ +#define TIFFTAG_BASELINESHARPNESS 50732 /* &relative amount of + sharpening */ +#define TIFFTAG_BAYERGREENSPLIT 50733 /* &how closely the values of + the green pixels in the + blue/green rows track the + values of the green pixels + in the red/green rows */ +#define TIFFTAG_LINEARRESPONSELIMIT 50734 /* &non-linear encoding range */ +#define TIFFTAG_CAMERASERIALNUMBER 50735 /* &camera's serial number */ +#define TIFFTAG_LENSINFO 50736 /* info about the lens */ +#define TIFFTAG_CHROMABLURRADIUS 50737 /* &chroma blur radius */ +#define TIFFTAG_ANTIALIASSTRENGTH 50738 /* &relative strength of the + camera's anti-alias filter */ +#define TIFFTAG_SHADOWSCALE 50739 /* &used by Adobe Camera Raw */ +#define TIFFTAG_DNGPRIVATEDATA 50740 /* &manufacturer's private data */ +#define TIFFTAG_MAKERNOTESAFETY 50741 /* &whether the EXIF MakerNote + tag is safe to preserve + along with the rest of the + EXIF data */ +#define TIFFTAG_CALIBRATIONILLUMINANT1 50778 /* &illuminant 1 */ +#define TIFFTAG_CALIBRATIONILLUMINANT2 50779 /* &illuminant 2 */ +#define TIFFTAG_BESTQUALITYSCALE 50780 /* &best quality multiplier */ +#define TIFFTAG_RAWDATAUNIQUEID 50781 /* &unique identifier for + the raw image data */ +#define TIFFTAG_ORIGINALRAWFILENAME 50827 /* &file name of the original + raw file */ +#define TIFFTAG_ORIGINALRAWFILEDATA 50828 /* &contents of the original + raw file */ +#define TIFFTAG_ACTIVEAREA 50829 /* &active (non-masked) pixels + of the sensor */ +#define TIFFTAG_MASKEDAREAS 50830 /* &list of coordinates + of fully masked pixels */ +#define TIFFTAG_ASSHOTICCPROFILE 50831 /* &these two tags used to */ +#define TIFFTAG_ASSHOTPREPROFILEMATRIX 50832 /* map cameras's color space + into ICC profile space */ +#define TIFFTAG_CURRENTICCPROFILE 50833 /* & */ +#define TIFFTAG_CURRENTPREPROFILEMATRIX 50834 /* & */ +/* tag 65535 is an undefined tag used by Eastman Kodak */ +#define TIFFTAG_DCSHUESHIFTVALUES 65535 /* hue shift correction data */ + +/* + * The following are ``pseudo tags'' that can be used to control + * codec-specific functionality. These tags are not written to file. + * Note that these values start at 0xffff+1 so that they'll never + * collide with Aldus-assigned tags. + * + * If you want your private pseudo tags ``registered'' (i.e. added to + * this file), please post a bug report via the tracking system at + * http://www.remotesensing.org/libtiff/bugs.html with the appropriate + * C definitions to add. + */ +#define TIFFTAG_FAXMODE 65536 /* Group 3/4 format control */ +#define FAXMODE_CLASSIC 0x0000 /* default, include RTC */ +#define FAXMODE_NORTC 0x0001 /* no RTC at end of data */ +#define FAXMODE_NOEOL 0x0002 /* no EOL code at end of row */ +#define FAXMODE_BYTEALIGN 0x0004 /* byte align row */ +#define FAXMODE_WORDALIGN 0x0008 /* word align row */ +#define FAXMODE_CLASSF FAXMODE_NORTC /* TIFF Class F */ +#define TIFFTAG_JPEGQUALITY 65537 /* Compression quality level */ +/* Note: quality level is on the IJG 0-100 scale. Default value is 75 */ +#define TIFFTAG_JPEGCOLORMODE 65538 /* Auto RGB<=>YCbCr convert? */ +#define JPEGCOLORMODE_RAW 0x0000 /* no conversion (default) */ +#define JPEGCOLORMODE_RGB 0x0001 /* do auto conversion */ +#define TIFFTAG_JPEGTABLESMODE 65539 /* What to put in JPEGTables */ +#define JPEGTABLESMODE_QUANT 0x0001 /* include quantization tbls */ +#define JPEGTABLESMODE_HUFF 0x0002 /* include Huffman tbls */ +/* Note: default is JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF */ +#define TIFFTAG_FAXFILLFUNC 65540 /* G3/G4 fill function */ +#define TIFFTAG_PIXARLOGDATAFMT 65549 /* PixarLogCodec I/O data sz */ +#define PIXARLOGDATAFMT_8BIT 0 /* regular u_char samples */ +#define PIXARLOGDATAFMT_8BITABGR 1 /* ABGR-order u_chars */ +#define PIXARLOGDATAFMT_11BITLOG 2 /* 11-bit log-encoded (raw) */ +#define PIXARLOGDATAFMT_12BITPICIO 3 /* as per PICIO (1.0==2048) */ +#define PIXARLOGDATAFMT_16BIT 4 /* signed short samples */ +#define PIXARLOGDATAFMT_FLOAT 5 /* IEEE float samples */ +/* 65550-65556 are allocated to Oceana Matrix */ +#define TIFFTAG_DCSIMAGERTYPE 65550 /* imager model & filter */ +#define DCSIMAGERMODEL_M3 0 /* M3 chip (1280 x 1024) */ +#define DCSIMAGERMODEL_M5 1 /* M5 chip (1536 x 1024) */ +#define DCSIMAGERMODEL_M6 2 /* M6 chip (3072 x 2048) */ +#define DCSIMAGERFILTER_IR 0 /* infrared filter */ +#define DCSIMAGERFILTER_MONO 1 /* monochrome filter */ +#define DCSIMAGERFILTER_CFA 2 /* color filter array */ +#define DCSIMAGERFILTER_OTHER 3 /* other filter */ +#define TIFFTAG_DCSINTERPMODE 65551 /* interpolation mode */ +#define DCSINTERPMODE_NORMAL 0x0 /* whole image, default */ +#define DCSINTERPMODE_PREVIEW 0x1 /* preview of image (384x256) */ +#define TIFFTAG_DCSBALANCEARRAY 65552 /* color balance values */ +#define TIFFTAG_DCSCORRECTMATRIX 65553 /* color correction values */ +#define TIFFTAG_DCSGAMMA 65554 /* gamma value */ +#define TIFFTAG_DCSTOESHOULDERPTS 65555 /* toe & shoulder points */ +#define TIFFTAG_DCSCALIBRATIONFD 65556 /* calibration file desc */ +/* Note: quality level is on the ZLIB 1-9 scale. Default value is -1 */ +#define TIFFTAG_ZIPQUALITY 65557 /* compression quality level */ +#define TIFFTAG_PIXARLOGQUALITY 65558 /* PixarLog uses same scale */ +/* 65559 is allocated to Oceana Matrix */ +#define TIFFTAG_DCSCLIPRECTANGLE 65559 /* area of image to acquire */ +#define TIFFTAG_SGILOGDATAFMT 65560 /* SGILog user data format */ +#define SGILOGDATAFMT_FLOAT 0 /* IEEE float samples */ +#define SGILOGDATAFMT_16BIT 1 /* 16-bit samples */ +#define SGILOGDATAFMT_RAW 2 /* uninterpreted data */ +#define SGILOGDATAFMT_8BIT 3 /* 8-bit RGB monitor values */ +#define TIFFTAG_SGILOGENCODE 65561 /* SGILog data encoding control*/ +#define SGILOGENCODE_NODITHER 0 /* do not dither encoded values*/ +#define SGILOGENCODE_RANDITHER 1 /* randomly dither encd values */ + +/* + * EXIF tags + */ +#define EXIFTAG_EXPOSURETIME 33434 /* Exposure time */ +#define EXIFTAG_FNUMBER 33437 /* F number */ +#define EXIFTAG_EXPOSUREPROGRAM 34850 /* Exposure program */ +#define EXIFTAG_SPECTRALSENSITIVITY 34852 /* Spectral sensitivity */ +#define EXIFTAG_ISOSPEEDRATINGS 34855 /* ISO speed rating */ +#define EXIFTAG_OECF 34856 /* Optoelectric conversion + factor */ +#define EXIFTAG_EXIFVERSION 36864 /* Exif version */ +#define EXIFTAG_DATETIMEORIGINAL 36867 /* Date and time of original + data generation */ +#define EXIFTAG_DATETIMEDIGITIZED 36868 /* Date and time of digital + data generation */ +#define EXIFTAG_COMPONENTSCONFIGURATION 37121 /* Meaning of each component */ +#define EXIFTAG_COMPRESSEDBITSPERPIXEL 37122 /* Image compression mode */ +#define EXIFTAG_SHUTTERSPEEDVALUE 37377 /* Shutter speed */ +#define EXIFTAG_APERTUREVALUE 37378 /* Aperture */ +#define EXIFTAG_BRIGHTNESSVALUE 37379 /* Brightness */ +#define EXIFTAG_EXPOSUREBIASVALUE 37380 /* Exposure bias */ +#define EXIFTAG_MAXAPERTUREVALUE 37381 /* Maximum lens aperture */ +#define EXIFTAG_SUBJECTDISTANCE 37382 /* Subject distance */ +#define EXIFTAG_METERINGMODE 37383 /* Metering mode */ +#define EXIFTAG_LIGHTSOURCE 37384 /* Light source */ +#define EXIFTAG_FLASH 37385 /* Flash */ +#define EXIFTAG_FOCALLENGTH 37386 /* Lens focal length */ +#define EXIFTAG_SUBJECTAREA 37396 /* Subject area */ +#define EXIFTAG_MAKERNOTE 37500 /* Manufacturer notes */ +#define EXIFTAG_USERCOMMENT 37510 /* User comments */ +#define EXIFTAG_SUBSECTIME 37520 /* DateTime subseconds */ +#define EXIFTAG_SUBSECTIMEORIGINAL 37521 /* DateTimeOriginal subseconds */ +#define EXIFTAG_SUBSECTIMEDIGITIZED 37522 /* DateTimeDigitized subseconds */ +#define EXIFTAG_FLASHPIXVERSION 40960 /* Supported Flashpix version */ +#define EXIFTAG_COLORSPACE 40961 /* Color space information */ +#define EXIFTAG_PIXELXDIMENSION 40962 /* Valid image width */ +#define EXIFTAG_PIXELYDIMENSION 40963 /* Valid image height */ +#define EXIFTAG_RELATEDSOUNDFILE 40964 /* Related audio file */ +#define EXIFTAG_FLASHENERGY 41483 /* Flash energy */ +#define EXIFTAG_SPATIALFREQUENCYRESPONSE 41484 /* Spatial frequency response */ +#define EXIFTAG_FOCALPLANEXRESOLUTION 41486 /* Focal plane X resolution */ +#define EXIFTAG_FOCALPLANEYRESOLUTION 41487 /* Focal plane Y resolution */ +#define EXIFTAG_FOCALPLANERESOLUTIONUNIT 41488 /* Focal plane resolution unit */ +#define EXIFTAG_SUBJECTLOCATION 41492 /* Subject location */ +#define EXIFTAG_EXPOSUREINDEX 41493 /* Exposure index */ +#define EXIFTAG_SENSINGMETHOD 41495 /* Sensing method */ +#define EXIFTAG_FILESOURCE 41728 /* File source */ +#define EXIFTAG_SCENETYPE 41729 /* Scene type */ +#define EXIFTAG_CFAPATTERN 41730 /* CFA pattern */ +#define EXIFTAG_CUSTOMRENDERED 41985 /* Custom image processing */ +#define EXIFTAG_EXPOSUREMODE 41986 /* Exposure mode */ +#define EXIFTAG_WHITEBALANCE 41987 /* White balance */ +#define EXIFTAG_DIGITALZOOMRATIO 41988 /* Digital zoom ratio */ +#define EXIFTAG_FOCALLENGTHIN35MMFILM 41989 /* Focal length in 35 mm film */ +#define EXIFTAG_SCENECAPTURETYPE 41990 /* Scene capture type */ +#define EXIFTAG_GAINCONTROL 41991 /* Gain control */ +#define EXIFTAG_CONTRAST 41992 /* Contrast */ +#define EXIFTAG_SATURATION 41993 /* Saturation */ +#define EXIFTAG_SHARPNESS 41994 /* Sharpness */ +#define EXIFTAG_DEVICESETTINGDESCRIPTION 41995 /* Device settings description */ +#define EXIFTAG_SUBJECTDISTANCERANGE 41996 /* Subject distance range */ +#define EXIFTAG_GAINCONTROL 41991 /* Gain control */ +#define EXIFTAG_GAINCONTROL 41991 /* Gain control */ +#define EXIFTAG_IMAGEUNIQUEID 42016 /* Unique image ID */ + +#endif /* _TIFF_ */ + +/* vim: set ts=8 sts=8 sw=8 noet: */ +/* + * Local Variables: + * mode: c + * c-basic-offset: 8 + * fill-column: 78 + * End: + */ diff --git a/contrib/menuetlibc/openjpeg/libs/libtiff/tiffconf.h b/contrib/menuetlibc/openjpeg/libs/libtiff/tiffconf.h new file mode 100644 index 0000000000..7e3a710544 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libs/libtiff/tiffconf.h @@ -0,0 +1,128 @@ +/* libtiff/tiffconf.h. Generated from tiffconf.h.in by configure. */ +/* + Configuration defines for installed libtiff. + This file maintained for backward compatibility. Do not use definitions + from this file in your programs. +*/ + +#ifndef _TIFFCONF_ +#define _TIFFCONF_ + +/* Signed 16-bit type */ +#define TIFF_INT16_T signed short + +/* Signed 32-bit type */ +#define TIFF_INT32_T signed int + +/* Signed 64-bit type */ +#define TIFF_INT64_T signed long long + +/* Signed 8-bit type */ +#define TIFF_INT8_T signed char + +/* Unsigned 16-bit type */ +#define TIFF_UINT16_T unsigned short + +/* Unsigned 32-bit type */ +#define TIFF_UINT32_T unsigned int + +/* Unsigned 64-bit type */ +#define TIFF_UINT64_T unsigned long long + +/* Unsigned 8-bit type */ +#define TIFF_UINT8_T unsigned char + +/* Signed size type */ +#define TIFF_SSIZE_T signed long + +/* Pointer difference type */ +#define TIFF_PTRDIFF_T ptrdiff_t + +/* Define to 1 if the system has the type `int16'. */ +/* #undef HAVE_INT16 */ + +/* Define to 1 if the system has the type `int32'. */ +/* #undef HAVE_INT32 */ + +/* Define to 1 if the system has the type `int8'. */ +/* #undef HAVE_INT8 */ + +/* Compatibility stuff. */ + +/* Define as 0 or 1 according to the floating point format suported by the + machine */ +#define HAVE_IEEEFP 1 + +/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */ +#define HOST_FILLORDER FILLORDER_LSB2MSB + +/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian + (Intel) */ +#define HOST_BIGENDIAN 0 + +/* Support CCITT Group 3 & 4 algorithms */ +#define CCITT_SUPPORT 1 + +/* Support JPEG compression (requires IJG JPEG library) */ +#define JPEG_SUPPORT 1 + +/* Support JBIG compression (requires JBIG-KIT library) */ +#define JBIG_SUPPORT 1 + +/* Support LogLuv high dynamic range encoding */ +#define LOGLUV_SUPPORT 1 + +/* Support LZW algorithm */ +#define LZW_SUPPORT 1 + +/* Support NeXT 2-bit RLE algorithm */ +#define NEXT_SUPPORT 1 + +/* Support Old JPEG compresson (read contrib/ojpeg/README first! Compilation + fails with unpatched IJG JPEG library) */ +#define OJPEG_SUPPORT 1 + +/* Support Macintosh PackBits algorithm */ +#define PACKBITS_SUPPORT 1 + +/* Support Pixar log-format algorithm (requires Zlib) */ +#define PIXARLOG_SUPPORT 1 + +/* Support ThunderScan 4-bit RLE algorithm */ +#define THUNDER_SUPPORT 1 + +/* Support Deflate compression */ +#define ZIP_SUPPORT 1 + +/* Support strip chopping (whether or not to convert single-strip uncompressed + images to mutiple strips of ~8Kb to reduce memory usage) */ +#define STRIPCHOP_DEFAULT TIFF_STRIPCHOP + +/* Enable SubIFD tag (330) support */ +#define SUBIFD_SUPPORT 1 + +/* Treat extra sample as alpha (default enabled). The RGBA interface will + treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many + packages produce RGBA files but don't mark the alpha properly. */ +#define DEFAULT_EXTRASAMPLE_AS_ALPHA 1 + +/* Pick up YCbCr subsampling info from the JPEG data stream to support files + lacking the tag (default enabled). */ +#define CHECK_JPEG_YCBCR_SUBSAMPLING 1 + +/* Support MS MDI magic number files as TIFF */ +#define MDI_SUPPORT 1 + +/* + * Feature support definitions. + * XXX: These macros are obsoleted. Don't use them in your apps! + * Macros stays here for backward compatibility and should be always defined. + */ +#define COLORIMETRY_SUPPORT +#define YCBCR_SUPPORT +#define CMYK_SUPPORT +#define ICC_SUPPORT +#define PHOTOSHOP_SUPPORT +#define IPTC_SUPPORT + +#endif /* _TIFFCONF_ */ diff --git a/contrib/menuetlibc/openjpeg/libs/libtiff/tiffio.h b/contrib/menuetlibc/openjpeg/libs/libtiff/tiffio.h new file mode 100644 index 0000000000..af6082f62d --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libs/libtiff/tiffio.h @@ -0,0 +1,550 @@ +/* $Id: tiffio.h,v 1.86 2010-03-10 18:56:49 bfriesen Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the names of + * Sam Leffler and Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Sam Leffler and Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#ifndef _TIFFIO_ +#define _TIFFIO_ + +/* + * TIFF I/O Library Definitions. + */ +#include "tiff.h" +#include "tiffvers.h" + +/* + * TIFF is defined as an incomplete type to hide the + * library's internal data structures from clients. + */ +typedef struct tiff TIFF; + +/* + * The following typedefs define the intrinsic size of + * data types used in the *exported* interfaces. These + * definitions depend on the proper definition of types + * in tiff.h. Note also that the varargs interface used + * to pass tag types and values uses the types defined in + * tiff.h directly. + * + * NB: ttag_t is unsigned int and not unsigned short because + * ANSI C requires that the type before the ellipsis be a + * promoted type (i.e. one of int, unsigned int, pointer, + * or double) and because we defined pseudo-tags that are + * outside the range of legal Aldus-assigned tags. + * NB: tsize_t is int32 and not uint32 because some functions + * return -1. + * NB: toff_t is not off_t for many reasons; TIFFs max out at + * 32-bit file offsets, and BigTIFF maxes out at 64-bit + * offsets being the most important, and to ensure use of + * a consistently unsigned type across architectures. + * Prior to libtiff 4.0, this was an unsigned 32 bit type. + */ +/* + * this is the machine addressing size type, only it's signed, so make it + * int32 on 32bit machines, int64 on 64bit machines + */ +typedef TIFF_SSIZE_T tmsize_t; +typedef uint64 toff_t; /* file offset */ +/* the following are deprecated and should be replaced by their defining + counterparts */ +typedef uint32 ttag_t; /* directory tag */ +typedef uint16 tdir_t; /* directory index */ +typedef uint16 tsample_t; /* sample number */ +typedef uint32 tstrile_t; /* strip or tile number */ +typedef tstrile_t tstrip_t; /* strip number */ +typedef tstrile_t ttile_t; /* tile number */ +typedef tmsize_t tsize_t; /* i/o size in bytes */ +typedef void* tdata_t; /* image data ref */ + +#if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32)) +#define __WIN32__ +#endif + +/* + * On windows you should define USE_WIN32_FILEIO if you are using tif_win32.c + * or AVOID_WIN32_FILEIO if you are using something else (like tif_unix.c). + * + * By default tif_unix.c is assumed. + */ + +#if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows) +# if !defined(__CYGWIN) && !defined(AVOID_WIN32_FILEIO) && !defined(USE_WIN32_FILEIO) +# define AVOID_WIN32_FILEIO +# endif +#endif + +#if defined(USE_WIN32_FILEIO) +# define VC_EXTRALEAN +# include +# ifdef __WIN32__ +DECLARE_HANDLE(thandle_t); /* Win32 file handle */ +# else +typedef HFILE thandle_t; /* client data handle */ +# endif /* __WIN32__ */ +#else +typedef void* thandle_t; /* client data handle */ +#endif /* USE_WIN32_FILEIO */ + +/* + * Flags to pass to TIFFPrintDirectory to control + * printing of data structures that are potentially + * very large. Bit-or these flags to enable printing + * multiple items. + */ +#define TIFFPRINT_NONE 0x0 /* no extra info */ +#define TIFFPRINT_STRIPS 0x1 /* strips/tiles info */ +#define TIFFPRINT_CURVES 0x2 /* color/gray response curves */ +#define TIFFPRINT_COLORMAP 0x4 /* colormap */ +#define TIFFPRINT_JPEGQTABLES 0x100 /* JPEG Q matrices */ +#define TIFFPRINT_JPEGACTABLES 0x200 /* JPEG AC tables */ +#define TIFFPRINT_JPEGDCTABLES 0x200 /* JPEG DC tables */ + +/* + * Colour conversion stuff + */ + +/* reference white */ +#define D65_X0 (95.0470F) +#define D65_Y0 (100.0F) +#define D65_Z0 (108.8827F) + +#define D50_X0 (96.4250F) +#define D50_Y0 (100.0F) +#define D50_Z0 (82.4680F) + +/* Structure for holding information about a display device. */ + +typedef unsigned char TIFFRGBValue; /* 8-bit samples */ + +typedef struct { + float d_mat[3][3]; /* XYZ -> luminance matrix */ + float d_YCR; /* Light o/p for reference white */ + float d_YCG; + float d_YCB; + uint32 d_Vrwr; /* Pixel values for ref. white */ + uint32 d_Vrwg; + uint32 d_Vrwb; + float d_Y0R; /* Residual light for black pixel */ + float d_Y0G; + float d_Y0B; + float d_gammaR; /* Gamma values for the three guns */ + float d_gammaG; + float d_gammaB; +} TIFFDisplay; + +typedef struct { /* YCbCr->RGB support */ + TIFFRGBValue* clamptab; /* range clamping table */ + int* Cr_r_tab; + int* Cb_b_tab; + int32* Cr_g_tab; + int32* Cb_g_tab; + int32* Y_tab; +} TIFFYCbCrToRGB; + +typedef struct { /* CIE Lab 1976->RGB support */ + int range; /* Size of conversion table */ +#define CIELABTORGB_TABLE_RANGE 1500 + float rstep, gstep, bstep; + float X0, Y0, Z0; /* Reference white point */ + TIFFDisplay display; + float Yr2r[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yr to r */ + float Yg2g[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yg to g */ + float Yb2b[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yb to b */ +} TIFFCIELabToRGB; + +/* + * RGBA-style image support. + */ +typedef struct _TIFFRGBAImage TIFFRGBAImage; +/* + * The image reading and conversion routines invoke + * ``put routines'' to copy/image/whatever tiles of + * raw image data. A default set of routines are + * provided to convert/copy raw image data to 8-bit + * packed ABGR format rasters. Applications can supply + * alternate routines that unpack the data into a + * different format or, for example, unpack the data + * and draw the unpacked raster on the display. + */ +typedef void (*tileContigRoutine) + (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32, + unsigned char*); +typedef void (*tileSeparateRoutine) + (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32, + unsigned char*, unsigned char*, unsigned char*, unsigned char*); +/* + * RGBA-reader state. + */ +struct _TIFFRGBAImage { + TIFF* tif; /* image handle */ + int stoponerr; /* stop on read error */ + int isContig; /* data is packed/separate */ + int alpha; /* type of alpha data present */ + uint32 width; /* image width */ + uint32 height; /* image height */ + uint16 bitspersample; /* image bits/sample */ + uint16 samplesperpixel; /* image samples/pixel */ + uint16 orientation; /* image orientation */ + uint16 req_orientation; /* requested orientation */ + uint16 photometric; /* image photometric interp */ + uint16* redcmap; /* colormap pallete */ + uint16* greencmap; + uint16* bluecmap; + /* get image data routine */ + int (*get)(TIFFRGBAImage*, uint32*, uint32, uint32); + /* put decoded strip/tile */ + union { + void (*any)(TIFFRGBAImage*); + tileContigRoutine contig; + tileSeparateRoutine separate; + } put; + TIFFRGBValue* Map; /* sample mapping array */ + uint32** BWmap; /* black&white map */ + uint32** PALmap; /* palette image map */ + TIFFYCbCrToRGB* ycbcr; /* YCbCr conversion state */ + TIFFCIELabToRGB* cielab; /* CIE L*a*b conversion state */ + + uint8* UaToAa; /* Unassociated alpha to associated alpha convertion LUT */ + uint8* Bitdepth16To8; /* LUT for conversion from 16bit to 8bit values */ + + int row_offset; + int col_offset; +}; + +/* + * Macros for extracting components from the + * packed ABGR form returned by TIFFReadRGBAImage. + */ +#define TIFFGetR(abgr) ((abgr) & 0xff) +#define TIFFGetG(abgr) (((abgr) >> 8) & 0xff) +#define TIFFGetB(abgr) (((abgr) >> 16) & 0xff) +#define TIFFGetA(abgr) (((abgr) >> 24) & 0xff) + +/* + * A CODEC is a software package that implements decoding, + * encoding, or decoding+encoding of a compression algorithm. + * The library provides a collection of builtin codecs. + * More codecs may be registered through calls to the library + * and/or the builtin implementations may be overridden. + */ +typedef int (*TIFFInitMethod)(TIFF*, int); +typedef struct { + char* name; + uint16 scheme; + TIFFInitMethod init; +} TIFFCodec; + +#include +#include + +/* share internal LogLuv conversion routines? */ +#ifndef LOGLUV_PUBLIC +#define LOGLUV_PUBLIC 1 +#endif + +#if !defined(__GNUC__) && !defined(__attribute__) +# define __attribute__(x) /*nothing*/ +#endif + +#if defined(c_plusplus) || defined(__cplusplus) +extern "C" { +#endif +typedef void (*TIFFErrorHandler)(const char*, const char*, va_list); +typedef void (*TIFFErrorHandlerExt)(thandle_t, const char*, const char*, va_list); +typedef tmsize_t (*TIFFReadWriteProc)(thandle_t, void*, tmsize_t); +typedef toff_t (*TIFFSeekProc)(thandle_t, toff_t, int); +typedef int (*TIFFCloseProc)(thandle_t); +typedef toff_t (*TIFFSizeProc)(thandle_t); +typedef int (*TIFFMapFileProc)(thandle_t, void** base, toff_t* size); +typedef void (*TIFFUnmapFileProc)(thandle_t, void* base, toff_t size); +typedef void (*TIFFExtendProc)(TIFF*); + +extern const char* TIFFGetVersion(void); + +extern const TIFFCodec* TIFFFindCODEC(uint16); +extern TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod); +extern void TIFFUnRegisterCODEC(TIFFCodec*); +extern int TIFFIsCODECConfigured(uint16); +extern TIFFCodec* TIFFGetConfiguredCODECs(void); + +/* + * Auxiliary functions. + */ + +extern void* _TIFFmalloc(tmsize_t s); +extern void* _TIFFrealloc(void* p, tmsize_t s); +extern void _TIFFmemset(void* p, int v, tmsize_t c); +extern void _TIFFmemcpy(void* d, const void* s, tmsize_t c); +extern int _TIFFmemcmp(const void* p1, const void* p2, tmsize_t c); +extern void _TIFFfree(void* p); + +/* +** Stuff, related to tag handling and creating custom tags. +*/ +extern int TIFFGetTagListCount( TIFF * ); +extern uint32 TIFFGetTagListEntry( TIFF *, int tag_index ); + +#define TIFF_ANY TIFF_NOTYPE /* for field descriptor searching */ +#define TIFF_VARIABLE -1 /* marker for variable length tags */ +#define TIFF_SPP -2 /* marker for SamplesPerPixel tags */ +#define TIFF_VARIABLE2 -3 /* marker for uint32 var-length tags */ + +#define FIELD_CUSTOM 65 + +typedef struct _TIFFField TIFFField; +typedef struct _TIFFFieldArray TIFFFieldArray; + +extern const TIFFField* TIFFFindField(TIFF *, uint32, TIFFDataType); +extern const TIFFField* TIFFFieldWithTag(TIFF*, uint32); +extern const TIFFField* TIFFFieldWithName(TIFF*, const char *); + +typedef int (*TIFFVSetMethod)(TIFF*, uint32, va_list); +typedef int (*TIFFVGetMethod)(TIFF*, uint32, va_list); +typedef void (*TIFFPrintMethod)(TIFF*, FILE*, long); + +typedef struct { + TIFFVSetMethod vsetfield; /* tag set routine */ + TIFFVGetMethod vgetfield; /* tag get routine */ + TIFFPrintMethod printdir; /* directory print routine */ +} TIFFTagMethods; + +extern TIFFTagMethods *TIFFAccessTagMethods(TIFF *); +extern void *TIFFGetClientInfo(TIFF *, const char *); +extern void TIFFSetClientInfo(TIFF *, void *, const char *); + +extern void TIFFCleanup(TIFF* tif); +extern void TIFFClose(TIFF* tif); +extern int TIFFFlush(TIFF* tif); +extern int TIFFFlushData(TIFF* tif); +extern int TIFFGetField(TIFF* tif, uint32 tag, ...); +extern int TIFFVGetField(TIFF* tif, uint32 tag, va_list ap); +extern int TIFFGetFieldDefaulted(TIFF* tif, uint32 tag, ...); +extern int TIFFVGetFieldDefaulted(TIFF* tif, uint32 tag, va_list ap); +extern int TIFFReadDirectory(TIFF* tif); +extern int TIFFReadCustomDirectory(TIFF* tif, toff_t diroff, const TIFFFieldArray* infoarray); +extern int TIFFReadEXIFDirectory(TIFF* tif, toff_t diroff); +extern uint64 TIFFScanlineSize64(TIFF* tif); +extern tmsize_t TIFFScanlineSize(TIFF* tif); +extern uint64 TIFFRasterScanlineSize64(TIFF* tif); +extern tmsize_t TIFFRasterScanlineSize(TIFF* tif); +extern uint64 TIFFStripSize64(TIFF* tif); +extern tmsize_t TIFFStripSize(TIFF* tif); +extern uint64 TIFFRawStripSize64(TIFF* tif, uint32 strip); +extern tmsize_t TIFFRawStripSize(TIFF* tif, uint32 strip); +extern uint64 TIFFVStripSize64(TIFF* tif, uint32 nrows); +extern tmsize_t TIFFVStripSize(TIFF* tif, uint32 nrows); +extern uint64 TIFFTileRowSize64(TIFF* tif); +extern tmsize_t TIFFTileRowSize(TIFF* tif); +extern uint64 TIFFTileSize64(TIFF* tif); +extern tmsize_t TIFFTileSize(TIFF* tif); +extern uint64 TIFFVTileSize64(TIFF* tif, uint32 nrows); +extern tmsize_t TIFFVTileSize(TIFF* tif, uint32 nrows); +extern uint32 TIFFDefaultStripSize(TIFF* tif, uint32 request); +extern void TIFFDefaultTileSize(TIFF*, uint32*, uint32*); +extern int TIFFFileno(TIFF*); +extern int TIFFSetFileno(TIFF*, int); +extern thandle_t TIFFClientdata(TIFF*); +extern thandle_t TIFFSetClientdata(TIFF*, thandle_t); +extern int TIFFGetMode(TIFF*); +extern int TIFFSetMode(TIFF*, int); +extern int TIFFIsTiled(TIFF*); +extern int TIFFIsByteSwapped(TIFF*); +extern int TIFFIsUpSampled(TIFF*); +extern int TIFFIsMSB2LSB(TIFF*); +extern int TIFFIsBigEndian(TIFF*); +extern TIFFReadWriteProc TIFFGetReadProc(TIFF*); +extern TIFFReadWriteProc TIFFGetWriteProc(TIFF*); +extern TIFFSeekProc TIFFGetSeekProc(TIFF*); +extern TIFFCloseProc TIFFGetCloseProc(TIFF*); +extern TIFFSizeProc TIFFGetSizeProc(TIFF*); +extern TIFFMapFileProc TIFFGetMapFileProc(TIFF*); +extern TIFFUnmapFileProc TIFFGetUnmapFileProc(TIFF*); +extern uint32 TIFFCurrentRow(TIFF*); +extern uint16 TIFFCurrentDirectory(TIFF*); +extern uint16 TIFFNumberOfDirectories(TIFF*); +extern uint64 TIFFCurrentDirOffset(TIFF*); +extern uint32 TIFFCurrentStrip(TIFF*); +extern uint32 TIFFCurrentTile(TIFF* tif); +extern int TIFFReadBufferSetup(TIFF* tif, void* bp, tmsize_t size); +extern int TIFFWriteBufferSetup(TIFF* tif, void* bp, tmsize_t size); +extern int TIFFSetupStrips(TIFF *); +extern int TIFFWriteCheck(TIFF*, int, const char *); +extern void TIFFFreeDirectory(TIFF*); +extern int TIFFCreateDirectory(TIFF*); +extern int TIFFLastDirectory(TIFF*); +extern int TIFFSetDirectory(TIFF*, uint16); +extern int TIFFSetSubDirectory(TIFF*, uint64); +extern int TIFFUnlinkDirectory(TIFF*, uint16); +extern int TIFFSetField(TIFF*, uint32, ...); +extern int TIFFVSetField(TIFF*, uint32, va_list); +extern int TIFFUnsetField(TIFF*, uint32); +extern int TIFFWriteDirectory(TIFF *); +extern int TIFFCheckpointDirectory(TIFF *); +extern int TIFFRewriteDirectory(TIFF *); + +#if defined(c_plusplus) || defined(__cplusplus) +extern void TIFFPrintDirectory(TIFF*, FILE*, long = 0); +extern int TIFFReadScanline(TIFF* tif, void* buf, uint32 row, uint16 sample = 0); +extern int TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample = 0); +extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0); +extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, + int = ORIENTATION_BOTLEFT, int = 0); +#else +extern void TIFFPrintDirectory(TIFF*, FILE*, long); +extern int TIFFReadScanline(TIFF* tif, void* buf, uint32 row, uint16 sample); +extern int TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample); +extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int); +extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, int, int); +#endif + +extern int TIFFReadRGBAStrip(TIFF*, uint32, uint32 * ); +extern int TIFFReadRGBATile(TIFF*, uint32, uint32, uint32 * ); +extern int TIFFRGBAImageOK(TIFF*, char [1024]); +extern int TIFFRGBAImageBegin(TIFFRGBAImage*, TIFF*, int, char [1024]); +extern int TIFFRGBAImageGet(TIFFRGBAImage*, uint32*, uint32, uint32); +extern void TIFFRGBAImageEnd(TIFFRGBAImage*); +extern TIFF* TIFFOpen(const char*, const char*); +# ifdef __WIN32__ +extern TIFF* TIFFOpenW(const wchar_t*, const char*); +# endif /* __WIN32__ */ +extern TIFF* TIFFFdOpen(int, const char*, const char*); +extern TIFF* TIFFClientOpen(const char*, const char*, + thandle_t, + TIFFReadWriteProc, TIFFReadWriteProc, + TIFFSeekProc, TIFFCloseProc, + TIFFSizeProc, + TIFFMapFileProc, TIFFUnmapFileProc); +extern const char* TIFFFileName(TIFF*); +extern const char* TIFFSetFileName(TIFF*, const char *); +extern void TIFFError(const char*, const char*, ...) __attribute__((format (printf,2,3))); +extern void TIFFErrorExt(thandle_t, const char*, const char*, ...) __attribute__((format (printf,3,4))); +extern void TIFFWarning(const char*, const char*, ...) __attribute__((format (printf,2,3))); +extern void TIFFWarningExt(thandle_t, const char*, const char*, ...) __attribute__((format (printf,3,4))); +extern TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler); +extern TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt); +extern TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler); +extern TIFFErrorHandlerExt TIFFSetWarningHandlerExt(TIFFErrorHandlerExt); +extern TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc); +extern uint32 TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, uint16 s); +extern int TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, uint16 s); +extern uint32 TIFFNumberOfTiles(TIFF*); +extern tmsize_t TIFFReadTile(TIFF* tif, void* buf, uint32 x, uint32 y, uint32 z, uint16 s); +extern tmsize_t TIFFWriteTile(TIFF* tif, void* buf, uint32 x, uint32 y, uint32 z, uint16 s); +extern uint32 TIFFComputeStrip(TIFF*, uint32, uint16); +extern uint32 TIFFNumberOfStrips(TIFF*); +extern tmsize_t TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size); +extern tmsize_t TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size); +extern tmsize_t TIFFReadEncodedTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size); +extern tmsize_t TIFFReadRawTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size); +extern tmsize_t TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc); +extern tmsize_t TIFFWriteRawStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc); +extern tmsize_t TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc); +extern tmsize_t TIFFWriteRawTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc); +extern int TIFFDataWidth(TIFFDataType); /* table of tag datatype widths */ +extern void TIFFSetWriteOffset(TIFF* tif, toff_t off); +extern void TIFFSwabShort(uint16*); +extern void TIFFSwabLong(uint32*); +extern void TIFFSwabLong8(uint64*); +extern void TIFFSwabFloat(float*); +extern void TIFFSwabDouble(double*); +extern void TIFFSwabArrayOfShort(uint16* wp, tmsize_t n); +extern void TIFFSwabArrayOfTriples(uint8* tp, tmsize_t n); +extern void TIFFSwabArrayOfLong(uint32* lp, tmsize_t n); +extern void TIFFSwabArrayOfLong8(uint64* lp, tmsize_t n); +extern void TIFFSwabArrayOfFloat(float* fp, tmsize_t n); +extern void TIFFSwabArrayOfDouble(double* dp, tmsize_t n); +extern void TIFFReverseBits(uint8* cp, tmsize_t n); +extern const unsigned char* TIFFGetBitRevTable(int); + +#ifdef LOGLUV_PUBLIC +#define U_NEU 0.210526316 +#define V_NEU 0.473684211 +#define UVSCALE 410. +extern double LogL16toY(int); +extern double LogL10toY(int); +extern void XYZtoRGB24(float*, uint8*); +extern int uv_decode(double*, double*, int); +extern void LogLuv24toXYZ(uint32, float*); +extern void LogLuv32toXYZ(uint32, float*); +#if defined(c_plusplus) || defined(__cplusplus) +extern int LogL16fromY(double, int = SGILOGENCODE_NODITHER); +extern int LogL10fromY(double, int = SGILOGENCODE_NODITHER); +extern int uv_encode(double, double, int = SGILOGENCODE_NODITHER); +extern uint32 LogLuv24fromXYZ(float*, int = SGILOGENCODE_NODITHER); +extern uint32 LogLuv32fromXYZ(float*, int = SGILOGENCODE_NODITHER); +#else +extern int LogL16fromY(double, int); +extern int LogL10fromY(double, int); +extern int uv_encode(double, double, int); +extern uint32 LogLuv24fromXYZ(float*, int); +extern uint32 LogLuv32fromXYZ(float*, int); +#endif +#endif /* LOGLUV_PUBLIC */ + +extern int TIFFCIELabToRGBInit(TIFFCIELabToRGB*, const TIFFDisplay *, float*); +extern void TIFFCIELabToXYZ(TIFFCIELabToRGB *, uint32, int32, int32, + float *, float *, float *); +extern void TIFFXYZToRGB(TIFFCIELabToRGB *, float, float, float, + uint32 *, uint32 *, uint32 *); + +extern int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB*, float*, float*); +extern void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *, uint32, int32, int32, + uint32 *, uint32 *, uint32 *); + +/**************************************************************************** + * O B S O L E T E D I N T E R F A C E S + * + * Don't use this stuff in your applications, it may be removed in the future + * libtiff versions. + ****************************************************************************/ +typedef struct { + ttag_t field_tag; /* field's tag */ + short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */ + short field_writecount; /* write count/TIFF_VARIABLE */ + TIFFDataType field_type; /* type of associated data */ + unsigned short field_bit; /* bit in fieldsset bit vector */ + unsigned char field_oktochange; /* if true, can change while writing */ + unsigned char field_passcount; /* if true, pass dir count on set */ + char *field_name; /* ASCII name */ +} TIFFFieldInfo; + +extern int TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], uint32); +extern const TIFFFieldInfo* TIFFFindFieldInfo(TIFF*, uint32, TIFFDataType); +extern const TIFFFieldInfo* TIFFFindFieldInfoByName(TIFF* , const char *, + TIFFDataType); + +#if defined(c_plusplus) || defined(__cplusplus) +} +#endif + +#endif /* _TIFFIO_ */ + +/* vim: set ts=8 sts=8 sw=8 noet: */ +/* + * Local Variables: + * mode: c + * c-basic-offset: 8 + * fill-column: 78 + * End: + */ diff --git a/contrib/menuetlibc/openjpeg/libs/libtiff/tiffio.hxx b/contrib/menuetlibc/openjpeg/libs/libtiff/tiffio.hxx new file mode 100755 index 0000000000..ed994f1156 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libs/libtiff/tiffio.hxx @@ -0,0 +1,49 @@ +/* $Id: tiffio.hxx,v 1.3 2010-06-08 18:55:15 bfriesen Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the names of + * Sam Leffler and Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Sam Leffler and Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#ifndef _TIFFIO_HXX_ +#define _TIFFIO_HXX_ + +/* + * TIFF I/O library definitions which provide C++ streams API. + */ + +#include +#include "tiff.h" + +extern TIFF* TIFFStreamOpen(const char*, std::ostream *); +extern TIFF* TIFFStreamOpen(const char*, std::istream *); + +#endif /* _TIFFIO_HXX_ */ + +/* vim: set ts=8 sts=8 sw=8 noet: */ +/* + * Local Variables: + * mode: c++ + * c-basic-offset: 8 + * fill-column: 78 + * End: + */ diff --git a/contrib/menuetlibc/openjpeg/libs/libtiff/tiffvers.h b/contrib/menuetlibc/openjpeg/libs/libtiff/tiffvers.h new file mode 100644 index 0000000000..88ec0591ab --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libs/libtiff/tiffvers.h @@ -0,0 +1,9 @@ +#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.0.0beta6\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." +/* + * This define can be used in code that requires + * compilation-related definitions specific to a + * version or versions of the library. Runtime + * version checking should be done based on the + * string returned by TIFFGetVersion. + */ +#define TIFFLIB_VERSION 20100611 diff --git a/contrib/menuetlibc/openjpeg/libs/png/libpng14.lib b/contrib/menuetlibc/openjpeg/libs/png/libpng14.lib new file mode 100755 index 0000000000000000000000000000000000000000..6f82f34e29626678f762744a7ba62e5422484ab0 GIT binary patch literal 800554 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

    fRi%uGYLV?z+c_ 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

    lhjfoE(lQoBAO!ppQ6VD-K259Cj<((Y3 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�N-fvUH1q0MuG3`Kgic>Hkd6>Te@k# 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 XJ@ImU>(xYI{DQ71Z9tImrJDnXP!O literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/libs/png/png.h b/contrib/menuetlibc/openjpeg/libs/png/png.h new file mode 100755 index 0000000000..805be120f5 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libs/png/png.h @@ -0,0 +1,2699 @@ + +/* png.h - header file for PNG reference library + * + * libpng version 1.4.4 - September 23, 2010 + * Copyright (c) 1998-2010 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This code is released under the libpng license (See LICENSE, below) + * + * Authors and maintainers: + * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat + * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger + * libpng versions 0.97, January 1998, through 1.4.4 - September 23, 2010: Glenn + * See also "Contributing Authors", below. + * + * Note about libpng version numbers: + * + * Due to various miscommunications, unforeseen code incompatibilities + * and occasional factors outside the authors' control, version numbering + * on the library has not always been consistent and straightforward. + * The following table summarizes matters since version 0.89c, which was + * the first widely used release: + * + * source png.h png.h shared-lib + * version string int version + * ------- ------ ----- ---------- + * 0.89c "1.0 beta 3" 0.89 89 1.0.89 + * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] + * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] + * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] + * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] + * 0.97c 0.97 97 2.0.97 + * 0.98 0.98 98 2.0.98 + * 0.99 0.99 98 2.0.99 + * 0.99a-m 0.99 99 2.0.99 + * 1.00 1.00 100 2.1.0 [100 should be 10000] + * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] + * 1.0.1 png.h string is 10001 2.1.0 + * 1.0.1a-e identical to the 10002 from here on, the shared library + * 1.0.2 source version) 10002 is 2.V where V is the source code + * 1.0.2a-b 10003 version, except as noted. + * 1.0.3 10003 + * 1.0.3a-d 10004 + * 1.0.4 10004 + * 1.0.4a-f 10005 + * 1.0.5 (+ 2 patches) 10005 + * 1.0.5a-d 10006 + * 1.0.5e-r 10100 (not source compatible) + * 1.0.5s-v 10006 (not binary compatible) + * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) + * 1.0.6d-f 10007 (still binary incompatible) + * 1.0.6g 10007 + * 1.0.6h 10007 10.6h (testing xy.z so-numbering) + * 1.0.6i 10007 10.6i + * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) + * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) + * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) + * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) + * 1.0.7 1 10007 (still compatible) + * 1.0.8beta1-4 1 10008 2.1.0.8beta1-4 + * 1.0.8rc1 1 10008 2.1.0.8rc1 + * 1.0.8 1 10008 2.1.0.8 + * 1.0.9beta1-6 1 10009 2.1.0.9beta1-6 + * 1.0.9rc1 1 10009 2.1.0.9rc1 + * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10 + * 1.0.9rc2 1 10009 2.1.0.9rc2 + * 1.0.9 1 10009 2.1.0.9 + * 1.0.10beta1 1 10010 2.1.0.10beta1 + * 1.0.10rc1 1 10010 2.1.0.10rc1 + * 1.0.10 1 10010 2.1.0.10 + * 1.0.11beta1-3 1 10011 2.1.0.11beta1-3 + * 1.0.11rc1 1 10011 2.1.0.11rc1 + * 1.0.11 1 10011 2.1.0.11 + * 1.0.12beta1-2 2 10012 2.1.0.12beta1-2 + * 1.0.12rc1 2 10012 2.1.0.12rc1 + * 1.0.12 2 10012 2.1.0.12 + * 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned) + * 1.2.0beta1-2 2 10200 2.1.2.0beta1-2 + * 1.2.0beta3-5 3 10200 3.1.2.0beta3-5 + * 1.2.0rc1 3 10200 3.1.2.0rc1 + * 1.2.0 3 10200 3.1.2.0 + * 1.2.1beta1-4 3 10201 3.1.2.1beta1-4 + * 1.2.1rc1-2 3 10201 3.1.2.1rc1-2 + * 1.2.1 3 10201 3.1.2.1 + * 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6 + * 1.0.13beta1 10 10013 10.so.0.1.0.13beta1 + * 1.0.13rc1 10 10013 10.so.0.1.0.13rc1 + * 1.2.2rc1 12 10202 12.so.0.1.2.2rc1 + * 1.0.13 10 10013 10.so.0.1.0.13 + * 1.2.2 12 10202 12.so.0.1.2.2 + * 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6 + * 1.2.3 12 10203 12.so.0.1.2.3 + * 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3 + * 1.0.14rc1 13 10014 10.so.0.1.0.14rc1 + * 1.2.4rc1 13 10204 12.so.0.1.2.4rc1 + * 1.0.14 10 10014 10.so.0.1.0.14 + * 1.2.4 13 10204 12.so.0.1.2.4 + * 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2 + * 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3 + * 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3 + * 1.0.15 10 10015 10.so.0.1.0.15 + * 1.2.5 13 10205 12.so.0.1.2.5 + * 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4 + * 1.0.16 10 10016 10.so.0.1.0.16 + * 1.2.6 13 10206 12.so.0.1.2.6 + * 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2 + * 1.0.17rc1 10 10017 12.so.0.1.0.17rc1 + * 1.2.7rc1 13 10207 12.so.0.1.2.7rc1 + * 1.0.17 10 10017 12.so.0.1.0.17 + * 1.2.7 13 10207 12.so.0.1.2.7 + * 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5 + * 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5 + * 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5 + * 1.0.18 10 10018 12.so.0.1.0.18 + * 1.2.8 13 10208 12.so.0.1.2.8 + * 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3 + * 1.2.9beta4-11 13 10209 12.so.0.9[.0] + * 1.2.9rc1 13 10209 12.so.0.9[.0] + * 1.2.9 13 10209 12.so.0.9[.0] + * 1.2.10beta1-7 13 10210 12.so.0.10[.0] + * 1.2.10rc1-2 13 10210 12.so.0.10[.0] + * 1.2.10 13 10210 12.so.0.10[.0] + * 1.4.0beta1-5 14 10400 14.so.0.0[.0] + * 1.2.11beta1-4 13 10211 12.so.0.11[.0] + * 1.4.0beta7-8 14 10400 14.so.0.0[.0] + * 1.2.11 13 10211 12.so.0.11[.0] + * 1.2.12 13 10212 12.so.0.12[.0] + * 1.4.0beta9-14 14 10400 14.so.0.0[.0] + * 1.2.13 13 10213 12.so.0.13[.0] + * 1.4.0beta15-36 14 10400 14.so.0.0[.0] + * 1.4.0beta37-87 14 10400 14.so.14.0[.0] + * 1.4.0rc01 14 10400 14.so.14.0[.0] + * 1.4.0beta88-109 14 10400 14.so.14.0[.0] + * 1.4.0rc02-08 14 10400 14.so.14.0[.0] + * 1.4.0 14 10400 14.so.14.0[.0] + * 1.4.1beta01-03 14 10401 14.so.14.1[.0] + * 1.4.1rc01 14 10401 14.so.14.1[.0] + * 1.4.1beta04-12 14 10401 14.so.14.1[.0] + * 1.4.1rc02-04 14 10401 14.so.14.1[.0] + * 1.4.1 14 10401 14.so.14.1[.0] + * 1.4.2beta01 14 10402 14.so.14.2[.0] + * 1.4.2rc02-06 14 10402 14.so.14.2[.0] + * 1.4.2 14 10402 14.so.14.2[.0] + * 1.4.3beta01-05 14 10403 14.so.14.3[.0] + * 1.4.3rc01-03 14 10403 14.so.14.3[.0] + * 1.4.3 14 10403 14.so.14.3[.0] + * 1.4.4beta01-08 14 10404 14.so.14.4[.0] + * 1.4.4rc01-06 14 10404 14.so.14.4[.0] + * + * Henceforth the source version will match the shared-library major + * and minor numbers; the shared-library major version number will be + * used for changes in backward compatibility, as it is intended. The + * PNG_LIBPNG_VER macro, which is not used within libpng but is available + * for applications, is an unsigned integer of the form xyyzz corresponding + * to the source version x.y.z (leading zeros in y and z). Beta versions + * were given the previous public release number plus a letter, until + * version 1.0.6j; from then on they were given the upcoming public + * release number plus "betaNN" or "rcN". + * + * Binary incompatibility exists only when applications make direct access + * to the info_ptr or png_ptr members through png.h, and the compiled + * application is loaded with a different version of the library. + * + * DLLNUM will change each time there are forward or backward changes + * in binary compatibility (e.g., when a new feature is added). + * + * See libpng.txt or libpng.3 for more information. The PNG specification + * is available as a W3C Recommendation and as an ISO Specification, + * defines should NOT be changed. + */ +#define PNG_INFO_gAMA 0x0001 +#define PNG_INFO_sBIT 0x0002 +#define PNG_INFO_cHRM 0x0004 +#define PNG_INFO_PLTE 0x0008 +#define PNG_INFO_tRNS 0x0010 +#define PNG_INFO_bKGD 0x0020 +#define PNG_INFO_hIST 0x0040 +#define PNG_INFO_pHYs 0x0080 +#define PNG_INFO_oFFs 0x0100 +#define PNG_INFO_tIME 0x0200 +#define PNG_INFO_pCAL 0x0400 +#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ +#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ +#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ +#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ +#define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */ + +/* This is used for the transformation routines, as some of them + * change these values for the row. It also should enable using + * the routines for other purposes. + */ +typedef struct png_row_info_struct +{ + png_uint_32 width; /* width of row */ + png_size_t rowbytes; /* number of bytes in row */ + png_byte color_type; /* color type of row */ + png_byte bit_depth; /* bit depth of row */ + png_byte channels; /* number of channels (1, 2, 3, or 4) */ + png_byte pixel_depth; /* bits per pixel (depth * channels) */ +} png_row_info; + +typedef png_row_info FAR * png_row_infop; +typedef png_row_info FAR * FAR * png_row_infopp; + +/* These are the function types for the I/O functions and for the functions + * that allow the user to override the default I/O functions with his or her + * own. The png_error_ptr type should match that of user-supplied warning + * and error functions, while the png_rw_ptr type should match that of the + * user read/write data functions. + */ +typedef struct png_struct_def png_struct; +typedef png_struct FAR * png_structp; + +typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp)); +typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t)); +typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp)); +typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32, + int)); +typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32, + int)); + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, + png_infop)); +typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop)); +typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, + png_uint_32, int)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp, + png_row_infop, png_bytep)); +#endif + +#ifdef PNG_USER_CHUNKS_SUPPORTED +typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, + png_unknown_chunkp)); +#endif +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED +typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); +#endif +#ifdef PNG_SETJMP_SUPPORTED +/* This must match the function definition in , and the + * application must include this before png.h to obtain the definition + * of jmp_buf. + */ +typedef void (PNGAPI *png_longjmp_ptr) PNGARG((jmp_buf, int)); +#endif + +/* Transform masks for the high-level interface */ +#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ +#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ +#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ +#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ +#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ +#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ +#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ +#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ +#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ +#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ +#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ +#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ +#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */ +/* Added to libpng-1.2.34 */ +#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER +#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */ +/* Added to libpng-1.4.0 */ +#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */ + +/* Flags for MNG supported features */ +#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 +#define PNG_FLAG_MNG_FILTER_64 0x04 +#define PNG_ALL_MNG_FEATURES 0x05 + +typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_alloc_size_t)); +typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); + +/* The structure that holds the information to read and write PNG files. + * The only people who need to care about what is inside of this are the + * people who will be modifying the library for their own special needs. + * It should NOT be accessed directly by an application, except to store + * the jmp_buf. + */ + +struct png_struct_def +{ +#ifdef PNG_SETJMP_SUPPORTED + jmp_buf jmpbuf PNG_DEPSTRUCT; /* used in png_error */ + png_longjmp_ptr longjmp_fn PNG_DEPSTRUCT;/* setjmp non-local goto + function. */ +#endif + png_error_ptr error_fn PNG_DEPSTRUCT; /* function for printing + errors and aborting */ + png_error_ptr warning_fn PNG_DEPSTRUCT; /* function for printing + warnings */ + png_voidp error_ptr PNG_DEPSTRUCT; /* user supplied struct for + error functions */ + png_rw_ptr write_data_fn PNG_DEPSTRUCT; /* function for writing + output data */ + png_rw_ptr read_data_fn PNG_DEPSTRUCT; /* function for reading + input data */ + png_voidp io_ptr PNG_DEPSTRUCT; /* ptr to application struct + for I/O functions */ + +#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED + png_user_transform_ptr read_user_transform_fn PNG_DEPSTRUCT; /* user read + transform */ +#endif + +#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED + png_user_transform_ptr write_user_transform_fn PNG_DEPSTRUCT; /* user write + transform */ +#endif + +/* These were added in libpng-1.0.2 */ +#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) + png_voidp user_transform_ptr PNG_DEPSTRUCT; /* user supplied struct + for user transform */ + png_byte user_transform_depth PNG_DEPSTRUCT; /* bit depth of user + transformed pixels */ + png_byte user_transform_channels PNG_DEPSTRUCT; /* channels in user + transformed pixels */ +#endif +#endif + + png_uint_32 mode PNG_DEPSTRUCT; /* tells us where we are in + the PNG file */ + png_uint_32 flags PNG_DEPSTRUCT; /* flags indicating various + things to libpng */ + png_uint_32 transformations PNG_DEPSTRUCT; /* which transformations + to perform */ + + z_stream zstream PNG_DEPSTRUCT; /* pointer to decompression + structure (below) */ + png_bytep zbuf PNG_DEPSTRUCT; /* buffer for zlib */ + png_size_t zbuf_size PNG_DEPSTRUCT; /* size of zbuf */ + int zlib_level PNG_DEPSTRUCT; /* holds zlib compression level */ + int zlib_method PNG_DEPSTRUCT; /* holds zlib compression method */ + int zlib_window_bits PNG_DEPSTRUCT; /* holds zlib compression window + bits */ + int zlib_mem_level PNG_DEPSTRUCT; /* holds zlib compression memory + level */ + int zlib_strategy PNG_DEPSTRUCT; /* holds zlib compression + strategy */ + + png_uint_32 width PNG_DEPSTRUCT; /* width of image in pixels */ + png_uint_32 height PNG_DEPSTRUCT; /* height of image in pixels */ + png_uint_32 num_rows PNG_DEPSTRUCT; /* number of rows in current pass */ + png_uint_32 usr_width PNG_DEPSTRUCT; /* width of row at start of write */ + png_size_t rowbytes PNG_DEPSTRUCT; /* size of row in bytes */ +#if 0 /* Replaced with the following in libpng-1.4.1 */ + png_size_t irowbytes PNG_DEPSTRUCT; +#endif +/* Added in libpng-1.4.1 */ +#ifdef PNG_USER_LIMITS_SUPPORTED + /* Total memory that a zTXt, sPLT, iTXt, iCCP, or unknown chunk + * can occupy when decompressed. 0 means unlimited. + * We will change the typedef from png_size_t to png_alloc_size_t + * in libpng-1.6.0 + */ + png_alloc_size_t user_chunk_malloc_max PNG_DEPSTRUCT; +#endif + png_uint_32 iwidth PNG_DEPSTRUCT; /* width of current interlaced + row in pixels */ + png_uint_32 row_number PNG_DEPSTRUCT; /* current row in interlace pass */ + png_bytep prev_row PNG_DEPSTRUCT; /* buffer to save previous + (unfiltered) row */ + png_bytep row_buf PNG_DEPSTRUCT; /* buffer to save current + (unfiltered) row */ + png_bytep sub_row PNG_DEPSTRUCT; /* buffer to save "sub" row + when filtering */ + png_bytep up_row PNG_DEPSTRUCT; /* buffer to save "up" row + when filtering */ + png_bytep avg_row PNG_DEPSTRUCT; /* buffer to save "avg" row + when filtering */ + png_bytep paeth_row PNG_DEPSTRUCT; /* buffer to save "Paeth" row + when filtering */ + png_row_info row_info PNG_DEPSTRUCT; /* used for transformation + routines */ + + png_uint_32 idat_size PNG_DEPSTRUCT; /* current IDAT size for read */ + png_uint_32 crc PNG_DEPSTRUCT; /* current chunk CRC value */ + png_colorp palette PNG_DEPSTRUCT; /* palette from the input file */ + png_uint_16 num_palette PNG_DEPSTRUCT; /* number of color entries in + palette */ + png_uint_16 num_trans PNG_DEPSTRUCT; /* number of transparency values */ + png_byte chunk_name[5] PNG_DEPSTRUCT; /* null-terminated name of current + chunk */ + png_byte compression PNG_DEPSTRUCT; /* file compression type + (always 0) */ + png_byte filter PNG_DEPSTRUCT; /* file filter type (always 0) */ + png_byte interlaced PNG_DEPSTRUCT; /* PNG_INTERLACE_NONE, + PNG_INTERLACE_ADAM7 */ + png_byte pass PNG_DEPSTRUCT; /* current interlace pass (0 - 6) */ + png_byte do_filter PNG_DEPSTRUCT; /* row filter flags (see + PNG_FILTER_ below ) */ + png_byte color_type PNG_DEPSTRUCT; /* color type of file */ + png_byte bit_depth PNG_DEPSTRUCT; /* bit depth of file */ + png_byte usr_bit_depth PNG_DEPSTRUCT; /* bit depth of users row */ + png_byte pixel_depth PNG_DEPSTRUCT; /* number of bits per pixel */ + png_byte channels PNG_DEPSTRUCT; /* number of channels in file */ + png_byte usr_channels PNG_DEPSTRUCT; /* channels at start of write */ + png_byte sig_bytes PNG_DEPSTRUCT; /* magic bytes read/written from + start of file */ + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) + png_uint_16 filler PNG_DEPSTRUCT; /* filler bytes for pixel + expansion */ +#endif + +#ifdef PNG_bKGD_SUPPORTED + png_byte background_gamma_type PNG_DEPSTRUCT; +# ifdef PNG_FLOATING_POINT_SUPPORTED + float background_gamma PNG_DEPSTRUCT; +# endif + png_color_16 background PNG_DEPSTRUCT; /* background color in + screen gamma space */ +#ifdef PNG_READ_GAMMA_SUPPORTED + png_color_16 background_1 PNG_DEPSTRUCT; /* background normalized + to gamma 1.0 */ +#endif +#endif /* PNG_bKGD_SUPPORTED */ + +#ifdef PNG_WRITE_FLUSH_SUPPORTED + png_flush_ptr output_flush_fn PNG_DEPSTRUCT; /* Function for flushing + output */ + png_uint_32 flush_dist PNG_DEPSTRUCT; /* how many rows apart to flush, + 0 - no flush */ + png_uint_32 flush_rows PNG_DEPSTRUCT; /* number of rows written since + last flush */ +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + int gamma_shift PNG_DEPSTRUCT; /* number of "insignificant" bits + 16-bit gamma */ +#ifdef PNG_FLOATING_POINT_SUPPORTED + float gamma PNG_DEPSTRUCT; /* file gamma value */ + float screen_gamma PNG_DEPSTRUCT; /* screen gamma value + (display_exponent) */ +#endif +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_bytep gamma_table PNG_DEPSTRUCT; /* gamma table for 8-bit + depth files */ + png_bytep gamma_from_1 PNG_DEPSTRUCT; /* converts from 1.0 to screen */ + png_bytep gamma_to_1 PNG_DEPSTRUCT; /* converts from file to 1.0 */ + png_uint_16pp gamma_16_table PNG_DEPSTRUCT; /* gamma table for 16-bit + depth files */ + png_uint_16pp gamma_16_from_1 PNG_DEPSTRUCT; /* converts from 1.0 to + screen */ + png_uint_16pp gamma_16_to_1 PNG_DEPSTRUCT; /* converts from file to 1.0 */ +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED) + png_color_8 sig_bit PNG_DEPSTRUCT; /* significant bits in each + available channel */ +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) + png_color_8 shift PNG_DEPSTRUCT; /* shift for significant bit + tranformation */ +#endif + +#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ + || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_bytep trans_alpha PNG_DEPSTRUCT; /* alpha values for + paletted files */ + png_color_16 trans_color PNG_DEPSTRUCT; /* transparent color for + non-paletted files */ +#endif + + png_read_status_ptr read_row_fn PNG_DEPSTRUCT; /* called after each + row is decoded */ + png_write_status_ptr write_row_fn PNG_DEPSTRUCT; /* called after each + row is encoded */ +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED + png_progressive_info_ptr info_fn PNG_DEPSTRUCT; /* called after header + data fully read */ + png_progressive_row_ptr row_fn PNG_DEPSTRUCT; /* called after each + prog. row is decoded */ + png_progressive_end_ptr end_fn PNG_DEPSTRUCT; /* called after image + is complete */ + png_bytep save_buffer_ptr PNG_DEPSTRUCT; /* current location in + save_buffer */ + png_bytep save_buffer PNG_DEPSTRUCT; /* buffer for previously + read data */ + png_bytep current_buffer_ptr PNG_DEPSTRUCT; /* current location in + current_buffer */ + png_bytep current_buffer PNG_DEPSTRUCT; /* buffer for recently + used data */ + png_uint_32 push_length PNG_DEPSTRUCT; /* size of current input + chunk */ + png_uint_32 skip_length PNG_DEPSTRUCT; /* bytes to skip in + input data */ + png_size_t save_buffer_size PNG_DEPSTRUCT; /* amount of data now + in save_buffer */ + png_size_t save_buffer_max PNG_DEPSTRUCT; /* total size of + save_buffer */ + png_size_t buffer_size PNG_DEPSTRUCT; /* total amount of + available input data */ + png_size_t current_buffer_size PNG_DEPSTRUCT; /* amount of data now + in current_buffer */ + int process_mode PNG_DEPSTRUCT; /* what push library + is currently doing */ + int cur_palette PNG_DEPSTRUCT; /* current push library + palette index */ + +# ifdef PNG_TEXT_SUPPORTED + png_size_t current_text_size PNG_DEPSTRUCT; /* current size of + text input data */ + png_size_t current_text_left PNG_DEPSTRUCT; /* how much text left + to read in input */ + png_charp current_text PNG_DEPSTRUCT; /* current text chunk + buffer */ + png_charp current_text_ptr PNG_DEPSTRUCT; /* current location + in current_text */ +# endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */ + +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) +/* For the Borland special 64K segment handler */ + png_bytepp offset_table_ptr PNG_DEPSTRUCT; + png_bytep offset_table PNG_DEPSTRUCT; + png_uint_16 offset_table_number PNG_DEPSTRUCT; + png_uint_16 offset_table_count PNG_DEPSTRUCT; + png_uint_16 offset_table_count_free PNG_DEPSTRUCT; +#endif + +#ifdef PNG_READ_QUANTIZE_SUPPORTED + png_bytep palette_lookup PNG_DEPSTRUCT; /* lookup table for quantizing */ + png_bytep quantize_index PNG_DEPSTRUCT; /* index translation for palette + files */ +#endif + +#if defined(PNG_READ_QUANTIZE_SUPPORTED) || defined(PNG_hIST_SUPPORTED) + png_uint_16p hist PNG_DEPSTRUCT; /* histogram */ +#endif + +#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED + png_byte heuristic_method PNG_DEPSTRUCT; /* heuristic for row + filter selection */ + png_byte num_prev_filters PNG_DEPSTRUCT; /* number of weights + for previous rows */ + png_bytep prev_filters PNG_DEPSTRUCT; /* filter type(s) of + previous row(s) */ + png_uint_16p filter_weights PNG_DEPSTRUCT; /* weight(s) for previous + line(s) */ + png_uint_16p inv_filter_weights PNG_DEPSTRUCT; /* 1/weight(s) for + previous line(s) */ + png_uint_16p filter_costs PNG_DEPSTRUCT; /* relative filter + calculation cost */ + png_uint_16p inv_filter_costs PNG_DEPSTRUCT; /* 1/relative filter + calculation cost */ +#endif + +#ifdef PNG_TIME_RFC1123_SUPPORTED + png_charp time_buffer PNG_DEPSTRUCT; /* String to hold RFC 1123 time text */ +#endif + +/* New members added in libpng-1.0.6 */ + + png_uint_32 free_me PNG_DEPSTRUCT; /* flags items libpng is + responsible for freeing */ + +#ifdef PNG_USER_CHUNKS_SUPPORTED + png_voidp user_chunk_ptr PNG_DEPSTRUCT; + png_user_chunk_ptr read_user_chunk_fn PNG_DEPSTRUCT; /* user read + chunk handler */ +#endif + +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED + int num_chunk_list PNG_DEPSTRUCT; + png_bytep chunk_list PNG_DEPSTRUCT; +#endif + +/* New members added in libpng-1.0.3 */ +#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED + png_byte rgb_to_gray_status PNG_DEPSTRUCT; + /* These were changed from png_byte in libpng-1.0.6 */ + png_uint_16 rgb_to_gray_red_coeff PNG_DEPSTRUCT; + png_uint_16 rgb_to_gray_green_coeff PNG_DEPSTRUCT; + png_uint_16 rgb_to_gray_blue_coeff PNG_DEPSTRUCT; +#endif + +/* New member added in libpng-1.0.4 (renamed in 1.0.9) */ +#if defined(PNG_MNG_FEATURES_SUPPORTED) || \ + defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ + defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) +/* Changed from png_byte to png_uint_32 at version 1.2.0 */ + png_uint_32 mng_features_permitted PNG_DEPSTRUCT; +#endif + +/* New member added in libpng-1.0.7 */ +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_fixed_point int_gamma PNG_DEPSTRUCT; +#endif + +/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */ +#ifdef PNG_MNG_FEATURES_SUPPORTED + png_byte filter_type PNG_DEPSTRUCT; +#endif + +/* New members added in libpng-1.2.0 */ + +/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ +#ifdef PNG_USER_MEM_SUPPORTED + png_voidp mem_ptr PNG_DEPSTRUCT; /* user supplied struct for + mem functions */ + png_malloc_ptr malloc_fn PNG_DEPSTRUCT; /* function for + allocating memory */ + png_free_ptr free_fn PNG_DEPSTRUCT; /* function for + freeing memory */ +#endif + +/* New member added in libpng-1.0.13 and 1.2.0 */ + png_bytep big_row_buf PNG_DEPSTRUCT; /* buffer to save current + (unfiltered) row */ + +#ifdef PNG_READ_QUANTIZE_SUPPORTED +/* The following three members were added at version 1.0.14 and 1.2.4 */ + png_bytep quantize_sort PNG_DEPSTRUCT; /* working sort array */ + png_bytep index_to_palette PNG_DEPSTRUCT; /* where the original + index currently is + in the palette */ + png_bytep palette_to_index PNG_DEPSTRUCT; /* which original index + points to this + palette color */ +#endif + +/* New members added in libpng-1.0.16 and 1.2.6 */ + png_byte compression_type PNG_DEPSTRUCT; + +#ifdef PNG_USER_LIMITS_SUPPORTED + png_uint_32 user_width_max PNG_DEPSTRUCT; + png_uint_32 user_height_max PNG_DEPSTRUCT; + /* Added in libpng-1.4.0: Total number of sPLT, text, and unknown + * chunks that can be stored (0 means unlimited). + */ + png_uint_32 user_chunk_cache_max PNG_DEPSTRUCT; +#endif + +/* New member added in libpng-1.0.25 and 1.2.17 */ +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED + /* Storage for unknown chunk that the library doesn't recognize. */ + png_unknown_chunk unknown_chunk PNG_DEPSTRUCT; +#endif + +/* New members added in libpng-1.2.26 */ + png_uint_32 old_big_row_buf_size PNG_DEPSTRUCT; + png_uint_32 old_prev_row_size PNG_DEPSTRUCT; + +/* New member added in libpng-1.2.30 */ + png_charp chunkdata PNG_DEPSTRUCT; /* buffer for reading chunk data */ + +#ifdef PNG_IO_STATE_SUPPORTED +/* New member added in libpng-1.4.0 */ + png_uint_32 io_state PNG_DEPSTRUCT; +#endif +}; + + +/* This triggers a compiler error in png.c, if png.c and png.h + * do not agree upon the version number. + */ +typedef png_structp version_1_4_4; + +typedef png_struct FAR * FAR * png_structpp; + +/* Here are the function definitions most commonly used. This is not + * the place to find out how to use libpng. See libpng.txt for the + * full explanation, see example.c for the summary. This just provides + * a simple one line description of the use of each function. + */ + +/* Returns the version number of the library */ +PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void)); + +/* Tell lib we have already handled the first magic bytes. + * Handling more than 8 bytes from the beginning of the file is an error. + */ +PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr, + int num_bytes)); + +/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a + * PNG file. Returns zero if the supplied bytes match the 8-byte PNG + * signature, and non-zero otherwise. Having num_to_check == 0 or + * start > 7 will always fail (ie return non-zero). + */ +PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start, + png_size_t num_to_check)); + +/* Simple signature checking function. This is the same as calling + * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). + */ +#define png_check_sig(sig,n) !png_sig_cmp((sig), 0, (n)) + +/* Allocate and initialize png_ptr struct for reading, and any other memory. */ +PNG_EXPORT(png_structp,png_create_read_struct) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED; + +/* Allocate and initialize png_ptr struct for writing, and any other memory */ +PNG_EXPORT(png_structp,png_create_write_struct) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED; + +PNG_EXPORT(png_size_t,png_get_compression_buffer_size) + PNGARG((png_structp png_ptr)); + +PNG_EXPORT(void,png_set_compression_buffer_size) + PNGARG((png_structp png_ptr, png_size_t size)); + +/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp + * match up. + */ +#ifdef PNG_SETJMP_SUPPORTED +/* This function returns the jmp_buf built in to *png_ptr. It must be + * supplied with an appropriate 'longjmp' function to use on that jmp_buf + * unless the default error function is overridden in which case NULL is + * acceptable. The size of the jmp_buf is checked against the actual size + * allocated by the library - the call will return NULL on a mismatch + * indicating an ABI mismatch. + */ +PNG_EXPORT(jmp_buf*, png_set_longjmp_fn) + PNGARG((png_structp png_ptr, png_longjmp_ptr longjmp_fn, size_t + jmp_buf_size)); +# define png_jmpbuf(png_ptr) \ + (*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf))) +#else +# define png_jmpbuf(png_ptr) \ + (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP) +#endif + +#ifdef PNG_READ_SUPPORTED +/* Reset the compression stream */ +PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr)); +#endif + +/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ +#ifdef PNG_USER_MEM_SUPPORTED +PNG_EXPORT(png_structp,png_create_read_struct_2) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED; +PNG_EXPORT(png_structp,png_create_write_struct_2) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED; +#endif + +/* Write the PNG file signature. */ +PNG_EXPORT(void,png_write_sig) PNGARG((png_structp png_ptr)); + +/* Write a PNG chunk - size, type, (optional) data, CRC. */ +PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr, + png_bytep chunk_name, png_bytep data, png_size_t length)); + +/* Write the start of a PNG chunk - length and chunk name. */ +PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr, + png_bytep chunk_name, png_uint_32 length)); + +/* Write the data of a PNG chunk started with png_write_chunk_start(). */ +PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr, + png_bytep data, png_size_t length)); + +/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ +PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr)); + +/* Allocate and initialize the info structure */ +PNG_EXPORT(png_infop,png_create_info_struct) + PNGARG((png_structp png_ptr)) PNG_ALLOCATED; + +PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr, + png_size_t png_info_struct_size)); + +/* Writes all the PNG information before the image. */ +PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the information before the actual image data. */ +PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + +#ifdef PNG_TIME_RFC1123_SUPPORTED +PNG_EXPORT(png_charp,png_convert_to_rfc1123) + PNGARG((png_structp png_ptr, png_timep ptime)); +#endif + +#ifdef PNG_CONVERT_tIME_SUPPORTED +/* Convert from a struct tm to png_time */ +PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime, + struct tm FAR * ttime)); + +/* Convert from time_t to png_time. Uses gmtime() */ +PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime, + time_t ttime)); +#endif /* PNG_CONVERT_tIME_SUPPORTED */ + +#ifdef PNG_READ_EXPAND_SUPPORTED +/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ +PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr)); +PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp + png_ptr)); +PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr)); +PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) +/* Use blue, green, red order for pixels. */ +PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED +/* Expand the grayscale to 24-bit RGB if necessary. */ +PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED +/* Reduce RGB to grayscale. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr, + int error_action, double red, double green )); +#endif +PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr, + int error_action, png_fixed_point red, png_fixed_point green )); +PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp + png_ptr)); +#endif + +PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth, + png_colorp palette)); + +#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED +PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) +PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) +PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) +/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */ +PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr, + png_uint_32 filler, int flags)); +/* The values of the PNG_FILLER_ defines should NOT be changed */ +#define PNG_FILLER_BEFORE 0 +#define PNG_FILLER_AFTER 1 +/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */ +PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr, + png_uint_32 filler, int flags)); +#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ + +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) +/* Swap bytes in 16-bit depth files. */ +PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) +/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ +PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \ + defined(PNG_WRITE_PACKSWAP_SUPPORTED) +/* Swap packing order of pixels in bytes. */ +PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) +/* Converts files to legal bit depths. */ +PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr, + png_color_8p true_bits)); +#endif + +#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ + defined(PNG_WRITE_INTERLACING_SUPPORTED) +/* Have the code handle the interlacing. Returns the number of passes. */ +PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) +/* Invert monochrome files */ +PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_READ_BACKGROUND_SUPPORTED +/* Handle alpha and tRNS by replacing with a background color. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr, + png_color_16p background_color, int background_gamma_code, + int need_expand, double background_gamma)); +#endif +#define PNG_BACKGROUND_GAMMA_UNKNOWN 0 +#define PNG_BACKGROUND_GAMMA_SCREEN 1 +#define PNG_BACKGROUND_GAMMA_FILE 2 +#define PNG_BACKGROUND_GAMMA_UNIQUE 3 +#endif + +#ifdef PNG_READ_16_TO_8_SUPPORTED +/* Strip the second byte of information from a 16-bit depth file. */ +PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_READ_QUANTIZE_SUPPORTED +/* Turn on quantizing, and reduce the palette to the number of colors + * available. Prior to libpng-1.4.2, this was png_set_dither(). + */ +PNG_EXPORT(void,png_set_quantize) PNGARG((png_structp png_ptr, + png_colorp palette, int num_palette, int maximum_colors, + png_uint_16p histogram, int full_quantize)); +#endif +/* This migration aid will be removed from libpng-1.5.0 */ +#define png_set_dither png_set_quantize + +#ifdef PNG_READ_GAMMA_SUPPORTED +/* Handle gamma correction. Screen_gamma=(display_exponent) */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr, + double screen_gamma, double default_file_gamma)); +#endif +#endif + + +#ifdef PNG_WRITE_FLUSH_SUPPORTED +/* Set how many lines between output flushes - 0 for no flushing */ +PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows)); +/* Flush the current PNG output buffer */ +PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr)); +#endif + +/* Optional update palette with requested transformations */ +PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr)); + +/* Optional call to update the users info structure */ +PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read one or more rows of image data. */ +PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr, + png_bytepp row, png_bytepp display_row, png_uint_32 num_rows)); +#endif + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read a row of data. */ +PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr, + png_bytep row, + png_bytep display_row)); +#endif + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the whole image into memory at once. */ +PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr, + png_bytepp image)); +#endif + +/* Write a row of image data */ +PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr, + png_bytep row)); + +/* Write a few rows of image data */ +PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr, + png_bytepp row, png_uint_32 num_rows)); + +/* Write the image data */ +PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, + png_bytepp image)); + +/* Write the end of the PNG file. */ +PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the end of the PNG file. */ +PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + +/* Free any memory associated with the png_info_struct */ +PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr, + png_infopp info_ptr_ptr)); + +/* Free any memory associated with the png_struct and the png_info_structs */ +PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp + png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); + +/* Free any memory associated with the png_struct and the png_info_structs */ +PNG_EXPORT(void,png_destroy_write_struct) + PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)); + +/* Set the libpng method of handling chunk CRC errors */ +PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr, + int crit_action, int ancil_action)); + +/* Values for png_set_crc_action() to say how to handle CRC errors in + * ancillary and critical chunks, and whether to use the data contained + * therein. Note that it is impossible to "discard" data in a critical + * chunk. For versions prior to 0.90, the action was always error/quit, + * whereas in version 0.90 and later, the action for CRC errors in ancillary + * chunks is warn/discard. These values should NOT be changed. + * + * value action:critical action:ancillary + */ +#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ +#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ +#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ +#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ +#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ +#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ + +/* These functions give the user control over the scan-line filtering in + * libpng and the compression methods used by zlib. These functions are + * mainly useful for testing, as the defaults should work with most users. + * Those users who are tight on memory or want faster performance at the + * expense of compression can modify them. See the compression library + * header file (zlib.h) for an explination of the compression functions. + */ + +/* Set the filtering method(s) used by libpng. Currently, the only valid + * value for "method" is 0. + */ +PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, + int filters)); + +/* Flags for png_set_filter() to say which filters to use. The flags + * are chosen so that they don't conflict with real filter types + * below, in case they are supplied instead of the #defined constants. + * These values should NOT be changed. + */ +#define PNG_NO_FILTERS 0x00 +#define PNG_FILTER_NONE 0x08 +#define PNG_FILTER_SUB 0x10 +#define PNG_FILTER_UP 0x20 +#define PNG_FILTER_AVG 0x40 +#define PNG_FILTER_PAETH 0x80 +#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ + PNG_FILTER_AVG | PNG_FILTER_PAETH) + +/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. + * These defines should NOT be changed. + */ +#define PNG_FILTER_VALUE_NONE 0 +#define PNG_FILTER_VALUE_SUB 1 +#define PNG_FILTER_VALUE_UP 2 +#define PNG_FILTER_VALUE_AVG 3 +#define PNG_FILTER_VALUE_PAETH 4 +#define PNG_FILTER_VALUE_LAST 5 + +#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */ +/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ + * defines, either the default (minimum-sum-of-absolute-differences), or + * the experimental method (weighted-minimum-sum-of-absolute-differences). + * + * Weights are factors >= 1.0, indicating how important it is to keep the + * filter type consistent between rows. Larger numbers mean the current + * filter is that many times as likely to be the same as the "num_weights" + * previous filters. This is cumulative for each previous row with a weight. + * There needs to be "num_weights" values in "filter_weights", or it can be + * NULL if the weights aren't being specified. Weights have no influence on + * the selection of the first row filter. Well chosen weights can (in theory) + * improve the compression for a given image. + * + * Costs are factors >= 1.0 indicating the relative decoding costs of a + * filter type. Higher costs indicate more decoding expense, and are + * therefore less likely to be selected over a filter with lower computational + * costs. There needs to be a value in "filter_costs" for each valid filter + * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't + * setting the costs. Costs try to improve the speed of decompression without + * unduly increasing the compressed image size. + * + * A negative weight or cost indicates the default value is to be used, and + * values in the range [0.0, 1.0) indicate the value is to remain unchanged. + * The default values for both weights and costs are currently 1.0, but may + * change if good general weighting/cost heuristics can be found. If both + * the weights and costs are set to 1.0, this degenerates the WEIGHTED method + * to the UNWEIGHTED method, but with added encoding time/computation. + */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, + int heuristic_method, int num_weights, png_doublep filter_weights, + png_doublep filter_costs)); +#endif +#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ + +/* Heuristic used for row filter selection. These defines should NOT be + * changed. + */ +#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ +#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ +#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ +#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ + +/* Set the library compression level. Currently, valid values range from + * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 + * (0 - no compression, 9 - "maximal" compression). Note that tests have + * shown that zlib compression levels 3-6 usually perform as well as level 9 + * for PNG images, and do considerably fewer caclulations. In the future, + * these values may not correspond directly to the zlib compression levels. + */ +PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr, + int level)); + +PNG_EXPORT(void,png_set_compression_mem_level) + PNGARG((png_structp png_ptr, int mem_level)); + +PNG_EXPORT(void,png_set_compression_strategy) + PNGARG((png_structp png_ptr, int strategy)); + +PNG_EXPORT(void,png_set_compression_window_bits) + PNGARG((png_structp png_ptr, int window_bits)); + +PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr, + int method)); + +/* These next functions are called for input/output, memory, and error + * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, + * and call standard C I/O routines such as fread(), fwrite(), and + * fprintf(). These functions can be made to use other I/O routines + * at run time for those applications that need to handle I/O in a + * different manner by calling png_set_???_fn(). See libpng.txt for + * more information. + */ + +#ifdef PNG_STDIO_SUPPORTED +/* Initialize the input/output for the PNG file to the default functions. */ +PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, + png_FILE_p fp)); +#endif + +/* Replace the (error and abort), and warning functions with user + * supplied functions. If no messages are to be printed you must still + * write and use replacement functions. The replacement error_fn should + * still do a longjmp to the last setjmp location if you are using this + * method of error handling. If error_fn or warning_fn is NULL, the + * default function will be used. + */ + +PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr, + png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); + +/* Return the user pointer associated with the error functions */ +PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr)); + +/* Replace the default data output functions with a user supplied one(s). + * If buffered output is not used, then output_flush_fn can be set to NULL. + * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time + * output_flush_fn will be ignored (and thus can be NULL). + * It is probably a mistake to use NULL for output_flush_fn if + * write_data_fn is not also NULL unless you have built libpng with + * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's + * default flush function, which uses the standard *FILE structure, will + * be used. + */ +PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr, + png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); + +/* Replace the default data input function with a user supplied one. */ +PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr, + png_voidp io_ptr, png_rw_ptr read_data_fn)); + +/* Return the user pointer associated with the I/O functions */ +PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr)); + +PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr, + png_read_status_ptr read_row_fn)); + +PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr, + png_write_status_ptr write_row_fn)); + +#ifdef PNG_USER_MEM_SUPPORTED +/* Replace the default memory allocation functions with user supplied one(s). */ +PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr, + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +/* Return the user pointer associated with the memory functions */ +PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED +PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp + png_ptr, png_user_transform_ptr read_user_transform_fn)); +#endif + +#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED +PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp + png_ptr, png_user_transform_ptr write_user_transform_fn)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp + png_ptr, png_voidp user_transform_ptr, int user_transform_depth, + int user_transform_channels)); +/* Return the user pointer associated with the user transform functions */ +PNG_EXPORT(png_voidp,png_get_user_transform_ptr) + PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_USER_CHUNKS_SUPPORTED +PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr, + png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); +PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp + png_ptr)); +#endif + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +/* Sets the function callbacks for the push reader, and a pointer to a + * user-defined structure available to the callback functions. + */ +PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr, + png_voidp progressive_ptr, + png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, + png_progressive_end_ptr end_fn)); + +/* Returns the user pointer associated with the push read functions */ +PNG_EXPORT(png_voidp,png_get_progressive_ptr) + PNGARG((png_structp png_ptr)); + +/* Function to be called when data becomes available */ +PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep buffer, png_size_t buffer_size)); + +/* Function that combines rows. Not very much different than the + * png_combine_row() call. Is this even used????? + */ +PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr, + png_bytep old_row, png_bytep new_row)); +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr, + png_alloc_size_t size)) PNG_ALLOCATED; +/* Added at libpng version 1.4.0 */ +PNG_EXPORT(png_voidp,png_calloc) PNGARG((png_structp png_ptr, + png_alloc_size_t size)) PNG_ALLOCATED; + +/* Added at libpng version 1.2.4 */ +PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr, + png_alloc_size_t size)) PNG_ALLOCATED; + +/* Frees a pointer allocated by png_malloc() */ +PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr)); + +/* Free data that was allocated internally */ +PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 free_me, int num)); +/* Reassign responsibility for freeing existing data, whether allocated + * by libpng or by the application */ +PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr, + png_infop info_ptr, int freer, png_uint_32 mask)); +/* Assignments for png_data_freer */ +#define PNG_DESTROY_WILL_FREE_DATA 1 +#define PNG_SET_WILL_FREE_DATA 1 +#define PNG_USER_WILL_FREE_DATA 2 +/* Flags for png_ptr->free_me and info_ptr->free_me */ +#define PNG_FREE_HIST 0x0008 +#define PNG_FREE_ICCP 0x0010 +#define PNG_FREE_SPLT 0x0020 +#define PNG_FREE_ROWS 0x0040 +#define PNG_FREE_PCAL 0x0080 +#define PNG_FREE_SCAL 0x0100 +#define PNG_FREE_UNKN 0x0200 +#define PNG_FREE_LIST 0x0400 +#define PNG_FREE_PLTE 0x1000 +#define PNG_FREE_TRNS 0x2000 +#define PNG_FREE_TEXT 0x4000 +#define PNG_FREE_ALL 0x7fff +#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ + +#ifdef PNG_USER_MEM_SUPPORTED +PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr, + png_alloc_size_t size)) PNG_ALLOCATED; +PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr, + png_voidp ptr)); +#endif + +#ifndef PNG_NO_ERROR_TEXT +/* Fatal error in PNG image of libpng - can't continue */ +PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr, + png_const_charp error_message)) PNG_NORETURN; + +/* The same, but the chunk name is prepended to the error string. */ +PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr, + png_const_charp error_message)) PNG_NORETURN; + +#else +/* Fatal error in PNG image of libpng - can't continue */ +PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr)) PNG_NORETURN; +#endif + +/* Non-fatal error in libpng. Can continue, but may have a problem. */ +PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +/* Non-fatal error in libpng, chunk name is prepended to message. */ +PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +#ifdef PNG_BENIGN_ERRORS_SUPPORTED +/* Benign error in libpng. Can continue, but may have a problem. + * User can choose whether to handle as a fatal error or as a warning. */ +PNG_EXPORT(void,png_benign_error) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +/* Same, chunk name is prepended to message. */ +PNG_EXPORT(void,png_chunk_benign_error) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +PNG_EXPORT(void,png_set_benign_errors) PNGARG((png_structp + png_ptr, int allowed)); +#endif + +/* The png_set_ functions are for storing values in the png_info_struct. + * Similarly, the png_get_ calls are used to read values from the + * png_info_struct, either storing the parameters in the passed variables, or + * setting pointers into the png_info_struct where the data is stored. The + * png_get_ functions return a non-zero value if the data was available + * in info_ptr, or return zero and do not change any of the parameters if the + * data was not available. + * + * These functions should be used instead of directly accessing png_info + * to avoid problems with future changes in the size and internal layout of + * png_info_struct. + */ +/* Returns "flag" if chunk data is valid in info_ptr. */ +PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr, +png_infop info_ptr, png_uint_32 flag)); + +/* Returns number of bytes needed to hold a transformed row. */ +PNG_EXPORT(png_size_t,png_get_rowbytes) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#ifdef PNG_INFO_IMAGE_SUPPORTED +/* Returns row_pointers, which is an array of pointers to scanlines that was + * returned from png_read_png(). + */ +PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr, +png_infop info_ptr)); +/* Set row_pointers, which is an array of pointers to scanlines for use + * by png_write_png(). + */ +PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytepp row_pointers)); +#endif + +/* Returns number of color channels in image. */ +PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#ifdef PNG_EASY_ACCESS_SUPPORTED +/* Returns image width in pixels. */ +PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image height in pixels. */ +PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image bit_depth. */ +PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image color_type. */ +PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image filter_type. */ +PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image interlace_type. */ +PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image compression_type. */ +PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image resolution in pixels per meter, from pHYs chunk data. */ +PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns pixel aspect ratio, computed from pHYs chunk data. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +#endif + +/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ +PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +#endif /* PNG_EASY_ACCESS_SUPPORTED */ + +/* Returns pointer to signature string read from PNG header */ +PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#ifdef PNG_bKGD_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_16p *background)); +#endif + +#ifdef PNG_bKGD_SUPPORTED +PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_16p background)); +#endif + +#ifdef PNG_cHRM_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, double *white_x, double *white_y, double *red_x, + double *red_y, double *green_x, double *green_y, double *blue_x, + double *blue_y)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point + *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, + png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point + *int_blue_x, png_fixed_point *int_blue_y)); +#endif +#endif + +#ifdef PNG_cHRM_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, double white_x, double white_y, double red_x, + double red_y, double green_x, double green_y, double blue_x, double blue_y)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, + png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point + int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)); +#endif +#endif + +#ifdef PNG_gAMA_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr, + png_infop info_ptr, double *file_gamma)); +#endif +PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point *int_file_gamma)); +#endif + +#ifdef PNG_gAMA_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr, + png_infop info_ptr, double file_gamma)); +#endif +PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_file_gamma)); +#endif + +#ifdef PNG_hIST_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_16p *hist)); +#endif + +#ifdef PNG_hIST_SUPPORTED +PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_16p hist)); +#endif + +PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, + int *bit_depth, int *color_type, int *interlace_method, + int *compression_method, int *filter_method)); + +PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, + int color_type, int interlace_method, int compression_method, + int filter_method)); + +#ifdef PNG_oFFs_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, + int *unit_type)); +#endif + +#ifdef PNG_oFFs_SUPPORTED +PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, + int unit_type)); +#endif + +#ifdef PNG_pCAL_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, + int *type, int *nparams, png_charp *units, png_charpp *params)); +#endif + +#ifdef PNG_pCAL_SUPPORTED +PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, + int type, int nparams, png_charp units, png_charpp params)); +#endif + +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); +#endif + +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); +#endif + +PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_colorp *palette, int *num_palette)); + +PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_colorp palette, int num_palette)); + +#ifdef PNG_sBIT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_8p *sig_bit)); +#endif + +#ifdef PNG_sBIT_SUPPORTED +PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_8p sig_bit)); +#endif + +#ifdef PNG_sRGB_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *intent)); +#endif + +#ifdef PNG_sRGB_SUPPORTED +PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr, + png_infop info_ptr, int intent)); +PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, int intent)); +#endif + +#ifdef PNG_iCCP_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charpp name, int *compression_type, + png_charpp profile, png_uint_32 *proflen)); + /* Note to maintainer: profile should be png_bytepp */ +#endif + +#ifdef PNG_iCCP_SUPPORTED +PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp name, int compression_type, + png_charp profile, png_uint_32 proflen)); + /* Note to maintainer: profile should be png_bytep */ +#endif + +#ifdef PNG_sPLT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_sPLT_tpp entries)); +#endif + +#ifdef PNG_sPLT_SUPPORTED +PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_sPLT_tp entries, int nentries)); +#endif + +#ifdef PNG_TEXT_SUPPORTED +/* png_get_text also returns the number of text chunks in *num_text */ +PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_textp *text_ptr, int *num_text)); +#endif + +/* Note while png_set_text() will accept a structure whose text, + * language, and translated keywords are NULL pointers, the structure + * returned by png_get_text will always contain regular + * zero-terminated C strings. They might be empty strings but + * they will never be NULL pointers. + */ + +#ifdef PNG_TEXT_SUPPORTED +PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_textp text_ptr, int num_text)); +#endif + +#ifdef PNG_tIME_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_timep *mod_time)); +#endif + +#ifdef PNG_tIME_SUPPORTED +PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_timep mod_time)); +#endif + +#ifdef PNG_tRNS_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep *trans_alpha, int *num_trans, + png_color_16p *trans_color)); +#endif + +#ifdef PNG_tRNS_SUPPORTED +PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep trans_alpha, int num_trans, + png_color_16p trans_color)); +#endif + +#ifdef PNG_tRNS_SUPPORTED +#endif + +#ifdef PNG_sCAL_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *unit, double *width, double *height)); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight)); +#endif +#endif +#endif /* PNG_sCAL_SUPPORTED */ + +#ifdef PNG_sCAL_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, int unit, double width, double height)); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr, + png_infop info_ptr, int unit, png_charp swidth, png_charp sheight)); +#endif +#endif +#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ + +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +/* Provide a list of chunks and how they are to be handled, if the built-in + handling or default unknown chunk handling is not desired. Any chunks not + listed will be handled in the default manner. The IHDR and IEND chunks + must not be listed. + keep = 0: follow default behaviour + = 1: do not keep + = 2: keep only if safe-to-copy + = 3: keep even if unsafe-to-copy +*/ +PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp + png_ptr, int keep, png_bytep chunk_list, int num_chunks)); +PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep + chunk_name)); +#endif +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED +PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)); +PNG_EXPORT(void, png_set_unknown_chunk_location) + PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location)); +PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp + png_ptr, png_infop info_ptr, png_unknown_chunkpp entries)); +#endif + +/* Png_free_data() will turn off the "valid" flag for anything it frees. + * If you need to turn it off for a chunk that your application has freed, + * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); + */ +PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr, + png_infop info_ptr, int mask)); + +#ifdef PNG_INFO_IMAGE_SUPPORTED +/* The "params" pointer is currently not used and is for future expansion. */ +PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr, + png_infop info_ptr, + int transforms, + png_voidp params)); +PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr, + png_infop info_ptr, + int transforms, + png_voidp params)); +#endif + +PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr)); +PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr)); +PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp + png_ptr)); +PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr)); + +#ifdef PNG_MNG_FEATURES_SUPPORTED +PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp + png_ptr, png_uint_32 mng_features_permitted)); +#endif + +/* For use in png_set_keep_unknown, added to version 1.2.6 */ +#define PNG_HANDLE_CHUNK_AS_DEFAULT 0 +#define PNG_HANDLE_CHUNK_NEVER 1 +#define PNG_HANDLE_CHUNK_IF_SAFE 2 +#define PNG_HANDLE_CHUNK_ALWAYS 3 + +/* Strip the prepended error numbers ("#nnn ") from error and warning + * messages before passing them to the error or warning handler. + */ +#ifdef PNG_ERROR_NUMBERS_SUPPORTED +PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp + png_ptr, png_uint_32 strip_mode)); +#endif + +/* Added in libpng-1.2.6 */ +#ifdef PNG_SET_USER_LIMITS_SUPPORTED +PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp + png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max)); +PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp + png_ptr)); +PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp + png_ptr)); +/* Added in libpng-1.4.0 */ +PNG_EXPORT(void,png_set_chunk_cache_max) PNGARG((png_structp + png_ptr, png_uint_32 user_chunk_cache_max)); +PNG_EXPORT(png_uint_32,png_get_chunk_cache_max) + PNGARG((png_structp png_ptr)); +/* Added in libpng-1.4.1 */ +PNG_EXPORT(void,png_set_chunk_malloc_max) PNGARG((png_structp + png_ptr, png_alloc_size_t user_chunk_cache_max)); +PNG_EXPORT(png_alloc_size_t,png_get_chunk_malloc_max) + PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED) +PNG_EXPORT(png_uint_32,png_get_pixels_per_inch) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXPORT(png_uint_32,png_get_x_pixels_per_inch) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXPORT(png_uint_32,png_get_y_pixels_per_inch) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXPORT(float,png_get_x_offset_inches) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +PNG_EXPORT(float,png_get_y_offset_inches) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_pHYs_dpi) PNGARG((png_structp png_ptr, +png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); +#endif /* PNG_pHYs_SUPPORTED */ +#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */ + +/* Added in libpng-1.4.0 */ +#ifdef PNG_IO_STATE_SUPPORTED +PNG_EXPORT(png_uint_32,png_get_io_state) PNGARG((png_structp png_ptr)); + +PNG_EXPORT(png_bytep,png_get_io_chunk_name) + PNGARG((png_structp png_ptr)); + +/* The flags returned by png_get_io_state() are the following: */ +#define PNG_IO_NONE 0x0000 /* no I/O at this moment */ +#define PNG_IO_READING 0x0001 /* currently reading */ +#define PNG_IO_WRITING 0x0002 /* currently writing */ +#define PNG_IO_SIGNATURE 0x0010 /* currently at the file signature */ +#define PNG_IO_CHUNK_HDR 0x0020 /* currently at the chunk header */ +#define PNG_IO_CHUNK_DATA 0x0040 /* currently at the chunk data */ +#define PNG_IO_CHUNK_CRC 0x0080 /* currently at the chunk crc */ +#define PNG_IO_MASK_OP 0x000f /* current operation: reading/writing */ +#define PNG_IO_MASK_LOC 0x00f0 /* current location: sig/hdr/data/crc */ +#endif /* ?PNG_IO_STATE_SUPPORTED */ + +/* Maintainer: Put new public prototypes here ^, in libpng.3, and project + * defs + */ + +#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED +/* With these routines we avoid an integer divide, which will be slower on + * most machines. However, it does take more operations than the corresponding + * divide method, so it may be slower on a few RISC systems. There are two + * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. + * + * Note that the rounding factors are NOT supposed to be the same! 128 and + * 32768 are correct for the NODIV code; 127 and 32767 are correct for the + * standard method. + * + * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] + */ + + /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ + +# define png_composite(composite, fg, alpha, bg) \ + { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \ + * (png_uint_16)(alpha) \ + + (png_uint_16)(bg)*(png_uint_16)(255 \ + - (png_uint_16)(alpha)) + (png_uint_16)128); \ + (composite) = (png_byte)((temp + (temp >> 8)) >> 8); } + +# define png_composite_16(composite, fg, alpha, bg) \ + { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \ + * (png_uint_32)(alpha) \ + + (png_uint_32)(bg)*(png_uint_32)(65535L \ + - (png_uint_32)(alpha)) + (png_uint_32)32768L); \ + (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); } + +#else /* Standard method using integer division */ + +# define png_composite(composite, fg, alpha, bg) \ + (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ + (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ + (png_uint_16)127) / 255) + +# define png_composite_16(composite, fg, alpha, bg) \ + (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \ + (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) + \ + (png_uint_32)32767) / (png_uint_32)65535L) +#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ + +#ifdef PNG_USE_READ_MACROS +/* Inline macros to do direct reads of bytes from the input buffer. + * The png_get_int_32() routine assumes we are using two's complement + * format for negative values, which is almost certainly true. + */ +# define png_get_uint_32(buf) \ + (((png_uint_32)(*(buf)) << 24) + \ + ((png_uint_32)(*((buf) + 1)) << 16) + \ + ((png_uint_32)(*((buf) + 2)) << 8) + \ + ((png_uint_32)(*((buf) + 3)))) +# define png_get_uint_16(buf) \ + (((png_uint_32)(*(buf)) << 8) + \ + ((png_uint_32)(*((buf) + 1)))) +# define png_get_int_32(buf) \ + ((png_int_32)((*(buf) & 0x80) \ + ? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffff)+1)) \ + : (png_int_32)png_get_uint_32(buf))) +#else +PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf)); +PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf)); +#ifdef PNG_GET_INT_32_SUPPORTED +PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf)); +#endif +#endif +PNG_EXPORT(png_uint_32,png_get_uint_31) + PNGARG((png_structp png_ptr, png_bytep buf)); +/* No png_get_int_16 -- may be added if there's a real need for it. */ + +/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */ +PNG_EXPORT(void,png_save_uint_32) + PNGARG((png_bytep buf, png_uint_32 i)); +PNG_EXPORT(void,png_save_int_32) + PNGARG((png_bytep buf, png_int_32 i)); + +/* Place a 16-bit number into a buffer in PNG byte order. + * The parameter is declared unsigned int, not png_uint_16, + * just to avoid potential problems on pre-ANSI C compilers. + */ +PNG_EXPORT(void,png_save_uint_16) + PNGARG((png_bytep buf, unsigned int i)); +/* No png_save_int_16 -- may be added if there's a real need for it. */ + +/* ************************************************************************* */ + +/* Various modes of operation. Note that after an init, mode is set to + * zero automatically when the structure is created. + */ +#define PNG_HAVE_IHDR 0x01 +#define PNG_HAVE_PLTE 0x02 +#define PNG_HAVE_IDAT 0x04 +#define PNG_AFTER_IDAT 0x08 /* Have complete zlib datastream */ +#define PNG_HAVE_IEND 0x10 +#define PNG_HAVE_gAMA 0x20 +#define PNG_HAVE_cHRM 0x40 + +#ifdef __cplusplus +} +#endif + +#endif /* PNG_VERSION_INFO_ONLY */ +/* Do not put anything past this line */ +#endif /* PNG_H */ diff --git a/contrib/menuetlibc/openjpeg/libs/png/pngconf.h b/contrib/menuetlibc/openjpeg/libs/png/pngconf.h new file mode 100755 index 0000000000..41b13e9fb6 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libs/png/pngconf.h @@ -0,0 +1,1540 @@ + +/* pngconf.h - machine configurable file for libpng + * + * libpng version 1.4.4 - September 23, 2010 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2010 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This code is released under the libpng license. + * For conditions of distribution and use, see the disclaimer + * and license in png.h + * + */ + +/* Any machine specific code is near the front of this file, so if you + * are configuring libpng for a machine, you may want to read the section + * starting here down to where it starts to typedef png_color, png_text, + * and png_info. + */ + +#ifndef PNGCONF_H +#define PNGCONF_H + +#ifndef PNG_NO_LIMITS_H +# include +#endif + +/* Added at libpng-1.2.9 */ + +/* config.h is created by and PNG_CONFIGURE_LIBPNG is set by the "configure" + * script. + */ +#ifdef PNG_CONFIGURE_LIBPNG +# ifdef HAVE_CONFIG_H +# include "config.h" +# endif +#endif + +/* + * Added at libpng-1.2.8 + * + * PNG_USER_CONFIG has to be defined on the compiler command line. This + * includes the resource compiler for Windows DLL configurations. + */ +#ifdef PNG_USER_CONFIG +# include "pngusr.h" +# ifndef PNG_USER_PRIVATEBUILD +# define PNG_USER_PRIVATEBUILD +# endif +#endif + +/* + * If you create a private DLL you should define in "pngusr.h" the following: + * #define PNG_USER_PRIVATEBUILD + * e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons." + * #define PNG_USER_DLLFNAME_POSTFIX + * e.g. // private DLL "libpng14gx.dll" + * #define PNG_USER_DLLFNAME_POSTFIX "gx" + * + * The following macros are also at your disposal if you want to complete the + * DLL VERSIONINFO structure. + * - PNG_USER_VERSIONINFO_COMMENTS + * - PNG_USER_VERSIONINFO_COMPANYNAME + * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS + */ + +#ifdef __STDC__ +# ifdef SPECIALBUILD +# pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\ + are now LIBPNG reserved macros. Use PNG_USER_PRIVATEBUILD instead.") +# endif + +# ifdef PRIVATEBUILD +# pragma message("PRIVATEBUILD is deprecated.\ + Use PNG_USER_PRIVATEBUILD instead.") +# define PNG_USER_PRIVATEBUILD PRIVATEBUILD +# endif +#endif /* __STDC__ */ + +/* End of material added to libpng-1.2.8 */ + +#ifndef PNG_VERSION_INFO_ONLY + +/* This is the size of the compression buffer, and thus the size of + * an IDAT chunk. Make this whatever size you feel is best for your + * machine. One of these will be allocated per png_struct. When this + * is full, it writes the data to the disk, and does some other + * calculations. Making this an extremely small size will slow + * the library down, but you may want to experiment to determine + * where it becomes significant, if you are concerned with memory + * usage. Note that zlib allocates at least 32Kb also. For readers, + * this describes the size of the buffer available to read the data in. + * Unless this gets smaller than the size of a row (compressed), + * it should not make much difference how big this is. + */ + +#ifndef PNG_ZBUF_SIZE +# define PNG_ZBUF_SIZE 8192 +#endif + +/* Enable if you want a write-only libpng */ + +#ifndef PNG_NO_READ_SUPPORTED +# define PNG_READ_SUPPORTED +#endif + +/* Enable if you want a read-only libpng */ + +#ifndef PNG_NO_WRITE_SUPPORTED +# define PNG_WRITE_SUPPORTED +#endif + +/* Enabled in 1.4.0. */ +#ifdef PNG_ALLOW_BENIGN_ERRORS +# define png_benign_error png_warning +# define png_chunk_benign_error png_chunk_warning +#else +# ifndef PNG_BENIGN_ERRORS_SUPPORTED +# define png_benign_error png_error +# define png_chunk_benign_error png_chunk_error +# endif +#endif + +/* Added at libpng version 1.4.0 */ +#if !defined(PNG_NO_WARNINGS) && !defined(PNG_WARNINGS_SUPPORTED) +# define PNG_WARNINGS_SUPPORTED +#endif + +/* Added at libpng version 1.4.0 */ +#if !defined(PNG_NO_ERROR_TEXT) && !defined(PNG_ERROR_TEXT_SUPPORTED) +# define PNG_ERROR_TEXT_SUPPORTED +#endif + +/* Added at libpng version 1.4.0 */ +#if !defined(PNG_NO_CHECK_cHRM) && !defined(PNG_CHECK_cHRM_SUPPORTED) +# define PNG_CHECK_cHRM_SUPPORTED +#endif + +/* Added at libpng version 1.4.0 */ +#if !defined(PNG_NO_ALIGNED_MEMORY) && !defined(PNG_ALIGNED_MEMORY_SUPPORTED) +# define PNG_ALIGNED_MEMORY_SUPPORTED +#endif + +/* Enabled by default in 1.2.0. You can disable this if you don't need to + support PNGs that are embedded in MNG datastreams */ +#ifndef PNG_NO_MNG_FEATURES +# ifndef PNG_MNG_FEATURES_SUPPORTED +# define PNG_MNG_FEATURES_SUPPORTED +# endif +#endif + +/* Added at libpng version 1.4.0 */ +#ifndef PNG_NO_FLOATING_POINT_SUPPORTED +# ifndef PNG_FLOATING_POINT_SUPPORTED +# define PNG_FLOATING_POINT_SUPPORTED +# endif +#endif + +/* Added at libpng-1.4.0beta49 for testing (this test is no longer used + in libpng and png_calloc() is always present) + */ +#define PNG_CALLOC_SUPPORTED + +/* If you are running on a machine where you cannot allocate more + * than 64K of memory at once, uncomment this. While libpng will not + * normally need that much memory in a chunk (unless you load up a very + * large file), zlib needs to know how big of a chunk it can use, and + * libpng thus makes sure to check any memory allocation to verify it + * will fit into memory. +#define PNG_MAX_MALLOC_64K + */ +#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K) +# define PNG_MAX_MALLOC_64K +#endif + +/* Special munging to support doing things the 'cygwin' way: + * 'Normal' png-on-win32 defines/defaults: + * PNG_BUILD_DLL -- building dll + * PNG_USE_DLL -- building an application, linking to dll + * (no define) -- building static library, or building an + * application and linking to the static lib + * 'Cygwin' defines/defaults: + * PNG_BUILD_DLL -- (ignored) building the dll + * (no define) -- (ignored) building an application, linking to the dll + * PNG_STATIC -- (ignored) building the static lib, or building an + * application that links to the static lib. + * ALL_STATIC -- (ignored) building various static libs, or building an + * application that links to the static libs. + * Thus, + * a cygwin user should define either PNG_BUILD_DLL or PNG_STATIC, and + * this bit of #ifdefs will define the 'correct' config variables based on + * that. If a cygwin user *wants* to define 'PNG_USE_DLL' that's okay, but + * unnecessary. + * + * Also, the precedence order is: + * ALL_STATIC (since we can't #undef something outside our namespace) + * PNG_BUILD_DLL + * PNG_STATIC + * (nothing) == PNG_USE_DLL + * + * CYGWIN (2002-01-20): The preceding is now obsolete. With the advent + * of auto-import in binutils, we no longer need to worry about + * __declspec(dllexport) / __declspec(dllimport) and friends. Therefore, + * we don't need to worry about PNG_STATIC or ALL_STATIC when it comes + * to __declspec() stuff. However, we DO need to worry about + * PNG_BUILD_DLL and PNG_STATIC because those change some defaults + * such as CONSOLE_IO. + */ +#ifdef __CYGWIN__ +# ifdef ALL_STATIC +# ifdef PNG_BUILD_DLL +# undef PNG_BUILD_DLL +# endif +# ifdef PNG_USE_DLL +# undef PNG_USE_DLL +# endif +# ifdef PNG_DLL +# undef PNG_DLL +# endif +# ifndef PNG_STATIC +# define PNG_STATIC +# endif +# else +# ifdef PNG_BUILD_DLL +# ifdef PNG_STATIC +# undef PNG_STATIC +# endif +# ifdef PNG_USE_DLL +# undef PNG_USE_DLL +# endif +# ifndef PNG_DLL +# define PNG_DLL +# endif +# else +# ifdef PNG_STATIC +# ifdef PNG_USE_DLL +# undef PNG_USE_DLL +# endif +# ifdef PNG_DLL +# undef PNG_DLL +# endif +# else +# ifndef PNG_USE_DLL +# define PNG_USE_DLL +# endif +# ifndef PNG_DLL +# define PNG_DLL +# endif +# endif +# endif +# endif +#endif + +/* This protects us against compilers that run on a windowing system + * and thus don't have or would rather us not use the stdio types: + * stdin, stdout, and stderr. The only one currently used is stderr + * in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will + * prevent these from being compiled and used. #defining PNG_NO_STDIO + * will also prevent these, plus will prevent the entire set of stdio + * macros and functions (FILE *, printf, etc.) from being compiled and used, + * unless (PNG_DEBUG > 0) has been #defined. + * + * #define PNG_NO_CONSOLE_IO + * #define PNG_NO_STDIO + */ + +#ifdef _WIN32_WCE +# define PNG_NO_CONSOLE_IO +# define PNG_NO_STDIO +# define PNG_NO_TIME_RFC1123 +# ifdef PNG_DEBUG +# undef PNG_DEBUG +# endif +#endif + +#if !defined(PNG_NO_STDIO) && !defined(PNG_STDIO_SUPPORTED) +# define PNG_STDIO_SUPPORTED +#endif + +#ifdef PNG_BUILD_DLL +# if !defined(PNG_CONSOLE_IO_SUPPORTED) && !defined(PNG_NO_CONSOLE_IO) +# define PNG_NO_CONSOLE_IO +# endif +#endif + +# ifdef PNG_NO_STDIO +# ifndef PNG_NO_CONSOLE_IO +# define PNG_NO_CONSOLE_IO +# endif +# ifdef PNG_DEBUG +# if (PNG_DEBUG > 0) +# include +# endif +# endif +# else +# include +# endif + +#if !(defined PNG_NO_CONSOLE_IO) && !defined(PNG_CONSOLE_IO_SUPPORTED) +# define PNG_CONSOLE_IO_SUPPORTED +#endif + +/* This macro protects us against machines that don't have function + * prototypes (ie K&R style headers). If your compiler does not handle + * function prototypes, define this macro and use the included ansi2knr. + * I've always been able to use _NO_PROTO as the indicator, but you may + * need to drag the empty declaration out in front of here, or change the + * ifdef to suit your own needs. + */ +#ifndef PNGARG + +#ifdef OF /* zlib prototype munger */ +# define PNGARG(arglist) OF(arglist) +#else + +#ifdef _NO_PROTO +# define PNGARG(arglist) () +#else +# define PNGARG(arglist) arglist +#endif /* _NO_PROTO */ + +#endif /* OF */ + +#endif /* PNGARG */ + +/* Try to determine if we are compiling on a Mac. Note that testing for + * just __MWERKS__ is not good enough, because the Codewarrior is now used + * on non-Mac platforms. + */ +#ifndef MACOS +# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ + defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) +# define MACOS +# endif +#endif + +/* Enough people need this for various reasons to include it here */ +#if !defined(MACOS) && !defined(RISCOS) +# include +#endif + +/* PNG_SETJMP_NOT_SUPPORTED and PNG_NO_SETJMP_SUPPORTED are deprecated. */ +#if !defined(PNG_NO_SETJMP) && \ + !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED) +# define PNG_SETJMP_SUPPORTED +#endif + +#ifdef PNG_SETJMP_SUPPORTED +/* This is an attempt to force a single setjmp behaviour on Linux. If + * the X config stuff didn't define _BSD_SOURCE we wouldn't need this. + * + * You can bypass this test if you know that your application uses exactly + * the same setjmp.h that was included when libpng was built. Only define + * PNG_SKIP_SETJMP_CHECK while building your application, prior to the + * application's '#include "png.h"'. Don't define PNG_SKIP_SETJMP_CHECK + * while building a separate libpng library for general use. + */ + +# ifndef PNG_SKIP_SETJMP_CHECK +# ifdef __linux__ +# ifdef _BSD_SOURCE +# define PNG_SAVE_BSD_SOURCE +# undef _BSD_SOURCE +# endif +# ifdef _SETJMP_H + /* If you encounter a compiler error here, see the explanation + * near the end of INSTALL. + */ + __pngconf.h__ in libpng already includes setjmp.h; + __dont__ include it again.; +# endif +# endif /* __linux__ */ +# endif /* PNG_SKIP_SETJMP_CHECK */ + + /* Include setjmp.h for error handling */ +# include + +# ifdef __linux__ +# ifdef PNG_SAVE_BSD_SOURCE +# ifdef _BSD_SOURCE +# undef _BSD_SOURCE +# endif +# define _BSD_SOURCE +# undef PNG_SAVE_BSD_SOURCE +# endif +# endif /* __linux__ */ +#endif /* PNG_SETJMP_SUPPORTED */ + +#ifdef BSD +# include +#else +# include +#endif + +/* Other defines for things like memory and the like can go here. */ + +/* This controls how fine the quantizing gets. As this allocates + * a largish chunk of memory (32K), those who are not as concerned + * with quantizing quality can decrease some or all of these. + */ + +/* Prior to libpng-1.4.2, these were PNG_DITHER_*_BITS + * These migration aids will be removed from libpng-1.5.0. + */ +#ifdef PNG_DITHER_RED_BITS +# define PNG_QUANTIZE_RED_BITS PNG_DITHER_RED_BITS +#endif +#ifdef PNG_DITHER_GREEN_BITS +# define PNG_QUANTIZE_GREEN_BITS PNG_DITHER_GREEN_BITS +#endif +#ifdef PNG_DITHER_BLUE_BITS +# define PNG_QUANTIZE_BLUE_BITS PNG_DITHER_BLUE_BITS +#endif + +#ifndef PNG_QUANTIZE_RED_BITS +# define PNG_QUANTIZE_RED_BITS 5 +#endif +#ifndef PNG_QUANTIZE_GREEN_BITS +# define PNG_QUANTIZE_GREEN_BITS 5 +#endif +#ifndef PNG_QUANTIZE_BLUE_BITS +# define PNG_QUANTIZE_BLUE_BITS 5 +#endif + +/* This controls how fine the gamma correction becomes when you + * are only interested in 8 bits anyway. Increasing this value + * results in more memory being used, and more pow() functions + * being called to fill in the gamma tables. Don't set this value + * less then 8, and even that may not work (I haven't tested it). + */ + +#ifndef PNG_MAX_GAMMA_8 +# define PNG_MAX_GAMMA_8 11 +#endif + +/* This controls how much a difference in gamma we can tolerate before + * we actually start doing gamma conversion. + */ +#ifndef PNG_GAMMA_THRESHOLD +# define PNG_GAMMA_THRESHOLD 0.05 +#endif + +/* The following uses const char * instead of char * for error + * and warning message functions, so some compilers won't complain. + * If you do not want to use const, define PNG_NO_CONST. + */ + +#ifndef PNG_CONST +# ifndef PNG_NO_CONST +# define PNG_CONST const +# else +# define PNG_CONST +# endif +#endif + +/* The following defines give you the ability to remove code from the + * library that you will not be using. I wish I could figure out how to + * automate this, but I can't do that without making it seriously hard + * on the users. So if you are not using an ability, change the #define + * to an #undef, or pass in PNG_NO_feature and that part of the library + * will not be compiled. + + * If your linker can't find a function, you may want to make sure the + * ability is defined here. Some of these depend upon some others being + * defined. I haven't figured out all the interactions here, so you may + * have to experiment awhile to get everything to compile. If you are + * creating or using a shared library, you probably shouldn't touch this, + * as it will affect the size of the structures, and this will cause bad + * things to happen if the library and/or application ever change. + */ + +/* Any features you will not be using can be undef'ed here */ + +/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user + * to turn it off with PNG_NO_READ|WRITE_TRANSFORMS on the compile line, + * then pick and choose which ones to define without having to edit this + * file. It is safe to use the PNG_NO_READ|WRITE_TRANSFORMS + * if you only want to have a png-compliant reader/writer but don't need + * any of the extra transformations. This saves about 80 kbytes in a + * typical installation of the library. (PNG_NO_* form added in version + * 1.0.1c, for consistency; PNG_*_TRANSFORMS_NOT_SUPPORTED deprecated in + * 1.4.0) + */ + +/* Ignore attempt to turn off both floating and fixed point support */ +#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \ + !defined(PNG_NO_FIXED_POINT_SUPPORTED) +# define PNG_FIXED_POINT_SUPPORTED +#endif + +#ifdef PNG_READ_SUPPORTED + +/* PNG_READ_TRANSFORMS_NOT_SUPPORTED is deprecated. */ +#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \ + !defined(PNG_NO_READ_TRANSFORMS) +# define PNG_READ_TRANSFORMS_SUPPORTED +#endif + +#ifdef PNG_READ_TRANSFORMS_SUPPORTED +# ifndef PNG_NO_READ_EXPAND +# define PNG_READ_EXPAND_SUPPORTED +# endif +# ifndef PNG_NO_READ_SHIFT +# define PNG_READ_SHIFT_SUPPORTED +# endif +# ifndef PNG_NO_READ_PACK +# define PNG_READ_PACK_SUPPORTED +# endif +# ifndef PNG_NO_READ_BGR +# define PNG_READ_BGR_SUPPORTED +# endif +# ifndef PNG_NO_READ_SWAP +# define PNG_READ_SWAP_SUPPORTED +# endif +# ifndef PNG_NO_READ_PACKSWAP +# define PNG_READ_PACKSWAP_SUPPORTED +# endif +# ifndef PNG_NO_READ_INVERT +# define PNG_READ_INVERT_SUPPORTED +# endif +# ifndef PNG_NO_READ_QUANTIZE + /* Prior to libpng-1.4.0 this was PNG_READ_DITHER_SUPPORTED */ +# ifndef PNG_NO_READ_DITHER /* This migration aid will be removed */ +# define PNG_READ_QUANTIZE_SUPPORTED +# endif +# endif +# ifndef PNG_NO_READ_BACKGROUND +# define PNG_READ_BACKGROUND_SUPPORTED +# endif +# ifndef PNG_NO_READ_16_TO_8 +# define PNG_READ_16_TO_8_SUPPORTED +# endif +# ifndef PNG_NO_READ_FILLER +# define PNG_READ_FILLER_SUPPORTED +# endif +# ifndef PNG_NO_READ_GAMMA +# define PNG_READ_GAMMA_SUPPORTED +# endif +# ifndef PNG_NO_READ_GRAY_TO_RGB +# define PNG_READ_GRAY_TO_RGB_SUPPORTED +# endif +# ifndef PNG_NO_READ_SWAP_ALPHA +# define PNG_READ_SWAP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_INVERT_ALPHA +# define PNG_READ_INVERT_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_STRIP_ALPHA +# define PNG_READ_STRIP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_USER_TRANSFORM +# define PNG_READ_USER_TRANSFORM_SUPPORTED +# endif +# ifndef PNG_NO_READ_RGB_TO_GRAY +# define PNG_READ_RGB_TO_GRAY_SUPPORTED +# endif +#endif /* PNG_READ_TRANSFORMS_SUPPORTED */ + +/* PNG_PROGRESSIVE_READ_NOT_SUPPORTED is deprecated. */ +#if !defined(PNG_NO_PROGRESSIVE_READ) && \ + !defined(PNG_PROGRESSIVE_READ_NOT_SUPPORTED) /* if you don't do progressive */ +# define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */ +#endif /* about interlacing capability! You'll */ + /* still have interlacing unless you change the following define: */ + +#define PNG_READ_INTERLACING_SUPPORTED /* required for PNG-compliant decoders */ + +/* PNG_NO_SEQUENTIAL_READ_SUPPORTED is deprecated. */ +#if !defined(PNG_NO_SEQUENTIAL_READ) && \ + !defined(PNG_SEQUENTIAL_READ_SUPPORTED) && \ + !defined(PNG_NO_SEQUENTIAL_READ_SUPPORTED) +# define PNG_SEQUENTIAL_READ_SUPPORTED +#endif + +#ifndef PNG_NO_READ_COMPOSITE_NODIV +# ifndef PNG_NO_READ_COMPOSITED_NODIV /* libpng-1.0.x misspelling */ +# define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel, SGI */ +# endif +#endif + +#if !defined(PNG_NO_GET_INT_32) || defined(PNG_READ_oFFS_SUPPORTED) || \ + defined(PNG_READ_pCAL_SUPPORTED) +# ifndef PNG_GET_INT_32_SUPPORTED +# define PNG_GET_INT_32_SUPPORTED +# endif +#endif + +#endif /* PNG_READ_SUPPORTED */ + +#ifdef PNG_WRITE_SUPPORTED + +/* PNG_WRITE_TRANSFORMS_NOT_SUPPORTED is deprecated. */ +#if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \ + !defined(PNG_NO_WRITE_TRANSFORMS) +# define PNG_WRITE_TRANSFORMS_SUPPORTED +#endif + +#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED +# ifndef PNG_NO_WRITE_SHIFT +# define PNG_WRITE_SHIFT_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_PACK +# define PNG_WRITE_PACK_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_BGR +# define PNG_WRITE_BGR_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_SWAP +# define PNG_WRITE_SWAP_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_PACKSWAP +# define PNG_WRITE_PACKSWAP_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_INVERT +# define PNG_WRITE_INVERT_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_FILLER +# define PNG_WRITE_FILLER_SUPPORTED /* same as WRITE_STRIP_ALPHA */ +# endif +# ifndef PNG_NO_WRITE_SWAP_ALPHA +# define PNG_WRITE_SWAP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_INVERT_ALPHA +# define PNG_WRITE_INVERT_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_USER_TRANSFORM +# define PNG_WRITE_USER_TRANSFORM_SUPPORTED +# endif +#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */ + +#if !defined(PNG_NO_WRITE_INTERLACING_SUPPORTED) && \ + !defined(PNG_WRITE_INTERLACING_SUPPORTED) + /* This is not required for PNG-compliant encoders, but can cause + * trouble if left undefined + */ +# define PNG_WRITE_INTERLACING_SUPPORTED +#endif + +#if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \ + !defined(PNG_WRITE_WEIGHTED_FILTER) && \ + defined(PNG_FLOATING_POINT_SUPPORTED) +# define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED +#endif + +#ifndef PNG_NO_WRITE_FLUSH +# define PNG_WRITE_FLUSH_SUPPORTED +#endif + +#if !defined(PNG_NO_SAVE_INT_32) || defined(PNG_WRITE_oFFS_SUPPORTED) || \ + defined(PNG_WRITE_pCAL_SUPPORTED) +# ifndef PNG_SAVE_INT_32_SUPPORTED +# define PNG_SAVE_INT_32_SUPPORTED +# endif +#endif + +#endif /* PNG_WRITE_SUPPORTED */ + +#define PNG_NO_ERROR_NUMBERS + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +# ifndef PNG_NO_USER_TRANSFORM_PTR +# define PNG_USER_TRANSFORM_PTR_SUPPORTED +# endif +#endif + +#if defined(PNG_STDIO_SUPPORTED) && !defined(PNG_TIME_RFC1123_SUPPORTED) +# define PNG_TIME_RFC1123_SUPPORTED +#endif + +/* This adds extra functions in pngget.c for accessing data from the + * info pointer (added in version 0.99) + * png_get_image_width() + * png_get_image_height() + * png_get_bit_depth() + * png_get_color_type() + * png_get_compression_type() + * png_get_filter_type() + * png_get_interlace_type() + * png_get_pixel_aspect_ratio() + * png_get_pixels_per_meter() + * png_get_x_offset_pixels() + * png_get_y_offset_pixels() + * png_get_x_offset_microns() + * png_get_y_offset_microns() + */ +#if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED) +# define PNG_EASY_ACCESS_SUPPORTED +#endif + +/* Added at libpng-1.2.0 */ +#if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED) +# define PNG_USER_MEM_SUPPORTED +#endif + +/* Added at libpng-1.2.6 */ +#ifndef PNG_NO_SET_USER_LIMITS +# ifndef PNG_SET_USER_LIMITS_SUPPORTED +# define PNG_SET_USER_LIMITS_SUPPORTED +# endif + /* Feature added at libpng-1.4.0, this flag added at 1.4.1 */ +# ifndef PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED +# define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED +# endif + /* Feature added at libpng-1.4.1, this flag added at 1.4.1 */ +# ifndef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED +# define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED +# endif +#endif + +/* Added at libpng-1.2.43 */ +#ifndef PNG_USER_LIMITS_SUPPORTED +# ifndef PNG_NO_USER_LIMITS +# define PNG_USER_LIMITS_SUPPORTED +# endif +#endif + +/* Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGs no matter + * how large, set these two limits to 0x7fffffffL + */ +#ifndef PNG_USER_WIDTH_MAX +# define PNG_USER_WIDTH_MAX 1000000L +#endif +#ifndef PNG_USER_HEIGHT_MAX +# define PNG_USER_HEIGHT_MAX 1000000L +#endif + +/* Added at libpng-1.2.43. To accept all valid PNGs no matter + * how large, set these two limits to 0. + */ +#ifndef PNG_USER_CHUNK_CACHE_MAX +# define PNG_USER_CHUNK_CACHE_MAX 0 +#endif + +/* Added at libpng-1.2.43 */ +#ifndef PNG_USER_CHUNK_MALLOC_MAX +# define PNG_USER_CHUNK_MALLOC_MAX 0 +#endif + +/* Added at libpng-1.4.0 */ +#if !defined(PNG_NO_IO_STATE) && !defined(PNG_IO_STATE_SUPPORTED) +# define PNG_IO_STATE_SUPPORTED +#endif + +#ifndef PNG_LITERAL_SHARP +# define PNG_LITERAL_SHARP 0x23 +#endif +#ifndef PNG_LITERAL_LEFT_SQUARE_BRACKET +# define PNG_LITERAL_LEFT_SQUARE_BRACKET 0x5b +#endif +#ifndef PNG_LITERAL_RIGHT_SQUARE_BRACKET +# define PNG_LITERAL_RIGHT_SQUARE_BRACKET 0x5d +#endif +#ifndef PNG_STRING_NEWLINE +#define PNG_STRING_NEWLINE "\n" +#endif + +/* These are currently experimental features, define them if you want */ + +/* Very little testing */ +/* +#ifdef PNG_READ_SUPPORTED +# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED +# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED +# endif +#endif +*/ + +/* This is only for PowerPC big-endian and 680x0 systems */ +/* some testing */ +/* +#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED +# define PNG_READ_BIG_ENDIAN_SUPPORTED +#endif +*/ + +#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS) +# define PNG_USE_READ_MACROS +#endif + +/* Buggy compilers (e.g., gcc 2.7.2.2) need PNG_NO_POINTER_INDEXING */ + +#if !defined(PNG_NO_POINTER_INDEXING) && \ + !defined(PNG_POINTER_INDEXING_SUPPORTED) +# define PNG_POINTER_INDEXING_SUPPORTED +#endif + + +/* Any chunks you are not interested in, you can undef here. The + * ones that allocate memory may be expecially important (hIST, + * tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info + * a bit smaller. + */ + +/* The size of the png_text structure changed in libpng-1.0.6 when + * iTXt support was added. iTXt support was turned off by default through + * libpng-1.2.x, to support old apps that malloc the png_text structure + * instead of calling png_set_text() and letting libpng malloc it. It + * was turned on by default in libpng-1.4.0. + */ + +/* PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated. */ +#if defined(PNG_READ_SUPPORTED) && \ + !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ + !defined(PNG_NO_READ_ANCILLARY_CHUNKS) +# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED +#endif + +/* PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated. */ +#if defined(PNG_WRITE_SUPPORTED) && \ + !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ + !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS) +# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED +#endif + +#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED + +#ifdef PNG_NO_READ_TEXT +# define PNG_NO_READ_iTXt +# define PNG_NO_READ_tEXt +# define PNG_NO_READ_zTXt +#endif + +#ifndef PNG_NO_READ_bKGD +# define PNG_READ_bKGD_SUPPORTED +# define PNG_bKGD_SUPPORTED +#endif +#ifndef PNG_NO_READ_cHRM +# define PNG_READ_cHRM_SUPPORTED +# define PNG_cHRM_SUPPORTED +#endif +#ifndef PNG_NO_READ_gAMA +# define PNG_READ_gAMA_SUPPORTED +# define PNG_gAMA_SUPPORTED +#endif +#ifndef PNG_NO_READ_hIST +# define PNG_READ_hIST_SUPPORTED +# define PNG_hIST_SUPPORTED +#endif +#ifndef PNG_NO_READ_iCCP +# define PNG_READ_iCCP_SUPPORTED +# define PNG_iCCP_SUPPORTED +#endif +#ifndef PNG_NO_READ_iTXt +# ifndef PNG_READ_iTXt_SUPPORTED +# define PNG_READ_iTXt_SUPPORTED +# endif +# ifndef PNG_iTXt_SUPPORTED +# define PNG_iTXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_READ_oFFs +# define PNG_READ_oFFs_SUPPORTED +# define PNG_oFFs_SUPPORTED +#endif +#ifndef PNG_NO_READ_pCAL +# define PNG_READ_pCAL_SUPPORTED +# define PNG_pCAL_SUPPORTED +#endif +#ifndef PNG_NO_READ_sCAL +# define PNG_READ_sCAL_SUPPORTED +# define PNG_sCAL_SUPPORTED +#endif +#ifndef PNG_NO_READ_pHYs +# define PNG_READ_pHYs_SUPPORTED +# define PNG_pHYs_SUPPORTED +#endif +#ifndef PNG_NO_READ_sBIT +# define PNG_READ_sBIT_SUPPORTED +# define PNG_sBIT_SUPPORTED +#endif +#ifndef PNG_NO_READ_sPLT +# define PNG_READ_sPLT_SUPPORTED +# define PNG_sPLT_SUPPORTED +#endif +#ifndef PNG_NO_READ_sRGB +# define PNG_READ_sRGB_SUPPORTED +# define PNG_sRGB_SUPPORTED +#endif +#ifndef PNG_NO_READ_tEXt +# define PNG_READ_tEXt_SUPPORTED +# define PNG_tEXt_SUPPORTED +#endif +#ifndef PNG_NO_READ_tIME +# define PNG_READ_tIME_SUPPORTED +# define PNG_tIME_SUPPORTED +#endif +#ifndef PNG_NO_READ_tRNS +# define PNG_READ_tRNS_SUPPORTED +# define PNG_tRNS_SUPPORTED +#endif +#ifndef PNG_NO_READ_zTXt +# define PNG_READ_zTXt_SUPPORTED +# define PNG_zTXt_SUPPORTED +#endif +#ifndef PNG_NO_READ_OPT_PLTE +# define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */ +#endif /* optional PLTE chunk in RGB and RGBA images */ +#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \ + defined(PNG_READ_zTXt_SUPPORTED) +# define PNG_READ_TEXT_SUPPORTED +# define PNG_TEXT_SUPPORTED +#endif + +#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */ + +#ifndef PNG_NO_READ_UNKNOWN_CHUNKS +# ifndef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED +# endif +# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_UNKNOWN_CHUNKS_SUPPORTED +# endif +# ifndef PNG_READ_USER_CHUNKS_SUPPORTED +# define PNG_READ_USER_CHUNKS_SUPPORTED +# endif +#endif +#ifndef PNG_NO_READ_USER_CHUNKS +# ifndef PNG_READ_USER_CHUNKS_SUPPORTED +# define PNG_READ_USER_CHUNKS_SUPPORTED +# endif +# ifndef PNG_USER_CHUNKS_SUPPORTED +# define PNG_USER_CHUNKS_SUPPORTED +# endif +#endif +#ifndef PNG_NO_HANDLE_AS_UNKNOWN +# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# endif +#endif + +#ifdef PNG_WRITE_SUPPORTED +#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED + +#ifdef PNG_NO_WRITE_TEXT +# define PNG_NO_WRITE_iTXt +# define PNG_NO_WRITE_tEXt +# define PNG_NO_WRITE_zTXt +#endif +#ifndef PNG_NO_WRITE_bKGD +# define PNG_WRITE_bKGD_SUPPORTED +# ifndef PNG_bKGD_SUPPORTED +# define PNG_bKGD_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_cHRM +# define PNG_WRITE_cHRM_SUPPORTED +# ifndef PNG_cHRM_SUPPORTED +# define PNG_cHRM_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_gAMA +# define PNG_WRITE_gAMA_SUPPORTED +# ifndef PNG_gAMA_SUPPORTED +# define PNG_gAMA_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_hIST +# define PNG_WRITE_hIST_SUPPORTED +# ifndef PNG_hIST_SUPPORTED +# define PNG_hIST_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_iCCP +# define PNG_WRITE_iCCP_SUPPORTED +# ifndef PNG_iCCP_SUPPORTED +# define PNG_iCCP_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_iTXt +# ifndef PNG_WRITE_iTXt_SUPPORTED +# define PNG_WRITE_iTXt_SUPPORTED +# endif +# ifndef PNG_iTXt_SUPPORTED +# define PNG_iTXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_oFFs +# define PNG_WRITE_oFFs_SUPPORTED +# ifndef PNG_oFFs_SUPPORTED +# define PNG_oFFs_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_pCAL +# define PNG_WRITE_pCAL_SUPPORTED +# ifndef PNG_pCAL_SUPPORTED +# define PNG_pCAL_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sCAL +# define PNG_WRITE_sCAL_SUPPORTED +# ifndef PNG_sCAL_SUPPORTED +# define PNG_sCAL_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_pHYs +# define PNG_WRITE_pHYs_SUPPORTED +# ifndef PNG_pHYs_SUPPORTED +# define PNG_pHYs_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sBIT +# define PNG_WRITE_sBIT_SUPPORTED +# ifndef PNG_sBIT_SUPPORTED +# define PNG_sBIT_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sPLT +# define PNG_WRITE_sPLT_SUPPORTED +# ifndef PNG_sPLT_SUPPORTED +# define PNG_sPLT_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sRGB +# define PNG_WRITE_sRGB_SUPPORTED +# ifndef PNG_sRGB_SUPPORTED +# define PNG_sRGB_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tEXt +# define PNG_WRITE_tEXt_SUPPORTED +# ifndef PNG_tEXt_SUPPORTED +# define PNG_tEXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tIME +# define PNG_WRITE_tIME_SUPPORTED +# ifndef PNG_tIME_SUPPORTED +# define PNG_tIME_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tRNS +# define PNG_WRITE_tRNS_SUPPORTED +# ifndef PNG_tRNS_SUPPORTED +# define PNG_tRNS_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_zTXt +# define PNG_WRITE_zTXt_SUPPORTED +# ifndef PNG_zTXt_SUPPORTED +# define PNG_zTXt_SUPPORTED +# endif +#endif +#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \ + defined(PNG_WRITE_zTXt_SUPPORTED) +# define PNG_WRITE_TEXT_SUPPORTED +# ifndef PNG_TEXT_SUPPORTED +# define PNG_TEXT_SUPPORTED +# endif +#endif + +#ifdef PNG_WRITE_tIME_SUPPORTED +# ifndef PNG_NO_CONVERT_tIME +# ifndef _WIN32_WCE +/* The "tm" structure is not supported on WindowsCE */ +# ifndef PNG_CONVERT_tIME_SUPPORTED +# define PNG_CONVERT_tIME_SUPPORTED +# endif +# endif +# endif +#endif + +#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */ + +#ifndef PNG_NO_WRITE_FILTER +# ifndef PNG_WRITE_FILTER_SUPPORTED +# define PNG_WRITE_FILTER_SUPPORTED +# endif +#endif + +#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS +# define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED +# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_UNKNOWN_CHUNKS_SUPPORTED +# endif +#endif +#ifndef PNG_NO_HANDLE_AS_UNKNOWN +# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# endif +#endif +#endif /* PNG_WRITE_SUPPORTED */ + +/* Turn this off to disable png_read_png() and + * png_write_png() and leave the row_pointers member + * out of the info structure. + */ +#ifndef PNG_NO_INFO_IMAGE +# define PNG_INFO_IMAGE_SUPPORTED +#endif + +/* Need the time information for converting tIME chunks */ +#ifdef PNG_CONVERT_tIME_SUPPORTED + /* "time.h" functions are not supported on WindowsCE */ +# include +#endif + +/* Some typedefs to get us started. These should be safe on most of the + * common platforms. The typedefs should be at least as large as the + * numbers suggest (a png_uint_32 must be at least 32 bits long), but they + * don't have to be exactly that size. Some compilers dislike passing + * unsigned shorts as function parameters, so you may be better off using + * unsigned int for png_uint_16. + */ + +#if defined(INT_MAX) && (INT_MAX > 0x7ffffffeL) +typedef unsigned int png_uint_32; +typedef int png_int_32; +#else +typedef unsigned long png_uint_32; +typedef long png_int_32; +#endif +typedef unsigned short png_uint_16; +typedef short png_int_16; +typedef unsigned char png_byte; + +#ifdef PNG_NO_SIZE_T + typedef unsigned int png_size_t; +#else + typedef size_t png_size_t; +#endif +#define png_sizeof(x) (sizeof (x)) + +/* The following is needed for medium model support. It cannot be in the + * pngpriv.h header. Needs modification for other compilers besides + * MSC. Model independent support declares all arrays and pointers to be + * large using the far keyword. The zlib version used must also support + * model independent data. As of version zlib 1.0.4, the necessary changes + * have been made in zlib. The USE_FAR_KEYWORD define triggers other + * changes that are needed. (Tim Wegner) + */ + +/* Separate compiler dependencies (problem here is that zlib.h always + * defines FAR. (SJT) + */ +#ifdef __BORLANDC__ +# if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__) +# define LDATA 1 +# else +# define LDATA 0 +# endif + /* GRR: why is Cygwin in here? Cygwin is not Borland C... */ +# if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__) +# define PNG_MAX_MALLOC_64K +# if (LDATA != 1) +# ifndef FAR +# define FAR __far +# endif +# define USE_FAR_KEYWORD +# endif /* LDATA != 1 */ + /* Possibly useful for moving data out of default segment. + * Uncomment it if you want. Could also define FARDATA as + * const if your compiler supports it. (SJT) +# define FARDATA FAR + */ +# endif /* __WIN32__, __FLAT__, __CYGWIN__ */ +#endif /* __BORLANDC__ */ + + +/* Suggest testing for specific compiler first before testing for + * FAR. The Watcom compiler defines both __MEDIUM__ and M_I86MM, + * making reliance oncertain keywords suspect. (SJT) + */ + +/* MSC Medium model */ +#ifdef FAR +# ifdef M_I86MM +# define USE_FAR_KEYWORD +# define FARDATA FAR +# include +# endif +#endif + +/* SJT: default case */ +#ifndef FAR +# define FAR +#endif + +/* At this point FAR is always defined */ +#ifndef FARDATA +# define FARDATA +#endif + +/* Typedef for floating-point numbers that are converted + to fixed-point with a multiple of 100,000, e.g., int_gamma */ +typedef png_int_32 png_fixed_point; + +/* Add typedefs for pointers */ +typedef void FAR * png_voidp; +typedef png_byte FAR * png_bytep; +typedef png_uint_32 FAR * png_uint_32p; +typedef png_int_32 FAR * png_int_32p; +typedef png_uint_16 FAR * png_uint_16p; +typedef png_int_16 FAR * png_int_16p; +typedef PNG_CONST char FAR * png_const_charp; +typedef char FAR * png_charp; +typedef png_fixed_point FAR * png_fixed_point_p; + +#ifndef PNG_NO_STDIO +typedef FILE * png_FILE_p; +#endif + +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double FAR * png_doublep; +#endif + +/* Pointers to pointers; i.e. arrays */ +typedef png_byte FAR * FAR * png_bytepp; +typedef png_uint_32 FAR * FAR * png_uint_32pp; +typedef png_int_32 FAR * FAR * png_int_32pp; +typedef png_uint_16 FAR * FAR * png_uint_16pp; +typedef png_int_16 FAR * FAR * png_int_16pp; +typedef PNG_CONST char FAR * FAR * png_const_charpp; +typedef char FAR * FAR * png_charpp; +typedef png_fixed_point FAR * FAR * png_fixed_point_pp; +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double FAR * FAR * png_doublepp; +#endif + +/* Pointers to pointers to pointers; i.e., pointer to array */ +typedef char FAR * FAR * FAR * png_charppp; + +/* Define PNG_BUILD_DLL if the module being built is a Windows + * LIBPNG DLL. + * + * Define PNG_USE_DLL if you want to *link* to the Windows LIBPNG DLL. + * It is equivalent to Microsoft predefined macro _DLL that is + * automatically defined when you compile using the share + * version of the CRT (C Run-Time library) + * + * The cygwin mods make this behavior a little different: + * Define PNG_BUILD_DLL if you are building a dll for use with cygwin + * Define PNG_STATIC if you are building a static library for use with cygwin, + * -or- if you are building an application that you want to link to the + * static library. + * PNG_USE_DLL is defined by default (no user action needed) unless one of + * the other flags is defined. + */ + +#if !defined(PNG_DLL) && (defined(PNG_BUILD_DLL) || defined(PNG_USE_DLL)) +# define PNG_DLL +#endif + +/* If you define PNGAPI, e.g., with compiler option "-DPNGAPI=__stdcall", + * you may get warnings regarding the linkage of png_zalloc and png_zfree. + * Don't ignore those warnings; you must also reset the default calling + * convention in your compiler to match your PNGAPI, and you must build + * zlib and your applications the same way you build libpng. + */ + +#ifdef __CYGWIN__ +# undef PNGAPI +# define PNGAPI __cdecl +# undef PNG_IMPEXP +# define PNG_IMPEXP +#endif + +#ifdef __WATCOMC__ +# ifndef PNGAPI +# define PNGAPI +# endif +#endif + +#if defined(__MINGW32__) && !defined(PNG_MODULEDEF) +# ifndef PNG_NO_MODULEDEF +# define PNG_NO_MODULEDEF +# endif +#endif + +#if !defined(PNG_IMPEXP) && defined(PNG_BUILD_DLL) && !defined(PNG_NO_MODULEDEF) +# define PNG_IMPEXP +#endif + +#if defined(PNG_DLL) || defined(_DLL) || defined(__DLL__ ) || \ + (( defined(_Windows) || defined(_WINDOWS) || \ + defined(WIN32) || defined(_WIN32) || defined(__WIN32__) )) + +# ifndef PNGAPI +# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) +# define PNGAPI __cdecl +# else +# define PNGAPI _cdecl +# endif +# endif + +# if !defined(PNG_IMPEXP) && (!defined(PNG_DLL) || \ + 0 /* WINCOMPILER_WITH_NO_SUPPORT_FOR_DECLIMPEXP */) +# define PNG_IMPEXP +# endif + +# ifndef PNG_IMPEXP + +# define PNG_EXPORT_TYPE1(type,symbol) PNG_IMPEXP type PNGAPI symbol +# define PNG_EXPORT_TYPE2(type,symbol) type PNG_IMPEXP PNGAPI symbol + + /* Borland/Microsoft */ +# if defined(_MSC_VER) || defined(__BORLANDC__) +# if (_MSC_VER >= 800) || (__BORLANDC__ >= 0x500) +# define PNG_EXPORT PNG_EXPORT_TYPE1 +# else +# define PNG_EXPORT PNG_EXPORT_TYPE2 +# ifdef PNG_BUILD_DLL +# define PNG_IMPEXP __export +# else +# define PNG_IMPEXP /*__import */ /* doesn't exist AFAIK in VC++ */ +# endif /* Exists in Borland C++ for + C++ classes (== huge) */ +# endif +# endif + +# ifndef PNG_IMPEXP +# ifdef PNG_BUILD_DLL +# define PNG_IMPEXP __declspec(dllexport) +# else +# define PNG_IMPEXP __declspec(dllimport) +# endif +# endif +# endif /* PNG_IMPEXP */ +#else /* !(DLL || non-cygwin WINDOWS) */ +# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) +# ifndef PNGAPI +# define PNGAPI _System +# endif +# else +# if 0 /* ... other platforms, with other meanings */ +# endif +# endif +#endif + +#ifndef PNGAPI +# define PNGAPI +#endif +#ifndef PNG_IMPEXP +# define PNG_IMPEXP +#endif + +#ifdef PNG_BUILDSYMS +# ifndef PNG_EXPORT +# define PNG_EXPORT(type,symbol) PNG_FUNCTION_EXPORT symbol END +# endif +#endif + +#ifndef PNG_EXPORT +# define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol +#endif + +#define PNG_USE_LOCAL_ARRAYS /* Not used in libpng, defined for legacy apps */ + +/* Support for compiler specific function attributes. These are used + * so that where compiler support is available incorrect use of API + * functions in png.h will generate compiler warnings. + * + * Added at libpng-1.2.41. + */ + +#ifndef PNG_NO_PEDANTIC_WARNINGS +# ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED +# define PNG_PEDANTIC_WARNINGS_SUPPORTED +# endif +#endif + +#ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED +/* Support for compiler specific function attributes. These are used + * so that where compiler support is available incorrect use of API + * functions in png.h will generate compiler warnings. Added at libpng + * version 1.2.41. + */ +# ifdef __GNUC__ +# ifndef PNG_USE_RESULT +# define PNG_USE_RESULT __attribute__((__warn_unused_result__)) +# endif +# ifndef PNG_NORETURN +# define PNG_NORETURN __attribute__((__noreturn__)) +# endif +# ifndef PNG_ALLOCATED +# define PNG_ALLOCATED __attribute__((__malloc__)) +# endif + + /* This specifically protects structure members that should only be + * accessed from within the library, therefore should be empty during + * a library build. + */ +# ifndef PNG_DEPRECATED +# define PNG_DEPRECATED __attribute__((__deprecated__)) +# endif +# ifndef PNG_DEPSTRUCT +# define PNG_DEPSTRUCT __attribute__((__deprecated__)) +# endif +# ifndef PNG_PRIVATE +# if 0 /* Doesn't work so we use deprecated instead*/ +# define PNG_PRIVATE \ + __attribute__((warning("This function is not exported by libpng."))) +# else +# define PNG_PRIVATE \ + __attribute__((__deprecated__)) +# endif +# endif /* PNG_PRIVATE */ +# endif /* __GNUC__ */ +#endif /* PNG_PEDANTIC_WARNINGS */ + +#ifndef PNG_DEPRECATED +# define PNG_DEPRECATED /* Use of this function is deprecated */ +#endif +#ifndef PNG_USE_RESULT +# define PNG_USE_RESULT /* The result of this function must be checked */ +#endif +#ifndef PNG_NORETURN +# define PNG_NORETURN /* This function does not return */ +#endif +#ifndef PNG_ALLOCATED +# define PNG_ALLOCATED /* The result of the function is new memory */ +#endif +#ifndef PNG_DEPSTRUCT +# define PNG_DEPSTRUCT /* Access to this struct member is deprecated */ +#endif +#ifndef PNG_PRIVATE +# define PNG_PRIVATE /* This is a private libpng function */ +#endif + +/* Users may want to use these so they are not private. Any library + * functions that are passed far data must be model-independent. + */ + +/* memory model/platform independent fns */ +#ifndef PNG_ABORT +# if (defined(_Windows) || defined(_WINDOWS) || defined(_WINDOWS_)) +# define PNG_ABORT() ExitProcess(0) +# else +# define PNG_ABORT() abort() +# endif +#endif + +#ifdef USE_FAR_KEYWORD +/* Use this to make far-to-near assignments */ +# define CHECK 1 +# define NOCHECK 0 +# define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK)) +# define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK)) +# define png_strcpy _fstrcpy +# define png_strncpy _fstrncpy /* Added to v 1.2.6 */ +# define png_strlen _fstrlen +# define png_memcmp _fmemcmp /* SJT: added */ +# define png_memcpy _fmemcpy +# define png_memset _fmemset +# define png_sprintf sprintf +#else +# if (defined(_Windows) || defined(_WINDOWS) || defined(_WINDOWS_)) +# /* Favor Windows over C runtime fns */ +# define CVT_PTR(ptr) (ptr) +# define CVT_PTR_NOCHECK(ptr) (ptr) +# define png_strcpy lstrcpyA +# define png_strncpy lstrcpynA +# define png_strlen lstrlenA +# define png_memcmp memcmp +# define png_memcpy CopyMemory +# define png_memset memset +# define png_sprintf wsprintfA +# else +# define CVT_PTR(ptr) (ptr) +# define CVT_PTR_NOCHECK(ptr) (ptr) +# define png_strcpy strcpy +# define png_strncpy strncpy /* Added to v 1.2.6 */ +# define png_strlen strlen +# define png_memcmp memcmp /* SJT: added */ +# define png_memcpy memcpy +# define png_memset memset +# define png_sprintf sprintf +# endif +#endif + +#ifndef PNG_NO_SNPRINTF +# ifdef _MSC_VER +# define png_snprintf _snprintf /* Added to v 1.2.19 */ +# define png_snprintf2 _snprintf +# define png_snprintf6 _snprintf +# else +# define png_snprintf snprintf /* Added to v 1.2.19 */ +# define png_snprintf2 snprintf +# define png_snprintf6 snprintf +# endif +#else + /* You don't have or don't want to use snprintf(). Caution: Using + * sprintf instead of snprintf exposes your application to accidental + * or malevolent buffer overflows. If you don't have snprintf() + * as a general rule you should provide one (you can get one from + * Portable OpenSSH). + */ +# define png_snprintf(s1,n,fmt,x1) png_sprintf(s1,fmt,x1) +# define png_snprintf2(s1,n,fmt,x1,x2) png_sprintf(s1,fmt,x1,x2) +# define png_snprintf6(s1,n,fmt,x1,x2,x3,x4,x5,x6) \ + png_sprintf(s1,fmt,x1,x2,x3,x4,x5,x6) +#endif + +/* png_alloc_size_t is guaranteed to be no smaller than png_size_t, + * and no smaller than png_uint_32. Casts from png_size_t or png_uint_32 + * to png_alloc_size_t are not necessary; in fact, it is recommended + * not to use them at all so that the compiler can complain when something + * turns out to be problematic. + * Casts in the other direction (from png_alloc_size_t to png_size_t or + * png_uint_32) should be explicitly applied; however, we do not expect + * to encounter practical situations that require such conversions. + */ +#if defined(__TURBOC__) && !defined(__FLAT__) + typedef unsigned long png_alloc_size_t; +#else +# if defined(_MSC_VER) && defined(MAXSEG_64K) + typedef unsigned long png_alloc_size_t; +# else + /* This is an attempt to detect an old Windows system where (int) is + * actually 16 bits, in that case png_malloc must have an argument with a + * bigger size to accomodate the requirements of the library. + */ +# if (defined(_Windows) || defined(_WINDOWS) || defined(_WINDOWS_)) && \ + (!defined(INT_MAX) || INT_MAX <= 0x7ffffffeL) + typedef DWORD png_alloc_size_t; +# else + typedef png_size_t png_alloc_size_t; +# endif +# endif +#endif +/* End of memory model/platform independent support */ + +/* Just a little check that someone hasn't tried to define something + * contradictory. + */ +#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K) +# undef PNG_ZBUF_SIZE +# define PNG_ZBUF_SIZE 65536L +#endif + + +/* Added at libpng-1.2.8 */ +#endif /* PNG_VERSION_INFO_ONLY */ + +#endif /* PNGCONF_H */ diff --git a/contrib/menuetlibc/openjpeg/libs/png/zconf.h b/contrib/menuetlibc/openjpeg/libs/png/zconf.h new file mode 100755 index 0000000000..e3b0c962e3 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libs/png/zconf.h @@ -0,0 +1,332 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define deflateBound z_deflateBound +# define deflatePrime z_deflatePrime +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateCopy z_inflateCopy +# define inflateReset z_inflateReset +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table +# define zError z_zError + +# define alloc_func z_alloc_func +# define free_func z_free_func +# define in_func z_in_func +# define out_func z_out_func +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +# ifdef FAR +# undef FAR +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(deflateBound,"DEBND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(compressBound,"CMBND") +# pragma map(inflate_table,"INTABL") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/contrib/menuetlibc/openjpeg/libs/png/zlib.h b/contrib/menuetlibc/openjpeg/libs/png/zlib.h new file mode 100755 index 0000000000..62d0e4675b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libs/png/zlib.h @@ -0,0 +1,1357 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.3" +#define ZLIB_VERNUM 0x1230 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumualte before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + the value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, + Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() stop + if and when it gets to the next deflate block boundary. When decoding the + zlib or gzip format, this will cause inflate() to return immediately after + the header and before the first block. When doing a raw inflate, inflate() + will go ahead and process the first block, and will return when it gets to + the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 + if inflate() is currently decoding the last block in the deflate stream, + plus 128 if inflate() returned immediately after decoding an end-of-block + code or decoding the complete header up to just before the first byte of the + deflate stream. The end-of-block will not be indicated until all of the + uncompressed data from that block has been written to strm->next_out. The + number of unused bits may in general be greater than seven, except when + bit 7 of data_type is set, in which case the number of unused bits will be + less than eight. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster approach + may be used for the single inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() will decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically. Any information + contained in the gzip header is not retained, so applications that need that + information should instead use raw inflate, see inflateInit2() below, or + inflateBack() and perform their own processing of the gzip header and + trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may then + call inflateSync() to look for a good compression block if a partial recovery + of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), + no header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as + Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy + parameter only affects the compression ratio but not the correctness of the + compressed output even if it is not set appropriately. Z_FIXED prevents the + use of dynamic Huffman codes, allowing for a simpler decoder for special + applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. In addition, the + current implementation of deflate will use at most the window size minus + 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() + or deflateInit2(). This would be used to allocate an output buffer + for deflation in a single pass, and so would be called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the + bits leftover from a previous deflate stream when appending to it. As such, + this function can only be used for raw deflate, and must be used before the + first deflate() call after a deflateInit2() or deflateReset(). bits must be + less than or equal to 16, and that many of the least significant bits of + value will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is + a crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg + is set to null if there is no error message. inflateInit2 does not perform + any decompression apart from reading the zlib header if present: this will + be done by inflate(). (So next_in and avail_in may be modified, but next_out + and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called + immediately after inflateInit2() or inflateReset() and before any call of + inflate() to set the dictionary. The application must insure that the + dictionary that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK can be used to + force inflate() to return immediately after header processing is complete + and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When + any of extra, name, or comment are not Z_NULL and the respective field is + not present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not + be allocated, or Z_VERSION_ERROR if the version of the library does not + match the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free + the allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects + only the raw deflate stream to decompress. This is different from the + normal behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format + error in the deflate stream (in which case strm->msg is set to indicate the + nature of the error), or Z_STREAM_ERROR if the stream was not properly + initialized. In the case of Z_BUF_ERROR, an input or output error can be + distinguished using strm->next_in which will be Z_NULL only if in() returned + an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to + out() returning non-zero. (in() will always be called before out(), so + strm->next_in is assured to be defined if out() returns non-zero.) Note + that inflateBack() cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least the value returned + by compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before + a compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h", or 'R' for run-length encoding + as in "wb1R". (See the description of deflateInit2 for more information + about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). The number of + uncompressed bytes written is limited to 4095. The caller should assure that + this limit is not exceeded. If it is exceeded, then gzprintf() will return + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read again later. + Only one character of push-back is allowed. gzungetc() returns the + character pushed, or -1 on failure. gzungetc() will fail if a + character has been pushed but not read yet, or if c is -1. The pushed + character will be discarded if the stream is repositioned with gzseek() + or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns 1 if file is being read directly without decompression, otherwise + zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); +/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is NULL, this function returns the required initial + value for the for the crc. Pre- and post-conditioning (one's complement) is + performed within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + +/* + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/contrib/menuetlibc/openjpeg/libs/png/zlib.lib b/contrib/menuetlibc/openjpeg/libs/png/zlib.lib new file mode 100755 index 0000000000000000000000000000000000000000..f534e8f1cb171f38ef2ccc140ba23a60a7934962 GIT binary patch literal 240696 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 literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/libtool b/contrib/menuetlibc/openjpeg/libtool new file mode 100755 index 0000000000..e064e676b0 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/libtool @@ -0,0 +1,9417 @@ +#! /bin/bash + +# libtool - Provide generalized library-building support services. +# Generated automatically by config.status (openjpeg-1.4.0) 1.4.0 +# Libtool was configured on host a-HP-Pavilion-g6-Notebook-PC: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build shared libraries. +build_libtool_libs=yes + +# Assembler program. +AS="as" + +# DLL creation program. +DLLTOOL="dlltool" + +# Object dumper program. +OBJDUMP="objdump" + +# Which release of libtool.m4 was used? +macro_version=2.2.8 +macro_revision=1.3169 + +# Whether or not to build static libraries. +build_old_libs=yes + +# What type of objects to build. +pic_mode=default + +# Whether or not to optimize for fast installation. +fast_install=yes + +# Shell to use when invoking shell scripts. +SHELL="/bin/bash" + +# An echo program that protects backslashes. +ECHO="printf %s\\n" + +# The host system. +host_alias= +host=x86_64-unknown-linux-gnu +host_os=linux-gnu + +# The build system. +build_alias= +build=x86_64-unknown-linux-gnu +build_os=linux-gnu + +# A sed program that does not truncate output. +SED="/bin/sed" + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP="/bin/grep" + +# An ERE matcher. +EGREP="/bin/grep -E" + +# A literal string matcher. +FGREP="/bin/grep -F" + +# A BSD- or MS-compatible name lister. +NM="/usr/bin/nm -B" + +# Whether we need soft or hard links. +LN_S="ln -s" + +# What is the maximum length of a command? +max_cmd_len=3458764513820540925 + +# Object file suffix (normally "o"). +objext=o + +# Executable file suffix (normally ""). +exeext= + +# whether the shell understands "unset". +lt_unset=unset + +# turn spaces into newlines. +SP2NL="tr \\040 \\012" + +# turn newlines into spaces. +NL2SP="tr \\015\\012 \\040\\040" + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="pass_all" + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd="\$MAGIC_CMD" + +# The archiver. +AR="ar" +AR_FLAGS="cru" + +# A symbol stripping program. +STRIP="strip" + +# Commands used to install an old-style archive. +RANLIB="ranlib" +old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib" +old_postuninstall_cmds="" + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=no + +# A C compiler. +LTCC="gcc" + +# LTCC compiler flags. +LTCFLAGS="-g -O2" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p'" + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'" + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p'" + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"lib\\2\", (void *) \\&\\2},/p'" + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=file + +# Must we lock files when doing compilation? +need_locks="no" + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL="" + +# Tool to change global to local symbols on Mac OS X. +NMEDIT="" + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO="" + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL="" + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64="" + +# Old archive suffix (normally "a"). +libext=a + +# Shared library suffix (normally ".so"). +shrext_cmds=".so" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Do we need the "lib" prefix for modules? +need_lib_prefix=no + +# Do we need a version for libraries? +need_version=no + +# Library versioning type. +version_type=linux + +# Shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# Shared library path variable. +shlibpath_var=LD_LIBRARY_PATH + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=no + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}" + +# The coded name of the library, if different from the real name. +soname_spec="\${libname}\${release}\${shared_ext}\$major" + +# Permission mode override for installation of shared libraries. +install_override_mode="" + +# Command to use after installation of a shared archive. +postinstall_cmds="" + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval="" + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=yes + +# Compile-time system search path for libraries. +sys_lib_search_path_spec="/usr/lib/gcc/x86_64-linux-gnu/4.6 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib " + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/i386-linux-gnu/mesa /lib/i386-linux-gnu /usr/lib/i386-linux-gnu /lib/i686-linux-gnu /usr/lib/i686-linux-gnu /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/mesa /lib32 /usr/lib32 " + +# Whether dlopen is supported. +dlopen_support=unknown + +# Whether dlopen of programs is supported. +dlopen_self=unknown + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + + +# The linker used to build libraries. +LD="/usr/bin/ld -m elf_x86_64" + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# Commands used to build an old-style archive. +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" + +# A language specific compiler. +CC="gcc" + +# Is the compiler the GNU compiler? +with_gcc=yes + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Additional compiler flags for building library objects. +pic_flag=" -fPIC -DPIC" + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=no + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=no + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object="no" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build a shared archive. +archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~ + cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~ + echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~ + \$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-version-script \${wl}\$output_objdir/\$libname.ver -o \$lib" + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds="" +module_expsym_cmds="" + +# Whether we are building with GNU ld or not. +with_gnu_ld="yes" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that enforces no undefined symbols. +no_undefined_flag="" + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist +hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" + +# If ld is used when linking, flag to hardcode $libdir into a binary +# during linking. This must work even if $libdir does not exist. +hardcode_libdir_flag_spec_ld="" + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator="" + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=no + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting ${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=no + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=no + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=unsupported + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=no + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=no + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Fix the shell variable $srcfile for the compiler. +fix_srcfile_path="" + +# Set to "yes" if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" + +# Symbols that must always be exported. +include_expsyms="" + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds="" + +# Specify filename containing input files. +file_list_spec="" + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs="" + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects="" +postdep_objects="" +predeps="" +postdeps="" + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path="" + +# ### END LIBTOOL CONFIG + +# Generated from ltmain.m4sh. + +# libtool (GNU libtool) 2.2.8 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.8 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.2.8 +TIMESTAMP="" +package_revision=1.3169 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + + + + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="grep -E"} +: ${FGREP="grep -F"} +: ${GREP="grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} + +# Generated shell functions inserted here. + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +# Generated shell functions inserted here. + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# // + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1." + exit_cmd=exit +} + +exit_cmd=: + + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +# $mode is unset +nonopt= +execute_dlfiles= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +opt_dry_run=false +opt_duplicate_deps=false +opt_silent=false +opt_debug=: + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + opt_verbose=false + ;; + + --no-quiet|--no-silent) + preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + opt_verbose=: + ;; + + --no-verbose) preserve_args="$preserve_args $opt" + opt_verbose=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --help-all) opt_help=': help-all' ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + install_shared_prog="$install_shared_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + echo >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + echo >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1"; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_result=`cygpath -w "$1" | + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result= + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1"; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_pathlist_tmp1=$func_stripname_result + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + func_to_host_pathlist_result=` + ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_append func_to_host_pathlist_result ";$func_to_host_path_result" + fi + fi + fi + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result"; then + func_error "Could not determine the host path(s) corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_append func_to_host_pathlist_result ";" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' + + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + echo ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD="/usr/bin/ld -m elf_x86_64" + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# Commands used to build an old-style archive. +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" + +# A language specific compiler. +CC="g++" + +# Is the compiler the GNU compiler? +with_gcc=yes + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Additional compiler flags for building library objects. +pic_flag=" -fPIC -DPIC" + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=no + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=no + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object="no" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build a shared archive. +archive_cmds="\$CC -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="\$CC -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib" + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds="" +module_expsym_cmds="" + +# Whether we are building with GNU ld or not. +with_gnu_ld="yes" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that enforces no undefined symbols. +no_undefined_flag="" + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist +hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" + +# If ld is used when linking, flag to hardcode $libdir into a binary +# during linking. This must work even if $libdir does not exist. +hardcode_libdir_flag_spec_ld="" + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator="" + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=no + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting ${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=no + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=no + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=unsupported + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=no + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=no + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Fix the shell variable $srcfile for the compiler. +fix_srcfile_path="" + +# Set to "yes" if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" + +# Symbols that must always be exported. +include_expsyms="" + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds="" + +# Specify filename containing input files. +file_list_spec="" + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs="/usr/lib/gcc/x86_64-linux-gnu/4.6 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /usr/lib/gcc/x86_64-linux-gnu/4.6/../../.." + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects="/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbeginS.o" +postdep_objects="/usr/lib/gcc/x86_64-linux-gnu/4.6/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o" +predeps="" +postdeps="-lstdc++ -lm -lgcc_s -lc -lgcc_s" + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path="-L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../.." + +# ### END LIBTOOL TAG CONFIG: CXX diff --git a/contrib/menuetlibc/openjpeg/ltmain.sh b/contrib/menuetlibc/openjpeg/ltmain.sh new file mode 100755 index 0000000000..be43f41885 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/ltmain.sh @@ -0,0 +1,8750 @@ +# Generated from ltmain.m4sh. + +# libtool (GNU libtool) 2.2.8 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.8 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.2.8 +TIMESTAMP="" +package_revision=1.3169 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + + + + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="grep -E"} +: ${FGREP="grep -F"} +: ${GREP="grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} + +# Generated shell functions inserted here. + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# // + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1." + exit_cmd=exit +} + +exit_cmd=: + + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +# $mode is unset +nonopt= +execute_dlfiles= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +opt_dry_run=false +opt_duplicate_deps=false +opt_silent=false +opt_debug=: + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + opt_verbose=false + ;; + + --no-quiet|--no-silent) + preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + opt_verbose=: + ;; + + --no-verbose) preserve_args="$preserve_args $opt" + opt_verbose=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --help-all) opt_help=': help-all' ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + install_shared_prog="$install_shared_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + echo >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + echo >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1"; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_result=`cygpath -w "$1" | + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result= + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1"; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_pathlist_tmp1=$func_stripname_result + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + func_to_host_pathlist_result=` + ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_append func_to_host_pathlist_result ";$func_to_host_path_result" + fi + fi + fi + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result"; then + func_error "Could not determine the host path(s) corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_append func_to_host_pathlist_result ";" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' + + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + echo ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/contrib/menuetlibc/openjpeg/missing b/contrib/menuetlibc/openjpeg/missing new file mode 100755 index 0000000000..28055d2ae6 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/menuetlibc/openjpeg/mj2/.deps/color.Po b/contrib/menuetlibc/openjpeg/mj2/.deps/color.Po new file mode 100644 index 0000000000..8cf8b08b32 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/.deps/color.Po @@ -0,0 +1,144 @@ +color.o: ../common/color.c /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h ../opj_config.h \ + ../libopenjpeg/openjpeg.h ../common/color.h /usr/include/lcms.h \ + /usr/include/assert.h /usr/include/memory.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h ../common/getopt.h \ + /usr/include/icc34.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +../opj_config.h: + +../libopenjpeg/openjpeg.h: + +../common/color.h: + +/usr/include/lcms.h: + +/usr/include/assert.h: + +/usr/include/memory.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +../common/getopt.h: + +/usr/include/icc34.h: diff --git a/contrib/menuetlibc/openjpeg/mj2/.deps/extract_j2k_from_mj2.Po b/contrib/menuetlibc/openjpeg/mj2/.deps/extract_j2k_from_mj2.Po new file mode 100644 index 0000000000..ce3e33ff45 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/.deps/extract_j2k_from_mj2.Po @@ -0,0 +1,100 @@ +extract_j2k_from_mj2.o: extract_j2k_from_mj2.c /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/xlocale.h ../libopenjpeg/openjpeg.h \ + ../libopenjpeg/j2k.h ../libopenjpeg/jp2.h mj2.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +../libopenjpeg/openjpeg.h: + +../libopenjpeg/j2k.h: + +../libopenjpeg/jp2.h: + +mj2.h: diff --git a/contrib/menuetlibc/openjpeg/mj2/.deps/frames_to_mj2.Po b/contrib/menuetlibc/openjpeg/mj2/.deps/frames_to_mj2.Po new file mode 100644 index 0000000000..ca1e34cb29 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/.deps/frames_to_mj2.Po @@ -0,0 +1,109 @@ +frames_to_mj2.o: frames_to_mj2.c /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/xlocale.h ../libopenjpeg/openjpeg.h \ + ../libopenjpeg/j2k_lib.h ../libopenjpeg/j2k.h ../libopenjpeg/jp2.h \ + ../libopenjpeg/cio.h mj2.h mj2_convert.h ../common/getopt.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +../libopenjpeg/openjpeg.h: + +../libopenjpeg/j2k_lib.h: + +../libopenjpeg/j2k.h: + +../libopenjpeg/jp2.h: + +../libopenjpeg/cio.h: + +mj2.h: + +mj2_convert.h: + +../common/getopt.h: diff --git a/contrib/menuetlibc/openjpeg/mj2/.deps/getopt.Po b/contrib/menuetlibc/openjpeg/mj2/.deps/getopt.Po new file mode 100644 index 0000000000..c7a6edfba1 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/.deps/getopt.Po @@ -0,0 +1,91 @@ +getopt.o: ../common/getopt.c /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/xlocale.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: diff --git a/contrib/menuetlibc/openjpeg/mj2/.deps/mj2.Po b/contrib/menuetlibc/openjpeg/mj2/.deps/mj2.Po new file mode 100644 index 0000000000..5fc9b7b5a0 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/.deps/mj2.Po @@ -0,0 +1,175 @@ +mj2.o: mj2.c ../libopenjpeg/opj_includes.h /usr/include/memory.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/ctype.h \ + ../libopenjpeg/openjpeg.h ../libopenjpeg/j2k_lib.h \ + ../libopenjpeg/opj_malloc.h ../libopenjpeg/event.h ../libopenjpeg/cio.h \ + ../libopenjpeg/image.h ../libopenjpeg/j2k.h ../libopenjpeg/jp2.h \ + ../libopenjpeg/jpt.h ../libopenjpeg/mqc.h ../libopenjpeg/raw.h \ + ../libopenjpeg/bio.h ../libopenjpeg/tgt.h ../libopenjpeg/pi.h \ + ../libopenjpeg/tcd.h ../libopenjpeg/t1.h ../libopenjpeg/dwt.h \ + ../libopenjpeg/t2.h ../libopenjpeg/mct.h ../libopenjpeg/int.h \ + ../libopenjpeg/fix.h mj2.h + +../libopenjpeg/opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/ctype.h: + +../libopenjpeg/openjpeg.h: + +../libopenjpeg/j2k_lib.h: + +../libopenjpeg/opj_malloc.h: + +../libopenjpeg/event.h: + +../libopenjpeg/cio.h: + +../libopenjpeg/image.h: + +../libopenjpeg/j2k.h: + +../libopenjpeg/jp2.h: + +../libopenjpeg/jpt.h: + +../libopenjpeg/mqc.h: + +../libopenjpeg/raw.h: + +../libopenjpeg/bio.h: + +../libopenjpeg/tgt.h: + +../libopenjpeg/pi.h: + +../libopenjpeg/tcd.h: + +../libopenjpeg/t1.h: + +../libopenjpeg/dwt.h: + +../libopenjpeg/t2.h: + +../libopenjpeg/mct.h: + +../libopenjpeg/int.h: + +../libopenjpeg/fix.h: + +mj2.h: diff --git a/contrib/menuetlibc/openjpeg/mj2/.deps/mj2_convert.Po b/contrib/menuetlibc/openjpeg/mj2/.deps/mj2_convert.Po new file mode 100644 index 0000000000..9250938d92 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/.deps/mj2_convert.Po @@ -0,0 +1,176 @@ +mj2_convert.o: mj2_convert.c ../libopenjpeg/opj_includes.h \ + /usr/include/memory.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/ctype.h \ + ../libopenjpeg/openjpeg.h ../libopenjpeg/j2k_lib.h \ + ../libopenjpeg/opj_malloc.h ../libopenjpeg/event.h ../libopenjpeg/cio.h \ + ../libopenjpeg/image.h ../libopenjpeg/j2k.h ../libopenjpeg/jp2.h \ + ../libopenjpeg/jpt.h ../libopenjpeg/mqc.h ../libopenjpeg/raw.h \ + ../libopenjpeg/bio.h ../libopenjpeg/tgt.h ../libopenjpeg/pi.h \ + ../libopenjpeg/tcd.h ../libopenjpeg/t1.h ../libopenjpeg/dwt.h \ + ../libopenjpeg/t2.h ../libopenjpeg/mct.h ../libopenjpeg/int.h \ + ../libopenjpeg/fix.h mj2.h + +../libopenjpeg/opj_includes.h: + +/usr/include/memory.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/ctype.h: + +../libopenjpeg/openjpeg.h: + +../libopenjpeg/j2k_lib.h: + +../libopenjpeg/opj_malloc.h: + +../libopenjpeg/event.h: + +../libopenjpeg/cio.h: + +../libopenjpeg/image.h: + +../libopenjpeg/j2k.h: + +../libopenjpeg/jp2.h: + +../libopenjpeg/jpt.h: + +../libopenjpeg/mqc.h: + +../libopenjpeg/raw.h: + +../libopenjpeg/bio.h: + +../libopenjpeg/tgt.h: + +../libopenjpeg/pi.h: + +../libopenjpeg/tcd.h: + +../libopenjpeg/t1.h: + +../libopenjpeg/dwt.h: + +../libopenjpeg/t2.h: + +../libopenjpeg/mct.h: + +../libopenjpeg/int.h: + +../libopenjpeg/fix.h: + +mj2.h: diff --git a/contrib/menuetlibc/openjpeg/mj2/.deps/mj2_to_frames.Po b/contrib/menuetlibc/openjpeg/mj2/.deps/mj2_to_frames.Po new file mode 100644 index 0000000000..dd20dd0154 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/.deps/mj2_to_frames.Po @@ -0,0 +1,155 @@ +mj2_to_frames.o: mj2_to_frames.c /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/xlocale.h ../opj_config.h \ + ../libopenjpeg/openjpeg.h ../libopenjpeg/j2k_lib.h ../libopenjpeg/j2k.h \ + ../libopenjpeg/jp2.h mj2.h mj2_convert.h /usr/include/lcms.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/assert.h \ + /usr/include/memory.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h ../common/getopt.h \ + /usr/include/icc34.h ../common/color.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +../opj_config.h: + +../libopenjpeg/openjpeg.h: + +../libopenjpeg/j2k_lib.h: + +../libopenjpeg/j2k.h: + +../libopenjpeg/jp2.h: + +mj2.h: + +mj2_convert.h: + +/usr/include/lcms.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/assert.h: + +/usr/include/memory.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +../common/getopt.h: + +/usr/include/icc34.h: + +../common/color.h: diff --git a/contrib/menuetlibc/openjpeg/mj2/.deps/wrap_j2k_in_mj2.Po b/contrib/menuetlibc/openjpeg/mj2/.deps/wrap_j2k_in_mj2.Po new file mode 100644 index 0000000000..be0b61e398 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/.deps/wrap_j2k_in_mj2.Po @@ -0,0 +1,102 @@ +wrap_j2k_in_mj2.o: wrap_j2k_in_mj2.c /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/xlocale.h ../libopenjpeg/openjpeg.h \ + ../libopenjpeg/j2k.h ../libopenjpeg/jp2.h ../libopenjpeg/cio.h mj2.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +../libopenjpeg/openjpeg.h: + +../libopenjpeg/j2k.h: + +../libopenjpeg/jp2.h: + +../libopenjpeg/cio.h: + +mj2.h: diff --git a/contrib/menuetlibc/openjpeg/mj2/CMakeLists.txt b/contrib/menuetlibc/openjpeg/mj2/CMakeLists.txt new file mode 100644 index 0000000000..f7ea0e2e23 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/CMakeLists.txt @@ -0,0 +1,87 @@ +# Makefile for the MJ2 codecs of the OpenJPEG library: frames_to_mj2, mj2_to_frames, extract_j2k_from_mj2 and wrap_j2k_in_mj2 + +SET(common_SRCS "") +IF(DONT_HAVE_GETOPT) + SET(common_SRCS ${OPENJPEG_SOURCE_DIR}/common/getopt.c) +ENDIF(DONT_HAVE_GETOPT) + +# While mj2 executables do not use the API correctly, we do not link with the library but rather compile the sources files. +SET(OPJ_SRCS +${OPENJPEG_SOURCE_DIR}/libopenjpeg/bio.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/cio.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/dwt.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/event.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/image.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/j2k.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/j2k_lib.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/jp2.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/jpt.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/mct.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/mqc.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/openjpeg.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/pi.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/raw.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/t1.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/t2.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/tcd.c +${OPENJPEG_SOURCE_DIR}/libopenjpeg/tgt.c +) + +SET(MJ2_SRCS mj2.c mj2_convert.c) + +IF(WIN32) + ADD_DEFINITIONS(-DOPJ_STATIC) +ENDIF(WIN32) + +# Headers file are located here: +INCLUDE_DIRECTORIES( + ${OPENJPEG_SOURCE_DIR}/libopenjpeg + ${OPENJPEG_SOURCE_DIR}/common + ${LCMS_INCLUDE_DIR} + ) + +ADD_EXECUTABLE(frames_to_mj2 + frames_to_mj2.c + ${common_SRCS} + ${OPJ_SRCS} + ${MJ2_SRCS} + ) +TARGET_LINK_LIBRARIES(frames_to_mj2 ${LCMS_LIB}) +IF(UNIX) + TARGET_LINK_LIBRARIES(frames_to_mj2 m) +ENDIF(UNIX) + +ADD_EXECUTABLE(mj2_to_frames + mj2_to_frames.c + ${common_SRCS} + ${OPJ_SRCS} + ${MJ2_SRCS} + ${OPENJPEG_SOURCE_DIR}/common/color.c + ) +TARGET_LINK_LIBRARIES(mj2_to_frames ${LCMS_LIB}) +IF(UNIX) + TARGET_LINK_LIBRARIES(mj2_to_frames m) +ENDIF(UNIX) + +ADD_EXECUTABLE(extract_j2k_from_mj2 + extract_j2k_from_mj2.c + ${OPJ_SRCS} + ${MJ2_SRCS} + ) +TARGET_LINK_LIBRARIES(extract_j2k_from_mj2 ${LCMS_LIB}) +IF(UNIX) + TARGET_LINK_LIBRARIES(extract_j2k_from_mj2 m) +ENDIF(UNIX) + +ADD_EXECUTABLE(wrap_j2k_in_mj2 + wrap_j2k_in_mj2.c + ${OPJ_SRCS} + ${MJ2_SRCS} + ) +TARGET_LINK_LIBRARIES(wrap_j2k_in_mj2 ${LCMS_LIB}) +IF(UNIX) + TARGET_LINK_LIBRARIES(wrap_j2k_in_mj2 m) +ENDIF(UNIX) + +INSTALL(TARGETS frames_to_mj2 mj2_to_frames extract_j2k_from_mj2 wrap_j2k_in_mj2 + DESTINATION bin) diff --git a/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.dsp b/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.dsp new file mode 100644 index 0000000000..b4870fde5a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.dsp @@ -0,0 +1,196 @@ +# Microsoft Developer Studio Project File - Name="MJ2_Extractor" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=MJ2_Extractor - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "MJ2_Extractor.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "MJ2_Extractor.mak" CFG="MJ2_Extractor - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "MJ2_Extractor - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "MJ2_Extractor - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "MJ2_Extractor - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "MJ2_Extractor - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "MJ2_Extractor___Win32_Debug" +# PROP BASE Intermediate_Dir "MJ2_Extractor___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "MJ2_Extractor___Win32_Debug" +# PROP Intermediate_Dir "MJ2_Extractor___Win32_Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MT /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcmt" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "MJ2_Extractor - Win32 Release" +# Name "MJ2_Extractor - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\extract_j2k_from_mj2.c +# End Source File +# Begin Source File + +SOURCE=.\mj2.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\mj2.h +# End Source File +# End Group +# Begin Group "OpenJPEG Header Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\libopenjpeg\bio.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\cio.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\dwt.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\event.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\fix.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\image.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\int.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\j2k.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\j2k_lib.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\jp2.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\jpt.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\mct.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\mqc.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\openjpeg.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\opj_includes.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\pi.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\raw.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\t1.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\t2.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\tcd.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\tgt.h +# End Source File +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.dsw b/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.dsw new file mode 100644 index 0000000000..1ee72c6c05 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "LibOpenJPEG"="..\LibOpenJPEG.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "MJ2_Extractor"=".\MJ2_Extractor.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.sln b/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.sln new file mode 100644 index 0000000000..63a3b7216e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.sln @@ -0,0 +1,29 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MJ2_Extractor", "MJ2_Extractor.vcproj", "{BCBEB12A-B691-4B14-9DC5-193BCD01183D}" + ProjectSection(ProjectDependencies) = postProject + {4F27AA53-4181-4A1A-8238-3931B0A41048} = {4F27AA53-4181-4A1A-8238-3931B0A41048} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibOpenJPEG", "..\LibOpenJPEG.vcproj", "{4F27AA53-4181-4A1A-8238-3931B0A41048}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BCBEB12A-B691-4B14-9DC5-193BCD01183D}.Debug|Win32.ActiveCfg = Debug|Win32 + {BCBEB12A-B691-4B14-9DC5-193BCD01183D}.Debug|Win32.Build.0 = Debug|Win32 + {BCBEB12A-B691-4B14-9DC5-193BCD01183D}.Release|Win32.ActiveCfg = Release|Win32 + {BCBEB12A-B691-4B14-9DC5-193BCD01183D}.Release|Win32.Build.0 = Release|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Debug|Win32.ActiveCfg = Debug|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Debug|Win32.Build.0 = Debug|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Release|Win32.ActiveCfg = Release|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.vcproj b/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.vcproj new file mode 100644 index 0000000000..3c6e9a6814 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/MJ2_Extractor.vcproj @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.dsp b/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.dsp new file mode 100644 index 0000000000..724f60881e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.dsp @@ -0,0 +1,195 @@ +# Microsoft Developer Studio Project File - Name="MJ2_Wrapper" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=MJ2_Wrapper - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "MJ2_Wrapper.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "MJ2_Wrapper.mak" CFG="MJ2_Wrapper - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "MJ2_Wrapper - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "MJ2_Wrapper - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "MJ2_Wrapper - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FR /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "MJ2_Wrapper - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "MJ2_Wrapper___Win32_Debug" +# PROP BASE Intermediate_Dir "MJ2_Wrapper___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "MJ2_Wrapper___Win32_Debug" +# PROP Intermediate_Dir "MJ2_Wrapper___Win32_Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MT /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcmt" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "MJ2_Wrapper - Win32 Release" +# Name "MJ2_Wrapper - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\mj2.c +# End Source File +# Begin Source File + +SOURCE=.\wrap_j2k_in_mj2.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\mj2.h +# End Source File +# End Group +# Begin Group "OpenJPEG Header Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\libopenjpeg\bio.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\cio.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\dwt.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\event.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\fix.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\image.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\int.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\j2k.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\j2k_lib.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\jp2.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\jpt.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\mct.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\mqc.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\openjpeg.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\opj_includes.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\pi.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\raw.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\t1.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\t2.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\tcd.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\tgt.h +# End Source File +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.dsw b/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.dsw new file mode 100644 index 0000000000..ae5a701117 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "LibOpenJPEG"="..\LibOpenJPEG.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "MJ2_Wrapper"=".\MJ2_Wrapper.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.sln b/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.sln new file mode 100644 index 0000000000..850c305622 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.sln @@ -0,0 +1,29 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MJ2_Wrapper", "MJ2_Wrapper.vcproj", "{87C98B26-E658-4992-8810-201C3CE67011}" + ProjectSection(ProjectDependencies) = postProject + {4F27AA53-4181-4A1A-8238-3931B0A41048} = {4F27AA53-4181-4A1A-8238-3931B0A41048} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibOpenJPEG", "..\LibOpenJPEG.vcproj", "{4F27AA53-4181-4A1A-8238-3931B0A41048}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {87C98B26-E658-4992-8810-201C3CE67011}.Debug|Win32.ActiveCfg = Debug|Win32 + {87C98B26-E658-4992-8810-201C3CE67011}.Debug|Win32.Build.0 = Debug|Win32 + {87C98B26-E658-4992-8810-201C3CE67011}.Release|Win32.ActiveCfg = Release|Win32 + {87C98B26-E658-4992-8810-201C3CE67011}.Release|Win32.Build.0 = Release|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Debug|Win32.ActiveCfg = Debug|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Debug|Win32.Build.0 = Debug|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Release|Win32.ActiveCfg = Release|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.vcproj b/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.vcproj new file mode 100644 index 0000000000..2c0f5c2cbe --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/MJ2_Wrapper.vcproj @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/mj2/Makefile b/contrib/menuetlibc/openjpeg/mj2/Makefile new file mode 100644 index 0000000000..5ca60fa40c --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/Makefile @@ -0,0 +1,629 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# mj2/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + +pkgdatadir = $(datadir)/openjpeg-1.4.0 +pkgincludedir = $(includedir)/openjpeg-1.4.0 +pkglibdir = $(libdir)/openjpeg-1.4.0 +pkglibexecdir = $(libexecdir)/openjpeg-1.4.0 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +am__append_1 = -DOPJ_EXPORTS +#am__append_2 = -DOPJ_STATIC +#am__append_3 = +#am__append_4 = +am__append_5 = -I/usr/include +am__append_6 = -llcms +bin_PROGRAMS = frames_to_mj2$(EXEEXT) mj2_to_frames$(EXEEXT) \ + extract_j2k_from_mj2$(EXEEXT) wrap_j2k_in_mj2$(EXEEXT) +subdir = mj2 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_extract_j2k_from_mj2_OBJECTS = mj2.$(OBJEXT) \ + extract_j2k_from_mj2.$(OBJEXT) +extract_j2k_from_mj2_OBJECTS = $(am_extract_j2k_from_mj2_OBJECTS) +extract_j2k_from_mj2_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +extract_j2k_from_mj2_DEPENDENCIES = ../libopenjpeg/libopenjpeg.la \ + $(am__DEPENDENCIES_2) +am_frames_to_mj2_OBJECTS = getopt.$(OBJEXT) mj2_convert.$(OBJEXT) \ + mj2.$(OBJEXT) frames_to_mj2.$(OBJEXT) +frames_to_mj2_OBJECTS = $(am_frames_to_mj2_OBJECTS) +frames_to_mj2_LDADD = $(LDADD) +frames_to_mj2_DEPENDENCIES = ../libopenjpeg/libopenjpeg.la \ + $(am__DEPENDENCIES_2) +am_mj2_to_frames_OBJECTS = getopt.$(OBJEXT) mj2_convert.$(OBJEXT) \ + mj2.$(OBJEXT) color.$(OBJEXT) mj2_to_frames.$(OBJEXT) +mj2_to_frames_OBJECTS = $(am_mj2_to_frames_OBJECTS) +mj2_to_frames_LDADD = $(LDADD) +mj2_to_frames_DEPENDENCIES = ../libopenjpeg/libopenjpeg.la \ + $(am__DEPENDENCIES_2) +am_wrap_j2k_in_mj2_OBJECTS = mj2.$(OBJEXT) wrap_j2k_in_mj2.$(OBJEXT) +wrap_j2k_in_mj2_OBJECTS = $(am_wrap_j2k_in_mj2_OBJECTS) +wrap_j2k_in_mj2_LDADD = $(LDADD) +wrap_j2k_in_mj2_DEPENDENCIES = ../libopenjpeg/libopenjpeg.la \ + $(am__DEPENDENCIES_2) +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(extract_j2k_from_mj2_SOURCES) $(frames_to_mj2_SOURCES) \ + $(mj2_to_frames_SOURCES) $(wrap_j2k_in_mj2_SOURCES) +DIST_SOURCES = $(extract_j2k_from_mj2_SOURCES) \ + $(frames_to_mj2_SOURCES) $(mj2_to_frames_SOURCES) \ + $(wrap_j2k_in_mj2_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoconf +AUTOHEADER = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run autoheader +AUTOMAKE = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run automake-1.11 +AWK = mawk +BUILD_NR = 0 +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JP3D_BUILD_NR = 0 +JP3D_MAJOR_NR = 1 +JP3D_MINOR_NR = 3 +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBPNG_CONFIG = /usr/bin/libpng-config +LIBS = -lm -lz -L/usr/lib/x86_64-linux-gnu -lpng12 -ltiff -ljpeg -llcms +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAJOR_NR = 1 +MAKEINFO = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/missing --run makeinfo +MINOR_NR = 4 +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = openjpeg-1.4.0 +PACKAGE_BUGREPORT = http://code.google.com/p/openjpeg/ +PACKAGE_NAME = OpenJPEG +PACKAGE_STRING = OpenJPEG 1.4.0 +PACKAGE_TARNAME = openjpeg-1.4.0 +PACKAGE_URL = http://www.openjpeg.org/ +PACKAGE_VERSION = 1.4.0 +PATH_SEPARATOR = : +PKGCONFIG = /usr/bin/pkg-config +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 1.4.0 +abs_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/mj2 +abs_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg/mj2 +abs_top_builddir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +abs_top_srcdir = /home/a/svn/kolios/contrib/menuetlibc/openjpeg +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/a/svn/kolios/contrib/menuetlibc/openjpeg/install-sh +jp3d_dir = +jpwl_dir = +lcms1includes = -I/usr/include +lcms1libs = -llcms +lcms2includes = +lcms2libs = +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pngincludes = -I/usr/include/libpng12 +pnglibs = -L/usr/lib/x86_64-linux-gnu -lpng12 +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +tiffincludes = +tifflibs = -ltiff +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +with_doxygen = no +COMPILERFLAGS = -Wall $(am__append_1) $(am__append_2) +USERLIBS = $(am__append_4) $(am__append_6) +INCLUDES = -I.. -I. -I../libopenjpeg -I../common $(am__append_3) \ + $(am__append_5) +LDADD = ../libopenjpeg/libopenjpeg.la $(USERLIBS) +frames_to_mj2_SOURCES = ../common/getopt.c mj2_convert.c mj2.c \ + frames_to_mj2.c + +mj2_to_frames_SOURCES = ../common/getopt.c mj2_convert.c mj2.c \ + ../common/color.c mj2_to_frames.c + +extract_j2k_from_mj2_SOURCES = mj2.c extract_j2k_from_mj2.c +wrap_j2k_in_mj2_SOURCES = mj2.c wrap_j2k_in_mj2.c +REPBIN = $(bin_PROGRAMS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mj2/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign mj2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +extract_j2k_from_mj2$(EXEEXT): $(extract_j2k_from_mj2_OBJECTS) $(extract_j2k_from_mj2_DEPENDENCIES) + @rm -f extract_j2k_from_mj2$(EXEEXT) + $(LINK) $(extract_j2k_from_mj2_OBJECTS) $(extract_j2k_from_mj2_LDADD) $(LIBS) +frames_to_mj2$(EXEEXT): $(frames_to_mj2_OBJECTS) $(frames_to_mj2_DEPENDENCIES) + @rm -f frames_to_mj2$(EXEEXT) + $(LINK) $(frames_to_mj2_OBJECTS) $(frames_to_mj2_LDADD) $(LIBS) +mj2_to_frames$(EXEEXT): $(mj2_to_frames_OBJECTS) $(mj2_to_frames_DEPENDENCIES) + @rm -f mj2_to_frames$(EXEEXT) + $(LINK) $(mj2_to_frames_OBJECTS) $(mj2_to_frames_LDADD) $(LIBS) +wrap_j2k_in_mj2$(EXEEXT): $(wrap_j2k_in_mj2_OBJECTS) $(wrap_j2k_in_mj2_DEPENDENCIES) + @rm -f wrap_j2k_in_mj2$(EXEEXT) + $(LINK) $(wrap_j2k_in_mj2_OBJECTS) $(wrap_j2k_in_mj2_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/color.Po +include ./$(DEPDIR)/extract_j2k_from_mj2.Po +include ./$(DEPDIR)/frames_to_mj2.Po +include ./$(DEPDIR)/getopt.Po +include ./$(DEPDIR)/mj2.Po +include ./$(DEPDIR)/mj2_convert.Po +include ./$(DEPDIR)/mj2_to_frames.Po +include ./$(DEPDIR)/wrap_j2k_in_mj2.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +getopt.o: ../common/getopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getopt.o -MD -MP -MF $(DEPDIR)/getopt.Tpo -c -o getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + $(am__mv) $(DEPDIR)/getopt.Tpo $(DEPDIR)/getopt.Po +# source='../common/getopt.c' object='getopt.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + +getopt.obj: ../common/getopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getopt.obj -MD -MP -MF $(DEPDIR)/getopt.Tpo -c -o getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + $(am__mv) $(DEPDIR)/getopt.Tpo $(DEPDIR)/getopt.Po +# source='../common/getopt.c' object='getopt.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + +color.o: ../common/color.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT color.o -MD -MP -MF $(DEPDIR)/color.Tpo -c -o color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c + $(am__mv) $(DEPDIR)/color.Tpo $(DEPDIR)/color.Po +# source='../common/color.c' object='color.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c + +color.obj: ../common/color.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT color.obj -MD -MP -MF $(DEPDIR)/color.Tpo -c -o color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` + $(am__mv) $(DEPDIR)/color.Tpo $(DEPDIR)/color.Po +# source='../common/color.c' object='color.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) all-local +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS + + +all-local: + $(INSTALL) -d ../bin + $(INSTALL) $(bin_PROGRAMS) ../bin + @echo "" > .report.txt + @(for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> .report.txt ; \ + done) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/mj2/Makefile.am b/contrib/menuetlibc/openjpeg/mj2/Makefile.am new file mode 100644 index 0000000000..006803befe --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/Makefile.am @@ -0,0 +1,45 @@ +COMPILERFLAGS = -Wall + +if with_sharedlibs +COMPILERFLAGS += -DOPJ_EXPORTS +else +COMPILERFLAGS += -DOPJ_STATIC +endif + +USERLIBS = +INCLUDES = -I.. -I. -I../libopenjpeg -I../common + +if with_liblcms2 +INCLUDES += @lcms2includes@ +USERLIBS += @lcms2libs@ +endif + +if with_liblcms1 +INCLUDES += @lcms1includes@ +USERLIBS += @lcms1libs@ +endif + +bin_PROGRAMS = frames_to_mj2 mj2_to_frames extract_j2k_from_mj2 wrap_j2k_in_mj2 + +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +LDADD = ../libopenjpeg/libopenjpeg.la $(USERLIBS) + +frames_to_mj2_SOURCES = ../common/getopt.c mj2_convert.c mj2.c \ + frames_to_mj2.c + +mj2_to_frames_SOURCES = ../common/getopt.c mj2_convert.c mj2.c \ + ../common/color.c mj2_to_frames.c + +extract_j2k_from_mj2_SOURCES = mj2.c extract_j2k_from_mj2.c + +wrap_j2k_in_mj2_SOURCES = mj2.c wrap_j2k_in_mj2.c + +REPBIN=$(bin_PROGRAMS) + +all-local: + $(INSTALL) -d ../bin + $(INSTALL) $(bin_PROGRAMS) ../bin + @echo "" > .report.txt + @(for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> .report.txt ; \ + done) diff --git a/contrib/menuetlibc/openjpeg/mj2/Makefile.in b/contrib/menuetlibc/openjpeg/mj2/Makefile.in new file mode 100644 index 0000000000..9788486751 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/Makefile.in @@ -0,0 +1,629 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@with_sharedlibs_TRUE@am__append_1 = -DOPJ_EXPORTS +@with_sharedlibs_FALSE@am__append_2 = -DOPJ_STATIC +@with_liblcms2_TRUE@am__append_3 = @lcms2includes@ +@with_liblcms2_TRUE@am__append_4 = @lcms2libs@ +@with_liblcms1_TRUE@am__append_5 = @lcms1includes@ +@with_liblcms1_TRUE@am__append_6 = @lcms1libs@ +bin_PROGRAMS = frames_to_mj2$(EXEEXT) mj2_to_frames$(EXEEXT) \ + extract_j2k_from_mj2$(EXEEXT) wrap_j2k_in_mj2$(EXEEXT) +subdir = mj2 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/opj_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_extract_j2k_from_mj2_OBJECTS = mj2.$(OBJEXT) \ + extract_j2k_from_mj2.$(OBJEXT) +extract_j2k_from_mj2_OBJECTS = $(am_extract_j2k_from_mj2_OBJECTS) +extract_j2k_from_mj2_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +extract_j2k_from_mj2_DEPENDENCIES = ../libopenjpeg/libopenjpeg.la \ + $(am__DEPENDENCIES_2) +am_frames_to_mj2_OBJECTS = getopt.$(OBJEXT) mj2_convert.$(OBJEXT) \ + mj2.$(OBJEXT) frames_to_mj2.$(OBJEXT) +frames_to_mj2_OBJECTS = $(am_frames_to_mj2_OBJECTS) +frames_to_mj2_LDADD = $(LDADD) +frames_to_mj2_DEPENDENCIES = ../libopenjpeg/libopenjpeg.la \ + $(am__DEPENDENCIES_2) +am_mj2_to_frames_OBJECTS = getopt.$(OBJEXT) mj2_convert.$(OBJEXT) \ + mj2.$(OBJEXT) color.$(OBJEXT) mj2_to_frames.$(OBJEXT) +mj2_to_frames_OBJECTS = $(am_mj2_to_frames_OBJECTS) +mj2_to_frames_LDADD = $(LDADD) +mj2_to_frames_DEPENDENCIES = ../libopenjpeg/libopenjpeg.la \ + $(am__DEPENDENCIES_2) +am_wrap_j2k_in_mj2_OBJECTS = mj2.$(OBJEXT) wrap_j2k_in_mj2.$(OBJEXT) +wrap_j2k_in_mj2_OBJECTS = $(am_wrap_j2k_in_mj2_OBJECTS) +wrap_j2k_in_mj2_LDADD = $(LDADD) +wrap_j2k_in_mj2_DEPENDENCIES = ../libopenjpeg/libopenjpeg.la \ + $(am__DEPENDENCIES_2) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(extract_j2k_from_mj2_SOURCES) $(frames_to_mj2_SOURCES) \ + $(mj2_to_frames_SOURCES) $(wrap_j2k_in_mj2_SOURCES) +DIST_SOURCES = $(extract_j2k_from_mj2_SOURCES) \ + $(frames_to_mj2_SOURCES) $(mj2_to_frames_SOURCES) \ + $(wrap_j2k_in_mj2_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_NR = @BUILD_NR@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = $(COMPILERFLAGS) $(INCLUDES) +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JP3D_BUILD_NR = @JP3D_BUILD_NR@ +JP3D_MAJOR_NR = @JP3D_MAJOR_NR@ +JP3D_MINOR_NR = @JP3D_MINOR_NR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBPNG_CONFIG = @LIBPNG_CONFIG@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAJOR_NR = @MAJOR_NR@ +MAKEINFO = @MAKEINFO@ +MINOR_NR = @MINOR_NR@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG = @PKGCONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +jp3d_dir = @jp3d_dir@ +jpwl_dir = @jpwl_dir@ +lcms1includes = @lcms1includes@ +lcms1libs = @lcms1libs@ +lcms2includes = @lcms2includes@ +lcms2libs = @lcms2libs@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pngincludes = @pngincludes@ +pnglibs = @pnglibs@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +tiffincludes = @tiffincludes@ +tifflibs = @tifflibs@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_doxygen = @with_doxygen@ +COMPILERFLAGS = -Wall $(am__append_1) $(am__append_2) +USERLIBS = $(am__append_4) $(am__append_6) +INCLUDES = -I.. -I. -I../libopenjpeg -I../common $(am__append_3) \ + $(am__append_5) +LDADD = ../libopenjpeg/libopenjpeg.la $(USERLIBS) +frames_to_mj2_SOURCES = ../common/getopt.c mj2_convert.c mj2.c \ + frames_to_mj2.c + +mj2_to_frames_SOURCES = ../common/getopt.c mj2_convert.c mj2.c \ + ../common/color.c mj2_to_frames.c + +extract_j2k_from_mj2_SOURCES = mj2.c extract_j2k_from_mj2.c +wrap_j2k_in_mj2_SOURCES = mj2.c wrap_j2k_in_mj2.c +REPBIN = $(bin_PROGRAMS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mj2/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign mj2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +extract_j2k_from_mj2$(EXEEXT): $(extract_j2k_from_mj2_OBJECTS) $(extract_j2k_from_mj2_DEPENDENCIES) + @rm -f extract_j2k_from_mj2$(EXEEXT) + $(LINK) $(extract_j2k_from_mj2_OBJECTS) $(extract_j2k_from_mj2_LDADD) $(LIBS) +frames_to_mj2$(EXEEXT): $(frames_to_mj2_OBJECTS) $(frames_to_mj2_DEPENDENCIES) + @rm -f frames_to_mj2$(EXEEXT) + $(LINK) $(frames_to_mj2_OBJECTS) $(frames_to_mj2_LDADD) $(LIBS) +mj2_to_frames$(EXEEXT): $(mj2_to_frames_OBJECTS) $(mj2_to_frames_DEPENDENCIES) + @rm -f mj2_to_frames$(EXEEXT) + $(LINK) $(mj2_to_frames_OBJECTS) $(mj2_to_frames_LDADD) $(LIBS) +wrap_j2k_in_mj2$(EXEEXT): $(wrap_j2k_in_mj2_OBJECTS) $(wrap_j2k_in_mj2_DEPENDENCIES) + @rm -f wrap_j2k_in_mj2$(EXEEXT) + $(LINK) $(wrap_j2k_in_mj2_OBJECTS) $(wrap_j2k_in_mj2_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extract_j2k_from_mj2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frames_to_mj2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mj2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mj2_convert.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mj2_to_frames.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrap_j2k_in_mj2.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +getopt.o: ../common/getopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getopt.o -MD -MP -MF $(DEPDIR)/getopt.Tpo -c -o getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/getopt.Tpo $(DEPDIR)/getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/getopt.c' object='getopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getopt.o `test -f '../common/getopt.c' || echo '$(srcdir)/'`../common/getopt.c + +getopt.obj: ../common/getopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getopt.obj -MD -MP -MF $(DEPDIR)/getopt.Tpo -c -o getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/getopt.Tpo $(DEPDIR)/getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/getopt.c' object='getopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getopt.obj `if test -f '../common/getopt.c'; then $(CYGPATH_W) '../common/getopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/getopt.c'; fi` + +color.o: ../common/color.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT color.o -MD -MP -MF $(DEPDIR)/color.Tpo -c -o color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/color.Tpo $(DEPDIR)/color.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/color.c' object='color.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o color.o `test -f '../common/color.c' || echo '$(srcdir)/'`../common/color.c + +color.obj: ../common/color.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT color.obj -MD -MP -MF $(DEPDIR)/color.Tpo -c -o color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/color.Tpo $(DEPDIR)/color.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/color.c' object='color.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o color.obj `if test -f '../common/color.c'; then $(CYGPATH_W) '../common/color.c'; else $(CYGPATH_W) '$(srcdir)/../common/color.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) all-local +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS + + +all-local: + $(INSTALL) -d ../bin + $(INSTALL) $(bin_PROGRAMS) ../bin + @echo "" > .report.txt + @(for f in ${REPBIN} ; do \ + echo "Installing: ${prefix}/bin/$$f" >> .report.txt ; \ + done) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/menuetlibc/openjpeg/mj2/Makefile.nix b/contrib/menuetlibc/openjpeg/mj2/Makefile.nix new file mode 100644 index 0000000000..75302bd9de --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/Makefile.nix @@ -0,0 +1,64 @@ +#mj2 Makefile.nix +include ../config.nix + +CFLAGS = -Wall + +INSTALL_BIN = $(prefix)/bin +USERLIBS = -lm +INCLUDE = -I.. -I. -I../libopenjpeg -I../common + +ifeq ($(WITH_LCMS2),yes) +INCLUDE += $(LCMS2_INCLUDE) +USERLIBS += $(LCMS2_LIB) +endif + +ifeq ($(WITH_LCMS1),yes) +INCLUDE += $(LCMS1_INCLUDE) +USERLIBS += $(LCMS1_LIB) +endif + +CFLAGS += $(INCLUDE) -lstdc++ # -g -p -pg + +ifeq ($(ENABLE_SHARED),yes) +ELIB = ../libopenjpeg.so.$(MAJOR).$(MINOR).$(BUILD) +else +ELIB = ../libopenjpeg.a +endif + +all: frames_to_mj2 mj2_to_frames extract_j2k_from_mj2 wrap_j2k_in_mj2 + install -d ../bin + install frames_to_mj2 mj2_to_frames extract_j2k_from_mj2 \ + wrap_j2k_in_mj2 ../bin + +frames_to_mj2: frames_to_mj2.c $(ELIB) + $(CC) $(CFLAGS) ../common/getopt.c mj2_convert.c mj2.c frames_to_mj2.c \ + -o frames_to_mj2 $(ELIB) $(USERLIBS) + +mj2_to_frames: mj2_to_frames.c $(ELIB) + $(CC) $(CFLAGS) ../common/getopt.c mj2_convert.c mj2.c \ + ../common/color.c mj2_to_frames.c \ + -o mj2_to_frames $(ELIB) $(USERLIBS) + +extract_j2k_from_mj2: extract_j2k_from_mj2.c $(ELIB) + $(CC) $(CFLAGS) mj2.c extract_j2k_from_mj2.c \ + -o extract_j2k_from_mj2 $(ELIB) $(USERLIBS) + +wrap_j2k_in_mj2: wrap_j2k_in_mj2.c $(ELIB) + $(CC) $(CFLAGS) mj2.c wrap_j2k_in_mj2.c \ + -o wrap_j2k_in_mj2 $(ELIB) $(USERLIBS) + +clean: + rm -f frames_to_mj2 mj2_to_frames extract_j2k_from_mj2 wrap_j2k_in_mj2 + +install: all + install -d $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root frames_to_mj2 $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root mj2_to_frames $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root extract_j2k_from_mj2 $(DESTDIR)$(INSTALL_BIN) + install -m 755 -o root -g root wrap_j2k_in_mj2 $(DESTDIR)$(INSTALL_BIN) + +uninstall: + rm -f $(DESTDIR)$(INSTALL_BIN)/frames_to_mj2 + rm -f $(DESTDIR)$(INSTALL_BIN)/mj2_to_frames + rm -f $(DESTDIR)$(INSTALL_BIN)/extract_j2k_from_mj2 + rm -f $(DESTDIR)$(INSTALL_BIN)/wrap_j2k_in_mj2 diff --git a/contrib/menuetlibc/openjpeg/mj2/extract_j2k_from_mj2.c b/contrib/menuetlibc/openjpeg/mj2/extract_j2k_from_mj2.c new file mode 100644 index 0000000000..5c1441ad24 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/extract_j2k_from_mj2.c @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2003-2007, Francois-Olivier Devaux + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include +#include +#include + +#include "openjpeg.h" +#include "../libopenjpeg/j2k.h" +#include "../libopenjpeg/jp2.h" +#include "mj2.h" + +/* -------------------------------------------------------------------------- */ + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting a FILE* client object +*/ +void info_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[INFO] %s", msg); +} + +/* -------------------------------------------------------------------------- */ + + +int main(int argc, char *argv[]) { + opj_dinfo_t* dinfo; + opj_event_mgr_t event_mgr; /* event manager */ + int tnum; + unsigned int snum; + opj_mj2_t *movie; + mj2_tk_t *track; + mj2_sample_t *sample; + unsigned char* frame_codestream; + FILE *file, *outfile; + char outfilename[50]; + mj2_dparameters_t parameters; + + if (argc != 3) { + printf("Usage: %s mj2filename output_location\n",argv[0]); + printf("Example: %s foreman.mj2 output/foreman\n",argv[0]); + return 1; + } + + file = fopen(argv[1], "rb"); + + if (!file) { + fprintf(stderr, "failed to open %s for reading\n", argv[1]); + return 1; + } + + /* + configure the event callbacks (not required) + setting of each callback is optionnal + */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = info_callback; + + /* get a MJ2 decompressor handle */ + dinfo = mj2_create_decompress(); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using user parameters */ + movie = (opj_mj2_t*) dinfo->mj2_handle; + mj2_setup_decoder((opj_mj2_t*)dinfo->mj2_handle, ¶meters); + + if (mj2_read_struct(file, movie)) // Creating the movie structure + return 1; + + // Decode first video track + tnum = 0; + while (movie->tk[tnum].track_type != 0) + tnum ++; + + track = &movie->tk[tnum]; + + fprintf(stdout,"Extracting %d frames from file...\n",track->num_samples); + + for (snum=0; snum < track->num_samples; snum++) + { + sample = &track->sample[snum]; + frame_codestream = (unsigned char*) malloc (sample->sample_size-8); // Skipping JP2C marker + fseek(file,sample->offset+8,SEEK_SET); + fread(frame_codestream,sample->sample_size-8,1, file); // Assuming that jp and ftyp markers size do + + sprintf(outfilename,"%s_%05d.j2k",argv[2],snum); + outfile = fopen(outfilename, "wb"); + if (!outfile) { + fprintf(stderr, "failed to open %s for writing\n",outfilename); + return 1; + } + fwrite(frame_codestream,sample->sample_size-8,1,outfile); + fclose(outfile); + free(frame_codestream); + } + fclose(file); + fprintf(stdout, "%d frames correctly extracted\n", snum); + + /* free remaining structures */ + if(dinfo) { + mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle); + } + + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.c b/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.c new file mode 100644 index 0000000000..6b1fd536a4 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.c @@ -0,0 +1,806 @@ +/* +* Copyright (c) 2003-2004, François-Olivier Devaux +* Copyright (c) 2002-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. 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. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. +*/ + +#include +#include +#include + +#include "openjpeg.h" +#include "../libopenjpeg/j2k_lib.h" +#include "../libopenjpeg/j2k.h" +#include "../libopenjpeg/jp2.h" +#include "../libopenjpeg/cio.h" +#include "mj2.h" +#include "mj2_convert.h" +#include "getopt.h" + +/** +Size of memory first allocated for MOOV box +*/ +#define TEMP_BUF 10000 + +/* -------------------------------------------------------------------------- */ + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting a FILE* client object +*/ +void info_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[INFO] %s", msg); +} + +/* -------------------------------------------------------------------------- */ + + +void help_display() +{ + fprintf(stdout,"HELP for frames_to_mj2\n----\n\n"); + fprintf(stdout,"- the -h option displays this help information on screen\n\n"); + + + fprintf(stdout,"List of parameters for the MJ2 encoder:\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"REMARKS:\n"); + fprintf(stdout,"---------\n"); + fprintf(stdout,"\n"); + fprintf + (stdout,"The markers written to the main_header are : SOC SIZ COD QCD COM.\n"); + fprintf + (stdout,"COD and QCD never appear in the tile_header.\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"By default:\n"); + fprintf(stdout,"------------\n"); + fprintf(stdout,"\n"); + fprintf(stdout," * Lossless\n"); + fprintf(stdout," * 1 tile\n"); + fprintf(stdout," * Size of precinct : 2^15 x 2^15 (means 1 precinct)\n"); + fprintf(stdout," * Size of code-block : 64 x 64\n"); + fprintf(stdout," * Number of resolutions: 6\n"); + fprintf(stdout," * No SOP marker in the codestream\n"); + fprintf(stdout," * No EPH marker in the codestream\n"); + fprintf(stdout," * No sub-sampling in x or y direction\n"); + fprintf(stdout," * No mode switch activated\n"); + fprintf(stdout," * Progression order: LRCP\n"); + fprintf(stdout," * No index file\n"); + fprintf(stdout," * No ROI upshifted\n"); + fprintf(stdout," * No offset of the origin of the image\n"); + fprintf(stdout," * No offset of the origin of the tiles\n"); + fprintf(stdout," * Reversible DWT 5-3\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"Parameters:\n"); + fprintf(stdout,"------------\n"); + fprintf(stdout,"\n"); + fprintf + (stdout,"Required Parameters (except with -h):\n"); + fprintf + (stdout,"-i : source file (-i source.yuv) \n"); + fprintf + (stdout,"-o : destination file (-o dest.mj2) \n"); + fprintf + (stdout,"Optional Parameters:\n"); + fprintf(stdout,"-h : display the help information \n"); + fprintf(stdout,"-r : different compression ratios for successive layers (-r 20,10,5)\n "); + fprintf(stdout," - The rate specified for each quality level is the desired \n"); + fprintf(stdout," compression factor.\n"); + fprintf(stdout," Example: -r 20,10,1 means quality 1: compress 20x, \n"); + fprintf(stdout," quality 2: compress 10x and quality 3: compress lossless\n"); + fprintf(stdout," (options -r and -q cannot be used together)\n "); + + fprintf(stdout,"-q : different psnr for successive layers (-q 30,40,50) \n "); + + fprintf(stdout," (options -r and -q cannot be used together)\n "); + + fprintf(stdout,"-n : number of resolutions (-n 3) \n"); + fprintf(stdout,"-b : size of code block (-b 32,32) \n"); + fprintf(stdout,"-c : size of precinct (-c 128,128) \n"); + fprintf(stdout,"-t : size of tile (-t 512,512) \n"); + fprintf + (stdout,"-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n"); + fprintf + (stdout,"-s : subsampling factor (-s 2,2) [-s X,Y] \n"); + fprintf(stdout," Remark: subsampling bigger than 2 can produce error\n"); + fprintf + (stdout,"-SOP : write SOP marker before each packet \n"); + fprintf + (stdout,"-EPH : write EPH marker after each header packet \n"); + fprintf + (stdout,"-M : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n"); + fprintf + (stdout," 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n"); + fprintf + (stdout," Indicate multiple modes by adding their values. \n"); + fprintf + (stdout," ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n"); + fprintf + (stdout,"-ROI : c=%%d,U=%%d : quantization indices upshifted \n"); + fprintf + (stdout," for component c=%%d [%%d = 0,1,2]\n"); + fprintf + (stdout," with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n"); + fprintf + (stdout,"-d : offset of the origin of the image (-d 150,300) \n"); + fprintf + (stdout,"-T : offset of the origin of the tiles (-T 100,75) \n"); + fprintf(stdout,"-I : use the irreversible DWT 9-7 (-I) \n"); + fprintf(stdout,"-W : image width, height and the dx and dy subsampling \n"); + fprintf(stdout," of the Cb and Cr components for YUV files \n"); + fprintf(stdout," (default is '352,288,2,2' for CIF format's 352x288 and 4:2:0)\n"); + fprintf(stdout,"-F : video frame rate (set to 25 by default)\n"); + + fprintf(stdout,"\n"); + fprintf(stdout,"IMPORTANT:\n"); + fprintf(stdout,"-----------\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"The index file has the structure below:\n"); + fprintf(stdout,"---------------------------------------\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"Image_height Image_width\n"); + fprintf(stdout,"progression order\n"); + fprintf(stdout,"Tiles_size_X Tiles_size_Y\n"); + fprintf(stdout,"Components_nb\n"); + fprintf(stdout,"Layers_nb\n"); + fprintf(stdout,"decomposition_levels\n"); + fprintf(stdout,"[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n"); + fprintf(stdout," [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n"); + fprintf(stdout,"Main_header_end_position\n"); + fprintf(stdout,"Codestream_size\n"); + fprintf(stdout,"Tile_0 start_pos end_Theader end_pos TotalDisto NumPix MaxMSE\n"); + fprintf(stdout,"Tile_1 '' '' '' '' '' ''\n"); + fprintf(stdout,"...\n"); + fprintf(stdout,"Tile_Nt '' '' '' '' '' ''\n"); + fprintf(stdout,"Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n"); + fprintf(stdout,"...\n"); + fprintf(stdout,"Tpacket_Np '' '' '' '' '' '' '' ''\n"); + + fprintf(stdout,"MaxDisto\n"); + + fprintf(stdout,"TotalDisto\n\n"); +} + +int give_progression(char progression[4]) +{ + if (progression[0] == 'L' && progression[1] == 'R' + && progression[2] == 'C' && progression[3] == 'P') { + return 0; + } else { + if (progression[0] == 'R' && progression[1] == 'L' + && progression[2] == 'C' && progression[3] == 'P') { + return 1; + } else { + if (progression[0] == 'R' && progression[1] == 'P' + && progression[2] == 'C' && progression[3] == 'L') { + return 2; + } else { + if (progression[0] == 'P' && progression[1] == 'C' + && progression[2] == 'R' && progression[3] == 'L') { + return 3; + } else { + if (progression[0] == 'C' && progression[1] == 'P' + && progression[2] == 'R' && progression[3] == 'L') { + return 4; + } else { + return -1; + } + } + } + } + } +} + + + + +int main(int argc, char **argv) +{ + mj2_cparameters_t mj2_parameters; /* MJ2 compression parameters */ + opj_cparameters_t *j2k_parameters; /* J2K compression parameters */ + opj_event_mgr_t event_mgr; /* event manager */ + opj_cio_t *cio; + int value; + opj_mj2_t *movie; + opj_image_t *img; + int i, j; + char *s, S1, S2, S3; + unsigned char *buf; + int x1, y1, len; + long mdat_initpos, offset; + FILE *mj2file; + int sampleno; + opj_cinfo_t* cinfo; + bool bSuccess; + int numframes; + double total_time = 0; + + /* default value */ + /* ------------- */ + mj2_parameters.Dim[0] = 0; + mj2_parameters.Dim[1] = 0; + mj2_parameters.w = 352; // CIF default value + mj2_parameters.h = 288; // CIF default value + mj2_parameters.CbCr_subsampling_dx = 2; // CIF default value + mj2_parameters.CbCr_subsampling_dy = 2; // CIF default value + mj2_parameters.frame_rate = 25; + /* + configure the event callbacks (not required) + setting of each callback is optionnal + */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = NULL; + + /* set J2K encoding parameters to default values */ + opj_set_default_encoder_parameters(&mj2_parameters.j2k_parameters); + j2k_parameters = &mj2_parameters.j2k_parameters; + + /* Create comment for codestream */ + if(j2k_parameters->cp_comment == NULL) { + const char comment[] = "Created by OpenJPEG version "; + const size_t clen = strlen(comment); + const char *version = opj_version(); + j2k_parameters->cp_comment = (char*)malloc(clen+strlen(version)+1); + sprintf(j2k_parameters->cp_comment,"%s%s", comment, version); + } + + mj2_parameters.decod_format = 0; + mj2_parameters.cod_format = 0; + + while (1) { + int c = getopt(argc, argv, + "i:o:r:q:f:t:n:c:b:p:s:d:P:S:E:M:R:T:C:I:W:F:h"); + if (c == -1) + break; + switch (c) { + case 'i': /* IN fill */ + { + char *infile = optarg; + s = optarg; + while (*s) { + s++; + } + s--; + S3 = *s; + s--; + S2 = *s; + s--; + S1 = *s; + + if ((S1 == 'y' && S2 == 'u' && S3 == 'v') + || (S1 == 'Y' && S2 == 'U' && S3 == 'V')) { + mj2_parameters.decod_format = YUV_DFMT; + } + else { + fprintf(stderr, + "!! Unrecognized format for infile : %c%c%c [accept only *.yuv] !!\n\n", + S1, S2, S3); + return 1; + } + strncpy(mj2_parameters.infile, infile, sizeof(mj2_parameters.infile)-1); + } + break; + /* ----------------------------------------------------- */ + case 'o': /* OUT fill */ + { + char *outfile = optarg; + while (*outfile) { + outfile++; + } + outfile--; + S3 = *outfile; + outfile--; + S2 = *outfile; + outfile--; + S1 = *outfile; + + outfile = optarg; + + if ((S1 == 'm' && S2 == 'j' && S3 == '2') + || (S1 == 'M' && S2 == 'J' && S3 == '2')) + mj2_parameters.cod_format = MJ2_CFMT; + else { + fprintf(stderr, + "Unknown output format image *.%c%c%c [only *.mj2]!! \n", + S1, S2, S3); + return 1; + } + strncpy(mj2_parameters.outfile, outfile, sizeof(mj2_parameters.outfile)-1); + } + break; + /* ----------------------------------------------------- */ + case 'r': /* rates rates/distorsion */ + { + float rate; + s = optarg; + while (sscanf(s, "%f", &rate) == 1) { + j2k_parameters->tcp_rates[j2k_parameters->tcp_numlayers] = rate * 2; + j2k_parameters->tcp_numlayers++; + while (*s && *s != ',') { + s++; + } + if (!*s) + break; + s++; + } + j2k_parameters->cp_disto_alloc = 1; + } + break; + /* ----------------------------------------------------- */ + case 'q': /* add fixed_quality */ + s = optarg; + while (sscanf(s, "%f", &j2k_parameters->tcp_distoratio[j2k_parameters->tcp_numlayers]) == 1) { + j2k_parameters->tcp_numlayers++; + while (*s && *s != ',') { + s++; + } + if (!*s) + break; + s++; + } + j2k_parameters->cp_fixed_quality = 1; + break; + /* dda */ + /* ----------------------------------------------------- */ + case 'f': /* mod fixed_quality (before : -q) */ + { + int *row = NULL, *col = NULL; + int numlayers = 0, numresolution = 0, matrix_width = 0; + + s = optarg; + sscanf(s, "%d", &numlayers); + s++; + if (numlayers > 9) + s++; + + j2k_parameters->tcp_numlayers = numlayers; + numresolution = j2k_parameters->numresolution; + matrix_width = numresolution * 3; + j2k_parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int)); + s = s + 2; + + for (i = 0; i < numlayers; i++) { + row = &j2k_parameters->cp_matrice[i * matrix_width]; + col = row; + j2k_parameters->tcp_rates[i] = 1; + sscanf(s, "%d,", &col[0]); + s += 2; + if (col[0] > 9) + s++; + col[1] = 0; + col[2] = 0; + for (j = 1; j < numresolution; j++) { + col += 3; + sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]); + s += 6; + if (col[0] > 9) + s++; + if (col[1] > 9) + s++; + if (col[2] > 9) + s++; + } + if (i < numlayers - 1) + s++; + } + j2k_parameters->cp_fixed_alloc = 1; + } + break; + /* ----------------------------------------------------- */ + case 't': /* tiles */ + sscanf(optarg, "%d,%d", &j2k_parameters->cp_tdx, &j2k_parameters->cp_tdy); + j2k_parameters->tile_size_on = true; + break; + /* ----------------------------------------------------- */ + case 'n': /* resolution */ + sscanf(optarg, "%d", &j2k_parameters->numresolution); + break; + /* ----------------------------------------------------- */ + case 'c': /* precinct dimension */ + { + char sep; + int res_spec = 0; + + char *s = optarg; + do { + sep = 0; + sscanf(s, "[%d,%d]%c", &j2k_parameters->prcw_init[res_spec], + &j2k_parameters->prch_init[res_spec], &sep); + j2k_parameters->csty |= 0x01; + res_spec++; + s = strpbrk(s, "]") + 2; + } + while (sep == ','); + j2k_parameters->res_spec = res_spec; + } + break; + + /* ----------------------------------------------------- */ + case 'b': /* code-block dimension */ + { + int cblockw_init = 0, cblockh_init = 0; + sscanf(optarg, "%d,%d", &cblockw_init, &cblockh_init); + if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024 + || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) { + fprintf(stderr, + "!! Size of code_block error (option -b) !!\n\nRestriction :\n" + " * width*height<=4096\n * 4<=width,height<= 1024\n\n"); + return 1; + } + j2k_parameters->cblockw_init = cblockw_init; + j2k_parameters->cblockh_init = cblockh_init; + } + break; + /* ----------------------------------------------------- */ + case 'p': /* progression order */ + { + char progression[4]; + + strncpy(progression, optarg, 4); + j2k_parameters->prog_order = give_progression(progression); + if (j2k_parameters->prog_order == -1) { + fprintf(stderr, "Unrecognized progression order " + "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n"); + return 1; + } + } + break; + /* ----------------------------------------------------- */ + case 's': /* subsampling factor */ + { + if (sscanf(optarg, "%d,%d", &j2k_parameters->subsampling_dx, + &j2k_parameters->subsampling_dy) != 2) { + fprintf(stderr, "'-s' sub-sampling argument error ! [-s dx,dy]\n"); + return 1; + } + } + break; + /* ----------------------------------------------------- */ + case 'd': /* coordonnate of the reference grid */ + { + if (sscanf(optarg, "%d,%d", &j2k_parameters->image_offset_x0, + &j2k_parameters->image_offset_y0) != 2) { + fprintf(stderr, "-d 'coordonnate of the reference grid' argument " + "error !! [-d x0,y0]\n"); + return 1; + } + } + break; + /* ----------------------------------------------------- */ + case 'h': /* Display an help description */ + help_display(); + return 0; + break; + /* ----------------------------------------------------- */ + case 'P': /* POC */ + { + int numpocs = 0; /* number of progression order change (POC) default 0 */ + opj_poc_t *POC = NULL; /* POC : used in case of Progression order change */ + + char *s = optarg; + POC = j2k_parameters->POC; + + while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile, + &POC[numpocs].resno0, &POC[numpocs].compno0, + &POC[numpocs].layno1, &POC[numpocs].resno1, + &POC[numpocs].compno1, POC[numpocs].progorder) == 7) { + POC[numpocs].prg1 = give_progression(POC[numpocs].progorder); + numpocs++; + while (*s && *s != '/') { + s++; + } + if (!*s) { + break; + } + s++; + } + j2k_parameters->numpocs = numpocs; + } + break; + /* ------------------------------------------------------ */ + case 'S': /* SOP marker */ + j2k_parameters->csty |= 0x02; + break; + /* ------------------------------------------------------ */ + case 'E': /* EPH marker */ + j2k_parameters->csty |= 0x04; + break; + /* ------------------------------------------------------ */ + case 'M': /* Mode switch pas tous au point !! */ + if (sscanf(optarg, "%d", &value) == 1) { + for (i = 0; i <= 5; i++) { + int cache = value & (1 << i); + if (cache) + j2k_parameters->mode |= (1 << i); + } + } + break; + /* ------------------------------------------------------ */ + case 'R': /* ROI */ + { + if (sscanf(optarg, "OI:c=%d,U=%d", &j2k_parameters->roi_compno, + &j2k_parameters->roi_shift) != 2) { + fprintf(stderr, "ROI error !! [-ROI:c='compno',U='shift']\n"); + return 1; + } + } + break; + /* ------------------------------------------------------ */ + case 'T': /* Tile offset */ + { + if (sscanf(optarg, "%d,%d", &j2k_parameters->cp_tx0, &j2k_parameters->cp_ty0) != 2) { + fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]"); + return 1; + } + } + break; + /* ------------------------------------------------------ */ + case 'C': /* Add a comment */ + { + j2k_parameters->cp_comment = (char*)malloc(strlen(optarg) + 1); + if(j2k_parameters->cp_comment) { + strcpy(j2k_parameters->cp_comment, optarg); + } + } + break; + /* ------------------------------------------------------ */ + case 'I': /* reversible or not */ + { + j2k_parameters->irreversible = 1; + } + break; + /* ------------------------------------------------------ */ + case 'W': /* Width and Height and Cb and Cr subsampling in case of YUV format files */ + if (sscanf + (optarg, "%d,%d,%d,%d", &mj2_parameters.w, &mj2_parameters.h, &mj2_parameters.CbCr_subsampling_dx, + &mj2_parameters.CbCr_subsampling_dy) != 4) { + fprintf(stderr, "-W argument error"); + return 1; + } + break; + /* ------------------------------------------------------ */ + case 'F': /* Video frame rate */ + if (sscanf(optarg, "%d", &mj2_parameters.frame_rate) != 1) { + fprintf(stderr, "-F argument error"); + return 1; + } + break; + /* ------------------------------------------------------ */ + default: + return 1; + } + } + + /* Error messages */ + /* -------------- */ + if (!mj2_parameters.cod_format || !mj2_parameters.decod_format) { + fprintf(stderr, + "Usage: %s -i yuv-file -o mj2-file (+ options)\n",argv[0]); + return 1; + } + + if ((j2k_parameters->cp_disto_alloc || j2k_parameters->cp_fixed_alloc || j2k_parameters->cp_fixed_quality) + && (!(j2k_parameters->cp_disto_alloc ^ j2k_parameters->cp_fixed_alloc ^ j2k_parameters->cp_fixed_quality))) { + fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n"); + return 1; + } /* mod fixed_quality */ + + /* if no rate entered, lossless by default */ + if (j2k_parameters->tcp_numlayers == 0) { + j2k_parameters->tcp_rates[0] = 0; /* MOD antonin : losslessbug */ + j2k_parameters->tcp_numlayers++; + j2k_parameters->cp_disto_alloc = 1; + } + + if((j2k_parameters->cp_tx0 > j2k_parameters->image_offset_x0) || (j2k_parameters->cp_ty0 > j2k_parameters->image_offset_y0)) { + fprintf(stderr, + "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n", + j2k_parameters->cp_tx0, j2k_parameters->image_offset_x0, j2k_parameters->cp_ty0, j2k_parameters->image_offset_y0); + return 1; + } + + for (i = 0; i < j2k_parameters->numpocs; i++) { + if (j2k_parameters->POC[i].prg == -1) { + fprintf(stderr, + "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n", + i + 1); + } + } + + if (j2k_parameters->cp_tdx > mj2_parameters.Dim[0] || j2k_parameters->cp_tdy > mj2_parameters.Dim[1]) { + fprintf(stderr, + "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n", + j2k_parameters->cp_tdx, mj2_parameters.Dim[0], j2k_parameters->cp_tdy, mj2_parameters.Dim[1]); + return 1; + } + + /* to respect profile - 0 */ + /* ---------------------- */ + + x1 = !mj2_parameters.Dim[0] ? (mj2_parameters.w - 1) * j2k_parameters->subsampling_dx + + 1 : mj2_parameters.Dim[0] + (mj2_parameters.w - 1) * j2k_parameters->subsampling_dx + 1; + y1 = !mj2_parameters.Dim[1] ? (mj2_parameters.h - 1) * j2k_parameters->subsampling_dy + + 1 : mj2_parameters.Dim[1] + (mj2_parameters.h - 1) * j2k_parameters->subsampling_dy + 1; + mj2_parameters.numcomps = 3; /* Because YUV files only have 3 components */ + mj2_parameters.prec = 8; /* Because in YUV files, components have 8-bit depth */ + + j2k_parameters->tcp_mct = 0; + + mj2file = fopen(mj2_parameters.outfile, "wb"); + + if (!mj2file) { + fprintf(stderr, "failed to open %s for writing\n", argv[2]); + return 1; + } + + /* get a MJ2 decompressor handle */ + cinfo = mj2_create_compress(); + movie = (opj_mj2_t*)cinfo->mj2_handle; + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr); + + /* setup encoder parameters */ + mj2_setup_encoder(movie, &mj2_parameters); + + movie->tk[0].num_samples = yuv_num_frames(&movie->tk[0],mj2_parameters.infile); + if (movie->tk[0].num_samples == -1) { + return 1; + } + + // One sample per chunk + movie->tk[0].chunk = (mj2_chunk_t*) malloc(movie->tk[0].num_samples * sizeof(mj2_chunk_t)); + movie->tk[0].sample = (mj2_sample_t*) malloc(movie->tk[0].num_samples * sizeof(mj2_sample_t)); + + if (mj2_init_stdmovie(movie)) { + fprintf(stderr, "Error with movie initialization"); + return 1; + }; + + // Writing JP, FTYP and MDAT boxes + buf = (unsigned char*) malloc (300 * sizeof(unsigned char)); // Assuming that the JP and FTYP + // boxes won't be longer than 300 bytes + cio = opj_cio_open((opj_common_ptr)movie->cinfo, buf, 300); + mj2_write_jp(cio); + mj2_write_ftyp(movie, cio); + mdat_initpos = cio_tell(cio); + cio_skip(cio, 4); + cio_write(cio, MJ2_MDAT, 4); + fwrite(buf,cio_tell(cio),1,mj2file); + offset = cio_tell(cio); + opj_cio_close(cio); + free(buf); + + for (i = 0; i < movie->num_stk + movie->num_htk + movie->num_vtk; i++) { + if (movie->tk[i].track_type != 0) { + fprintf(stderr, "Unable to write sound or hint tracks\n"); + } else { + mj2_tk_t *tk; + int buflen = 0; + + tk = &movie->tk[i]; + tk->num_chunks = tk->num_samples; + numframes = tk->num_samples; + + fprintf(stderr, "Video Track number %d\n", i + 1); + + img = mj2_image_create(tk, j2k_parameters); + buflen = 2 * (tk->w * tk->h * 8); + buf = (unsigned char *) malloc(buflen*sizeof(unsigned char)); + + for (sampleno = 0; sampleno < numframes; sampleno++) { + double init_time = opj_clock(); + double elapsed_time; + if (yuvtoimage(tk, img, sampleno, j2k_parameters, mj2_parameters.infile)) { + fprintf(stderr, "Error with frame number %d in YUV file\n", sampleno); + return 1; + } + + /* setup the encoder parameters using the current image and user parameters */ + opj_setup_encoder(cinfo, j2k_parameters, img); + + cio = opj_cio_open((opj_common_ptr)movie->cinfo, buf, buflen); + + cio_skip(cio, 4); + cio_write(cio, JP2_JP2C, 4); // JP2C + + /* encode the image */ + bSuccess = opj_encode(cinfo, cio, img, NULL); + if (!bSuccess) { + opj_cio_close(cio); + fprintf(stderr, "failed to encode image\n"); + return 1; + } + + len = cio_tell(cio) - 8; + cio_seek(cio, 0); + cio_write(cio, len+8,4); + opj_cio_close(cio); + tk->sample[sampleno].sample_size = len+8; + tk->sample[sampleno].offset = offset; + tk->chunk[sampleno].offset = offset; // There is one sample per chunk + fwrite(buf, 1, len+8, mj2file); + offset += len+8; + elapsed_time = opj_clock()-init_time; + fprintf(stderr, "Frame number %d/%d encoded in %.2f mseconds\n", sampleno + 1, numframes, elapsed_time*1000); + total_time += elapsed_time; + + } + /* free buffer data */ + free(buf); + /* free image data */ + opj_image_destroy(img); + } + } + + fseek(mj2file, mdat_initpos, SEEK_SET); + + buf = (unsigned char*) malloc(4*sizeof(unsigned char)); + + // Init a cio to write box length variable in a little endian way + cio = opj_cio_open(NULL, buf, 4); + cio_write(cio, offset - mdat_initpos, 4); + fwrite(buf, 4, 1, mj2file); + fseek(mj2file,0,SEEK_END); + free(buf); + + // Writing MOOV box + buf = (unsigned char*) malloc ((TEMP_BUF+numframes*20) * sizeof(unsigned char)); + cio = opj_cio_open(movie->cinfo, buf, (TEMP_BUF+numframes*20)); + mj2_write_moov(movie, cio); + fwrite(buf,cio_tell(cio),1,mj2file); + free(buf); + + fprintf(stdout,"Total encoding time: %.2f s for %d frames (%.1f fps)\n", total_time, numframes, (float)numframes/total_time); + + // Ending program + + fclose(mj2file); + /* free remaining compression structures */ + mj2_destroy_compress(movie); + free(cinfo); + /* free user parameters structure */ + if(j2k_parameters->cp_comment) free(j2k_parameters->cp_comment); + if(j2k_parameters->cp_matrice) free(j2k_parameters->cp_matrice); + opj_cio_close(cio); + + return 0; +} + + diff --git a/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.dsp b/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.dsp new file mode 100644 index 0000000000..c1da267604 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.dsp @@ -0,0 +1,212 @@ +# Microsoft Developer Studio Project File - Name="frames_to_mj2" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=frames_to_mj2 - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "frames_to_mj2.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "frames_to_mj2.mak" CFG="frames_to_mj2 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "frames_to_mj2 - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "frames_to_mj2 - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "frames_to_mj2 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FR /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# SUBTRACT LINK32 /pdb:none /incremental:yes /debug + +!ELSEIF "$(CFG)" == "frames_to_mj2 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "frames_to_mj2___Win32_Debug0" +# PROP BASE Intermediate_Dir "frames_to_mj2___Win32_Debug0" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "frames_to_mj2___Win32_Debug0" +# PROP Intermediate_Dir "frames_to_mj2___Win32_Debug0" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MT /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcmt" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "frames_to_mj2 - Win32 Release" +# Name "frames_to_mj2 - Win32 Debug" +# Begin Group "MJ2" + +# PROP Default_Filter "" +# Begin Group "MJ2 Header Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\mj2.h +# End Source File +# Begin Source File + +SOURCE=.\mj2_convert.h +# End Source File +# End Group +# Begin Group "MJ2 Source Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\frames_to_mj2.c +# End Source File +# Begin Source File + +SOURCE=.\compat\getopt.c +# End Source File +# Begin Source File + +SOURCE=.\mj2.c +# End Source File +# Begin Source File + +SOURCE=.\mj2_convert.c +# End Source File +# End Group +# End Group +# Begin Group "Libopenjpeg Header files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\libopenjpeg\bio.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\cio.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\dwt.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\event.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\fix.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\image.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\int.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\j2k.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\j2k_lib.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\jp2.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\jpt.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\mct.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\mqc.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\openjpeg.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\opj_includes.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\pi.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\raw.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\t1.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\t2.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\tcd.h +# End Source File +# Begin Source File + +SOURCE=..\libopenjpeg\tgt.h +# End Source File +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.dsw b/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.dsw new file mode 100644 index 0000000000..92c5fc1776 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "frames_to_mj2"=".\frames_to_mj2.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG + End Project Dependency +}}} + +############################################################################### + +Project: "LibOpenJPEG"="..\LibOpenJPEG.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.sln b/contrib/menuetlibc/openjpeg/mj2/frames_to_mj2.sln new file mode 100644 index 0000000000000000000000000000000000000000..f62e33dc28310e3481cebc013182f6db78196f0c GIT binary patch literal 1508 zcmbW1-)@^Q6vlU3B;EnBn@*~cArPF4USKe-rgn=KX}g(JkzgWM1V{YoO`0d$MIWiJ z(8CfE+)f=0SN1vfIX{2?%=4coUAq;FQdTmnjh~`wlH8cpO)8`@lX+7MSs1a%`Gpb7 za+SauURG^zVqvUnpI_~9F!pq9TFQIAsL#y}q2VNClpsRg0NHkg5s7RYVI1IaVnfz- zw&oY((lE0!S@G(wmUpXr$GmtIupSm`sM^LiZs?DRM=4^CJw`4eAtGbnLvic{o*T0W zzOAWiXM2trumJM;ej4#LFH&AC1h3l8YgyI%6znT_wxZVES`$q0O3Wi?uvhIFM>RY-N>EUgC UlPL!i#lg*t{j + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/mj2/meta_out.c b/contrib/menuetlibc/openjpeg/mj2/meta_out.c new file mode 100644 index 0000000000..ff80b5e58b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/meta_out.c @@ -0,0 +1,2181 @@ +/* meta_out.c */ +/* Dump MJ2, JP2 metadata (partial so far) to xml file */ +/* Callable from mj2_to_metadata */ +/* Contributed to Open JPEG by Glenn Pearson, contract software developer, U.S. National Library of Medicine. + +The base code in this file was developed by the author as part of a video archiving +project for the U.S. National Library of Medicine, Bethesda, MD. +It is the policy of NLM (and U.S. government) to not assert copyright. + +A non-exclusive copy of this code has been contributed to the Open JPEG project. +Except for copyright, inclusion of the code within Open JPEG for distribution and use +can be bound by the Open JPEG open-source license and disclaimer, expressed elsewhere. +*/ + +#include /* for time functions */ + +#include "../libopenjpeg/opj_includes.h" +#include "mj2.h" + +#include +#include "meta_out.h" + +static BOOL notes = TRUE; +static BOOL sampletables = FALSE; +static BOOL raw = TRUE; +static BOOL derived = TRUE; + +opj_tcp_t *j2k_default_tcp; + +/* Forwards */ +int xml_write_overall_header(FILE *file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, opj_event_mgr_t *event_mgr); +int xml_write_moov(FILE *file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, opj_event_mgr_t *event_mgr); + +void uint_to_chars(unsigned int value, char* buf); + +void xml_write_trak(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum, unsigned int sampleframe, opj_event_mgr_t *event_mgr); +void xml_write_tkhd(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum); +void xml_write_udta(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum); +void xml_write_mdia(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum); +void xml_write_stbl(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum); + +void UnixTimeToFileTime(time_t t, LPFILETIME pft); +void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst); +void xml_time_out(FILE* xmlout, time_t t); + +void int16_to_3packedchars(short int value, char* buf); + +void xml_write_moov_udta(FILE* xmlout, opj_mj2_t * movie); +void xml_write_free_and_skip(FILE* xmlout, opj_mj2_t * movie); +void xml_write_uuid(FILE* xmlout, opj_mj2_t * movie); + +int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample, unsigned int snum, opj_event_mgr_t *event_mgr); + +void xml_out_frame_siz(FILE* xmlout, opj_image_t *img, opj_cp_t *cp); +void xml_out_frame_cod(FILE* xmlout, opj_tcp_t *tcp); +void xml_out_frame_coc(FILE* xmlout, opj_tcp_t *tcp, int numcomps); /* opj_image_t *img); */ +BOOL same_component_style(opj_tccp_t *tccp1, opj_tccp_t *tccp2); +void xml_out_frame_qcd(FILE* xmlout, opj_tcp_t *tcp); +void xml_out_frame_qcc(FILE* xmlout, opj_tcp_t *tcp, int numcomps); /* opj_image_t *img); */ +BOOL same_component_quantization(opj_tccp_t *tccp1, opj_tccp_t *tccp2); +void xml_out_frame_rgn(FILE* xmlout, opj_tcp_t *tcp, int numcomps);/* opj_image_t *img);*/ +void xml_out_frame_poc(FILE* xmlout, opj_tcp_t *tcp); +void xml_out_frame_ppm(FILE* xmlout, opj_cp_t *cp); +void xml_out_frame_ppt(FILE* xmlout, opj_tcp_t *tcp); +void xml_out_frame_tlm(FILE* xmlout); /* j2k_default_tcp is passed globally */ /* NO-OP. TLM NOT SAVED IN DATA STRUCTURE */ +void xml_out_frame_plm(FILE* xmlout); /* j2k_default_tcp is passed globally */ /* NO-OP. PLM NOT SAVED IN DATA STRUCTURE. opt in main; can be used in conjunction with PLT */ +void xml_out_frame_plt(FILE* xmlout, opj_tcp_t *tcp); /* NO-OP. PLM NOT SAVED IN DATA STRUCTURE. opt in main; can be used in conjunction with PLT */ +void xml_out_frame_crg(FILE* xmlout); /* j2k_default_tcp is passed globally */ /* opt in main; */ +void xml_out_frame_com(FILE* xmlout, opj_tcp_t *tcp); /* NO-OP. COM NOT SAVED IN DATA STRUCTURE */ /* opt in main; */ +void xml_out_dump_hex(FILE* xmlout, char *data, int data_len, char* s); +void xml_out_dump_hex_and_ascii(FILE* xmlout, char *data, int data_len, char* s); +void xml_out_frame_jp2h(FILE* xmlout, opj_jp2_t *jp2_struct); +#ifdef NOTYET +/* Shown with cp, extended, as data structure... but it could be a new different one */ +void xml_out_frame_jp2i(FILE* xmlout, opj_cp_t *cp);/* IntellectualProperty 'jp2i' (no restrictions on location) */ +void xml_out_frame_xml(FILE* xmlout, opj_cp_t *cp); /* XML 'xml\040' (0x786d6c20). Can appear multiply */ +void xml_out_frame_uuid(FILE* xmlout, opj_cp_t *cp); /* UUID 'uuid' (top level only) */ +void xml_out_frame_uinf(FILE* xmlout, opj_cp_t *cp); /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */ +void xml_out_frame_unknown_type(FILE* xmlout, opj_cp_t *cp); +#endif + + +void xml_write_init(BOOL n, BOOL t, BOOL r, BOOL d) +{ + /* Init file globals */ + notes = n; + sampletables = t; + raw = r; + derived = d; +} + +int xml_write_struct(FILE* file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, char* stringDTD, opj_event_mgr_t *event_mgr) { + + if(stringDTD != NULL) + { + fprintf(xmlout,"\n"); + /* stringDTD is known to start with "SYSTEM " or "PUBLIC " */ + /* typical: SYSTEM mj2_to_metadata.dtd */ + stringDTD[6] = '\0'; /* Break into two strings at space, so quotes can be inserted. */ + fprintf(xmlout,"\n", stringDTD, stringDTD+7); + stringDTD[6] = ' '; /* restore for sake of debugger or memory allocator */ + } else + fprintf(xmlout,"\n"); + + fprintf(xmlout, "\n"); + xml_write_overall_header(file, xmlout, movie, sampleframe, event_mgr); + fprintf(xmlout, ""); + return 0; +} + +/* ------------- */ + +int xml_write_overall_header(FILE *file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, opj_event_mgr_t *event_mgr) +{ + int i; + char buf[5]; + buf[4] = '\0'; + + fprintf(xmlout, " \n"); + // Called after structure initialized by mj2_read_ftyp + fprintf(xmlout, " \n"); + uint_to_chars(movie->brand, buf); + fprintf(xmlout, " %s\n", buf); /* 4 character; BR */ + fprintf(xmlout, " %u\n", movie->minversion); /* 4 char; MinV */ + fprintf(xmlout, " \n",movie->num_cl); + for (i = movie->num_cl - 1; i > -1; i--) /* read routine stored in reverse order, so let's undo damage */ + { + uint_to_chars(movie->cl[i], buf); + fprintf(xmlout, " %s\n", buf); /*4 characters, each CLi */ + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + xml_write_moov(file, xmlout, movie, sampleframe, event_mgr); + // To come? // This is the container for media data that can also be accessed through track structures, + // so is redundant, and simply not of interest as metadata + // // Allows incremental build up of movie. Probably not in Simple Profile + xml_write_free_and_skip(xmlout, movie); /* NO OP so far */ /* May be a place where user squirrels metadata */ + xml_write_uuid(xmlout, movie); /* NO OP so far */ /* May be a place where user squirrels metadata */ + return 0; +} + +/* ------------- */ + +int xml_write_moov(FILE *file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, opj_event_mgr_t *event_mgr) +{ + unsigned int tnum; + mj2_tk_t *track; + + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout, " %u\n", movie->creation_time); + if(notes) + fprintf(xmlout, " \n"); + /* 2082844800 = seconds between 1/1/04 and 1/1/70 */ + /* There's still a time zone offset problem not solved... but spec is ambigous as to whether stored time + should be local or UTC */ + if(derived) { + fprintf(xmlout, " "); + xml_time_out(xmlout, movie->creation_time - 2082844800); + fprintf(xmlout,"\n"); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout, " %u\n", movie->modification_time); + if(derived) { + fprintf(xmlout, " "); + xml_time_out(xmlout, movie->modification_time - 2082844800); + fprintf(xmlout,"\n"); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", movie->timescale); + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); /* Rate to play presentation (default = 0x00010000) */ + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + if(raw) + fprintf(xmlout, " 0x%08x\n", movie->rate); + if(derived) + fprintf(xmlout, " %12.6f\n", (double)movie->rate/(double)0x00010000); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout, " %u\n", movie->duration); + if(derived) + fprintf(xmlout, " %12.3f\n", (double)movie->duration/(double)movie->timescale); // Make this double later to get fractional seconds + fprintf(xmlout, " \n"); +#ifdef CURRENTSTRUCT + movie->volume = movie->volume << 8; +#endif + fprintf(xmlout, " \n"); + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + if(raw) + fprintf(xmlout, " 0x%04x\n", movie->volume); + if(derived) + fprintf(xmlout, " %6.3f\n", (double)movie->volume/(double)0x0100); + fprintf(xmlout, " \n"); +#ifdef CURRENTSTRUCT + if(notes) + fprintf(xmlout, " \n"); + movie->volume = movie->volume >> 8; +#endif + /* Transformation matrix for video */ + fprintf(xmlout, " \n"); + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " 0x%08x\n", movie->trans_matrix[0]); + fprintf(xmlout, " 0x%08x\n", movie->trans_matrix[1]); + fprintf(xmlout, " 0x%08x\n", movie->trans_matrix[2]); + fprintf(xmlout, " 0x%08x\n", movie->trans_matrix[3]); + fprintf(xmlout, " 0x%08x\n", movie->trans_matrix[4]); + fprintf(xmlout, " 0x%08x\n", movie->trans_matrix[5]); + fprintf(xmlout, " 0x%08x\n", movie->trans_matrix[6]); + fprintf(xmlout, " 0x%08x\n", movie->trans_matrix[7]); + fprintf(xmlout, " 0x%08x\n", movie->trans_matrix[8]); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n", movie->num_vtk); + fprintf(xmlout, " \n", movie->num_stk); + fprintf(xmlout, " %d\n", movie->num_htk); + if(notes) + fprintf(xmlout, " \n"); + /* See Part 3 Amend 2 Section 4.2 for relation of MJ2 to Part 12 Sections 7 and 10 hints */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + /* Idea for the future: It would be possible to add code to verify that the file values: + 1) are legal and self-consistent + 2) comply with particular JP2 and/or MJ2 profiles. + This could be reported here as additional XML elements */ + + // Find first video track + tnum = 0; + while (movie->tk[tnum].track_type != 0) + tnum ++; + + track = &(movie->tk[tnum]); + // For now, output info on first video track + xml_write_trak(file, xmlout, track, tnum, sampleframe, event_mgr); + + // to come: // possibly not in Simple Profile + xml_write_moov_udta(xmlout, movie); /* NO OP so far */ /* contains */ + fprintf(xmlout, " \n"); + return 0; +} + +/* --------------- */ + +void uint_to_chars(unsigned int value, char* buf) +{ + /* buf is at least char[5] */ + int i; + for (i = 3; i >= 0; i--) + { + buf[i] = (value & 0x000000ff); + value = (value >> 8); + } + buf[4] = '\0'; /* Precautionary */ +} + +/* ------------- */ + +/* WINDOWS SPECIFIC */ + +void UnixTimeToFileTime(time_t t, LPFILETIME pft) +{ + /* Windows specific. From MS Q167296 */ + /* 'time_t' represents seconds since midnight January 1, 1970 UTC (coordinated universal time). */ + /* 64-bit FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601 UTC (coordinate universal time). */ + LONGLONG ll; /* LONGLONG is a 64-bit value. */ + ll = Int32x32To64(t, 10000000) + 116444736000000000; + pft->dwLowDateTime = (DWORD)ll; + /* pft->dwLowDateTime = (DWORD)(0x00000000ffffffff & ll); */ + pft->dwHighDateTime = (DWORD)(ll >> 32); +} +// Once the UNIX time is converted to a FILETIME structure, +// other Win32 time formats can be easily obtained by using Win32 functions such +// as FileTimeToSystemTime() and FileTimeToDosDateTime(). + +/* ------------- */ + +void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst) +{ + /* Windows specific */ + FILETIME ft; + UnixTimeToFileTime(t, &ft); + FileTimeToLocalFileTime( &ft, &ft ); /* Adjust from UTC to local time zone */ + FileTimeToSystemTime(&ft, pst); +} + +/* ------------- */ + +void xml_time_out(FILE* xmlout, time_t t) +{ + /* Windows specific */ + SYSTEMTIME st; + char szLocalDate[255], szLocalTime[255]; + UnixTimeToSystemTime( t, &st ); + GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, szLocalDate, 255 ); + GetTimeFormat( LOCALE_USER_DEFAULT, 0, &st, NULL, szLocalTime, 255 ); + fprintf(xmlout, "%s %s", szLocalDate, szLocalTime ); +} + +/* END WINDOWS SPECIFIC */ + +/* ------------- */ + +void xml_write_moov_udta(FILE* xmlout, opj_mj2_t * movie) { + /* Compare with xml_write_udta */ +#ifdef NOTYET + /* NO-OP so far. Optional UserData 'udta' (zero or one in moov or each trak) + can contain multiple Copyright 'cprt' with different language codes */ + /* There may be nested non-standard boxes within udta */ + IMAGINE movie->udta, movie->copyright_count, movie->copyright_language[i] (array of 16bit ints), movie->copyright_notice[i] (array of buffers) + PROBABLY ALSO NEED movie->udta_len or special handler for non-standard boxes + char buf[5]; + int i; + + if(movie->udta != 1) + return; /* Not present */ + + fprintf(xmlout, " \n"); + for(i = 0; i < movie->copyright_count; i++) { + fprintf(xmlout, " Instance=\"%d\">\n", i+1); + int16_to_3packedchars((short int)movie->copyright_languages[i], buf); + fprintf(xmlout, " %s\n", buf); /* 3 chars */ + fprintf(xmlout, " %s\n",movie->copyright_notices[i]); + fprintf(xmlout, " \n", i+1); + } + /* TO DO: Non-standard boxes */ + fprintf(xmlout, " \n"); +#endif +} + +void xml_write_free_and_skip(FILE* xmlout, opj_mj2_t * movie) { +#ifdef NOTYET + /* NO-OP so far. There can be zero or more instances of free and/or skip + at the top level of the file. This may be a place where the user squirrel's metadata. + Let's assume unstructured, and do a dump */ + IMAGINE movie->free_and_skip, movie->free_and_skip_count, movie->free_and_skip_content[i] (array of buffers), + movie->free_and_skip_len[i] (array of ints), movie->is_skip[i] (array of BOOL) + int i; + + if(movie->free_and_skip != 1) + return; /* Not present */ + + for(i = 0; i < movie->free_and_skip_count; i++) { + if(movie->is_skip[i]) + fprintf(xmlout, " \n"); + else + fprintf(xmlout, " \n"); + + xml_out_dump_hex_and_ascii(xmlout, movie->free_and_skip_contents[i], movie->free_and_skip_len[i]); + + if(movie->is_skip[i]) + fprintf(xmlout, " \n"); + else + fprintf(xmlout, " \n"); + } +#endif +} + +void xml_write_uuid(FILE* xmlout, opj_mj2_t * movie) { +/* Univeral Unique IDs of 16 bytes. */ +#ifdef NOTYET + /* NO-OP so far. There can be zero or more instances of private uuid boxes in a file. + This function supports the top level of the file, but uuid may be elsewhere [not yet supported]. + This may be a place where the user squirrel's metadata. Let's assume unstructured, and do a dump */ + IMAGINE movie->uuid, movie->uuid_count, movie->uuid_content[i] (array of buffers), + movie->uuid_len[i] (array of ints), movie->uuid_type[i] (array of 17-byte (16+null termination) buffers) + int i; + + if(movie->uuid != 1) + return; /* Not present */ + + for(i = 0; i < movie->uuid_count; i++) { + fprintf(xmlout, " \n", movie->uuid_type[i]); + // See Part III section 5.2.1, 6.1, 6.2 + xml_out_dump_hex_and_ascii(xmlout, movie->uuid_contents[i], movie->uuid_len[i]); + fprintf(xmlout, " \n"); + } +#endif +} + +/* ------------- */ + +void xml_write_trak(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum, unsigned int sampleframe, opj_event_mgr_t *event_mgr) +{ + fprintf(xmlout, " \n", tnum); + xml_write_tkhd(file, xmlout, track, tnum); + // TO DO: TrackReferenceContainer 'tref' just used in hint track + // TO DO: EditListContainer 'edts', contains EditList 'elst' with media-time, segment-duration, media-rate + xml_write_mdia(file, xmlout, track, tnum); + xml_write_udta(file, xmlout, track, tnum); // NO-OP so far. Optional UserData 'udta', can contain multiple Copyright 'cprt' + + if(track->track_type==0) { /* Only do for visual track */ + /* sampleframe is from user option -f. 1 = first frame */ + /* sampleframe of 0 is a user requests: no jp2 header */ + /* Treat out-of-bounds values in the same way */ + if(sampleframe > 0 && sampleframe <= track->num_samples) + { + mj2_sample_t *sample; + unsigned int snum; + + snum = sampleframe-1; + // Someday maybe do a smart range scan... for (snum=0; snum < track->num_samples; snum++){ + // fprintf(stdout,"Frame %d: ",snum+1); + sample = &track->sample[snum]; + if(xml_out_frame(file, xmlout, sample, snum, event_mgr)) + return; /* Not great error handling here */ + } + } + fprintf(xmlout, " \n"); +} + +/* ------------- */ + +void xml_write_tkhd(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum) +{ + fprintf(xmlout, " \n"); + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " %u\n", track->track_ID); + if(track->track_type==0) /* For visual track */ + { + fprintf(xmlout, " %d\n", track->layer); + if(notes) + fprintf(xmlout," \n"); + } + if(track->track_type!=0) /* volume irrelevant for visual track */ + { +#ifdef CURRENTSTRUCT + track->volume = track->volume << 8; +#endif + fprintf(xmlout, " \n"); + if(notes) { + fprintf(xmlout," \n"); + fprintf(xmlout," \n"); + } + if(raw) + fprintf(xmlout," 0x%04x\n", track->volume); + if(derived) + fprintf(xmlout," %6.3f\n", (double)track->volume/(double)0x0100); + fprintf(xmlout, " \n"); +#ifdef CURRENTSTRUCT + if(notes) + fprintf(xmlout, " \n"); + track->volume = track->volume >> 8; +#endif + } + if(track->track_type==0) + { + /* Transformation matrix for video */ + fprintf(xmlout, " \n"); + if(notes) { + fprintf(xmlout," \n"); + fprintf(xmlout," \n"); + } + fprintf(xmlout, " 0x%08x\n", track->trans_matrix[0]); + fprintf(xmlout, " 0x%08x\n", track->trans_matrix[1]); + fprintf(xmlout, " 0x%08x\n", track->trans_matrix[2]); + fprintf(xmlout, " 0x%08x\n", track->trans_matrix[3]); + fprintf(xmlout, " 0x%08x\n", track->trans_matrix[4]); + fprintf(xmlout, " 0x%08x\n", track->trans_matrix[5]); + fprintf(xmlout, " 0x%08x\n", track->trans_matrix[6]); + fprintf(xmlout, " 0x%08x\n", track->trans_matrix[7]); + fprintf(xmlout, " 0x%08x\n", track->trans_matrix[8]); + fprintf(xmlout, " \n"); + } +#ifdef CURRENTSTRUCT + track->w = track->w << 16; + track->h = track->h << 16; +#endif + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout, " 0x%08x\n", track->w); + if(derived) + fprintf(xmlout, " %12.6f\n", (double)track->w/(double)0x00010000); /* Rate to play presentation (default = 0x00010000) */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout, " 0x%08x\n", track->h); + if(derived) + fprintf(xmlout, " %12.6f\n", (double)track->h/(double)0x00010000); /* Rate to play presentation (default = 0x00010000) */ + fprintf(xmlout, " \n"); +#ifdef CURRENTSTRUCT + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + track->w = track->w >> 16; + track->h = track->h >> 16; +#endif + fprintf(xmlout, " \n"); +} + +/* ------------- */ + +void xml_write_udta(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum) { + /* NO-OP so far. Optional UserData 'udta' (zero or one in moov or each trak) + can contain multiple Copyright 'cprt' with different language codes */ + /* There may be nested non-standard boxes within udta */ +#ifdef NOTYET + IMAGINE track->udta, track->copyright_count, track->copyright_language[i] (array of 16bit ints), track->copyright_notice[i] (array of buffers) + PROBABLY ALSO NEED track->udta_len or special handler for non-standard boxes + char buf[5]; + int i; + + if(track->udta != 1) + return; /* Not present */ + + fprintf(xmlout, " \n"); + for(i = 0; i < track->copyright_count; i++) { + fprintf(xmlout, " Instance=\"%d\">\n", i+1); + int16_to_3packedchars((short int)track->copyright_languages[i], buf); + fprintf(xmlout, " %s\n", buf); /* 3 chars */ + fprintf(xmlout, " %s\n",track->copyright_notices[i]); + fprintf(xmlout, " \n", i+1); + } + /* TO DO: Non-standard boxes */ + fprintf(xmlout, " \n"); +#endif +} + +/* ------------- */ + +void xml_write_mdia(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum) +{ + char buf[5]; + int i, k; + buf[4] = '\0'; + + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout, " %u\n", track->creation_time); + if(notes) + fprintf(xmlout, " \n"); + /* 2082844800 = seconds between 1/1/04 and 1/1/70 */ + /* There's still a time zone offset problem not solved... but spec is ambigous as to whether stored time + should be local or UTC */ + if(derived) { + fprintf(xmlout, " "); + xml_time_out(xmlout, track->creation_time - 2082844800); + fprintf(xmlout,"\n"); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout, " %u\n", track->modification_time); + if(derived) { + fprintf(xmlout, " "); + xml_time_out(xmlout, track->modification_time - 2082844800); + fprintf(xmlout,"\n"); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", track->timescale); + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout, " %u\n", track->duration); + if(derived) + fprintf(xmlout, " %12.3f\n", (double)track->duration/(double)track->timescale); // Make this double later to get fractional seconds + fprintf(xmlout, " \n"); + int16_to_3packedchars((short int)track->language, buf); + fprintf(xmlout, " %s\n", buf); /* 3 chars */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + switch(track->track_type) + { + case 0: + fprintf(xmlout, " video media track\n"); break; + case 1: + fprintf(xmlout, " Sound\n"); break; + case 2: + fprintf(xmlout, " Hint\n"); break; + } + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + switch(track->track_type) + { + case 0: + fprintf(xmlout, " \n"); + fprintf(xmlout, " 0x%02x\n", track->graphicsmode); + if(notes) { + fprintf(xmlout," \n"); + fprintf(xmlout," \n"); + fprintf(xmlout," \n"); + fprintf(xmlout," \n"); +/* fprintf(xmlout," \n"); This was evidently dropped upon amendment */ + fprintf(xmlout," \n"); + fprintf(xmlout," \n"); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " 0x%02x\n", track->opcolor[0]); + fprintf(xmlout, " 0x%02x\n",track->opcolor[1]); + fprintf(xmlout, " 0x%02x\n",track->opcolor[2]); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + break; + case 1: + fprintf(xmlout, " \n"); +#ifdef CURRENTSTRUCT + track->balance = track->balance << 8; +#endif + fprintf(xmlout, " \n"); + if(notes) { + fprintf(xmlout," \n"); + fprintf(xmlout," \n"); + fprintf(xmlout," \n"); + } + if(raw) + fprintf(xmlout," 0x%04x\n", track->balance); + if(derived) + fprintf(xmlout," %6.3f\n", (double)track->balance/(double)0x0100); + fprintf(xmlout, " \n"); +#ifdef CURRENTSTRUCT + if(notes) + fprintf(xmlout," \n"); + track->balance = track->balance >> 8; +#endif + fprintf(xmlout, " \n"); + break; + case 2: + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", track->maxPDUsize); + if(notes) + fprintf(xmlout," \n"); + fprintf(xmlout, " %d\n", track->avgPDUsize); + if(notes) + fprintf(xmlout," \n"); + fprintf(xmlout, " %d\n", track->maxbitrate); + if(notes) + fprintf(xmlout," \n"); + fprintf(xmlout, " %d\n", track->avgbitrate); + if(notes) + fprintf(xmlout," \n"); + fprintf(xmlout, " %d\n", track->slidingavgbitrate); + if(notes) + fprintf(xmlout," \n"); + fprintf(xmlout, " \n"); + break; + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n", track->num_url, track->num_urn); // table w. flags, URLs, URNs + // Data structure does not distinguish between single URL, single URN, or DREF table or URLs & URNs. + // We could infer those, but for now just present everything as a DREF table. + if(notes) + fprintf(xmlout, " \n"); + for(k = 0; k < track->num_url; k++) { + fprintf(xmlout, " \n"); // table w. flags, URLs, URNs + if(notes) + fprintf(xmlout," \n"); + for(i = 0; i < 4; i++) { + uint_to_chars(track->url[track->num_url].location[i], buf); + fprintf(xmlout, " %s\n"); + } + fprintf(xmlout, " \n"); // table w. flags, URLs, URNs + } + for(k = 0; k < track->num_urn; k++) { + fprintf(xmlout," \n"); // table w. flags, URLs, URNs + // Only the first 16 bytes are recorded in the data structure currently. + if(notes) + fprintf(xmlout," \n"); + fprintf(xmlout, " "); + for(i = 0; i < 4; i++) { + uint_to_chars(track->urn[track->num_urn].name[i], buf); + fprintf(xmlout,"%s", buf); + } + fprintf(xmlout, "\n"); + fprintf(xmlout, " "); + for(i = 0; i < 4; i++) { + uint_to_chars(track->urn[track->num_urn].location[i], buf); + fprintf(xmlout,"%s"); + } + fprintf(xmlout, "\n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + + xml_write_stbl(file, xmlout, track, tnum); /* SampleTable */ + + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); +} + +/* ------------- */ + +void xml_write_stbl(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum) +{ + char buf[5], buf33[33]; + int i, len; + buf[4] = '\0'; + + fprintf(xmlout, " \n"); + if(notes) + fprintf(xmlout, " \n"); + switch(track->track_type) + { + case 0: + // There could be multiple instances of this, but "entry_count" is just a local at read-time. + // And it's used wrong, too, as count of just visual type, when it's really all 3 types. + // This is referred to as "smj2" within mj2.c + fprintf(xmlout, " \n"); + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + /* No shifting required. If CURRENTSTRUCT gets changed, then may need to revisit treatment of these */ + fprintf(xmlout, " %d\n", track->w); + fprintf(xmlout, " %d\n", track->h); +// Horizresolution and vertresolution don't require shifting, already stored right in CURRENTSTRUCT + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout, " 0x%08x\n", track->horizresolution); + if(derived) + fprintf(xmlout, " %12.6f\n", (double)track->horizresolution/(double)0x00010000); /* Rate to play presentation (default = 0x00010000) */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout, " 0x%08x\n", track->vertresolution); + if(derived) + fprintf(xmlout, " %12.6f\n", (double)track->vertresolution/(double)0x00010000); /* Rate to play presentation (default = 0x00010000) */ + fprintf(xmlout, " \n"); + + buf33[0] = '\0'; + for(i = 0; i < 8; i++) { + uint_to_chars((unsigned int)track->compressorname[i], buf); + strcat(buf33, buf); /* This loads up (4 * 8) + 1 chars, but trailing ones are usually junk */ + } + len = (int)buf33[0]; /* First byte has string length in bytes. There may be garbage beyond it. */ + buf33[len+1] = '\0'; /* Suppress it */ + fprintf(xmlout, " %s\n", buf33+1); /* Start beyond first byte */ + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " 0x%02x\n",track->depth); + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + + xml_out_frame_jp2h(xmlout, &(track->jp2_struct)); /* JP2 Header */ + + /* Following subboxes are optional */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", (unsigned int)track->fieldcount); /* uchar as 1 byte uint */ + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", (unsigned int)track->fieldorder); /* uchar as 1 byte uint */ + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " \n"); + + fprintf(xmlout, " \n",track->num_br); + for (i = 0; i < track->num_br; i++) /* read routine stored in reverse order, so let's undo damage */ + { + uint_to_chars(track->br[i], buf); + fprintf(xmlout, " %s\n", buf); /*4 characters, each CLi */ + } + fprintf(xmlout, " \n"); + + fprintf(xmlout, " \n",track->num_jp2x); + for (i = 0; i < track->num_jp2x; i++) + { // We'll probably need better formatting than this + fprintf(xmlout, " 0x%02x\n", track->jp2xdata[i]); /* Each entry is single byte */ + } + fprintf(xmlout, " \n"); + + fprintf(xmlout, " \n"); /* These values are all 1 byte */ + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", track->hsub); + fprintf(xmlout, " %d\n", track->vsub); + fprintf(xmlout, " %d\n", track->hoff); + fprintf(xmlout, " %d\n", track->voff); + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " \n"); /* These values are all 1 byte */ + + fprintf(xmlout, " \n"); /* Part III Appx. 2 */ + fprintf(xmlout, " %u\n", (unsigned int)track->or_fieldcount); /* uchar as 1-byte uint */ + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " %u\n", (unsigned int)track->or_fieldorder); /* uchar as 1-byte uint */ + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + break; + case 1: case 2: + if(notes) + fprintf(xmlout, " \n"); break; + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", track->num_samples); + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n", track->num_tts); + for (i = 0; i < track->num_tts; i++) { + fprintf(xmlout, " \n", + i+1, track->tts[i].sample_count, track->tts[i].sample_delta); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + + fprintf(xmlout, " \n", track->num_samplestochunk); + for (i = 0; i < track->num_samplestochunk; i++) { + fprintf(xmlout, " %u\n",track->sampletochunk[i].first_chunk); /* 4 bytes */ + fprintf(xmlout, " %u\n",track->sampletochunk[i].samples_per_chunk); /* 4 bytes */ + fprintf(xmlout, " %u\n",track->sampletochunk[i].sample_descr_idx); /* 4 bytes */ + } + fprintf(xmlout, " \n"); + // After reading this info in, track->num_chunks is calculated and a decompressed table established internally. + + fprintf(xmlout, " \n"); + if(track->same_sample_size) { + // all values in track->sample[i].sample_size are equal. Grab the first one. + fprintf(xmlout, " %u\n", track->sample[0].sample_size); + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + } else { + fprintf(xmlout, " 0\n"); + if(notes) + if(sampletables) + fprintf(xmlout," \n"); + else + fprintf(xmlout," \n"); + fprintf(xmlout, " %u\n", track->num_samples); + if(sampletables) + for (i = 0; i < (int)track->num_samples; i++) { + fprintf(xmlout, " %u\n", i+1, track->sample[i].sample_size); + } + } + fprintf(xmlout, " \n"); + + fprintf(xmlout, " \n"); + // Structure not yet - Variant ChunkLargeOffset 'co64' + fprintf(xmlout, " %u\n", track->num_chunks); + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + if(sampletables) + for (i = 0; i < (int)track->num_chunks; i++) + fprintf(xmlout, " %u\n", i+1, track->chunk[i].offset); + fprintf(xmlout, " \n"); + + fprintf(xmlout, " \n"); +} + +/* ------------- */ + +int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample, unsigned int snum, opj_event_mgr_t *event_mgr) +{ + opj_dparameters_t parameters; /* decompression parameters */ + opj_image_t *img; + opj_cp_t *cp; + int i; + int numcomps; + unsigned char* frame_codestream; + opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */ + opj_cio_t *cio = NULL; + opj_j2k_t *j2k; + + /* JPEG 2000 compressed image data */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_J2K); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, event_mgr, stderr); + + /* setup the decoder decoding parameters using the current image and user parameters */ + parameters.cp_limit_decoding = DECODE_ALL_BUT_PACKETS; + opj_setup_decoder(dinfo, ¶meters); + + frame_codestream = (unsigned char*) malloc (sample->sample_size-8); /* Skipping JP2C marker */ + if(frame_codestream == NULL) + return 1; + + fseek(file,sample->offset+8,SEEK_SET); + fread(frame_codestream,sample->sample_size-8,1, file); /* Assuming that jp and ftyp markers size do */ + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream, sample->sample_size-8); + + /* Decode J2K to image: */ + img = opj_decode(dinfo, cio); + if (!img) { + fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + return 1; + } + + j2k = (opj_j2k_t*)dinfo->j2k_handle; + j2k_default_tcp = j2k->default_tcp; + cp = j2k->cp; + + numcomps = img->numcomps; + /* Alignments: " < To help maintain xml pretty-printing */ + fprintf(xmlout, " \n", snum+1); + fprintf(xmlout, " \n"); + /* There can be multiple codestreams; a particular image is entirely within a single codestream */ + /* TO DO: A frame can be represented by two I-guess-contigious codestreams if its interleaved. */ + fprintf(xmlout, " \n"); + /* "cp" stands for "coding parameter"; "tcp" is tile coding parameters, "tccp" is tile-component coding parameters */ + xml_out_frame_siz(xmlout, img, cp); /* reqd in main */ + xml_out_frame_cod(xmlout, j2k_default_tcp); /* reqd in main */ + xml_out_frame_coc(xmlout, j2k_default_tcp, numcomps); /* opt in main, at most 1 per component */ + xml_out_frame_qcd(xmlout, j2k_default_tcp); /* reqd in main */ + xml_out_frame_qcc(xmlout, j2k_default_tcp, numcomps); /* opt in main, at most 1 per component */ + xml_out_frame_rgn(xmlout, j2k_default_tcp, numcomps); /* opt, at most 1 per component */ + xml_out_frame_poc(xmlout, j2k_default_tcp); /* opt (but reqd in main or tile for any progression order changes) */ + /* Next four get j2k_default_tcp passed globally: */ +#ifdef SUPPRESS_FOR_NOW + xml_out_frame_ppm(xmlout, cp); /* opt (but either PPM or PPT [distributed in tile headers] or codestream packet header reqd) */ +#endif + xml_out_frame_tlm(xmlout); /* NO-OP. TLM NOT SAVED IN DATA STRUCTURE */ /* opt */ + xml_out_frame_plm(xmlout); /* NO-OP. PLM NOT SAVED IN DATA STRUCTURE */ /* opt in main; can be used in conjunction with PLT */ + xml_out_frame_crg(xmlout); /* NO-OP. CRG NOT SAVED IN DATA STRUCTURE */ /* opt in main; */ + xml_out_frame_com(xmlout, j2k_default_tcp); /* NO-OP. COM NOT SAVED IN DATA STRUCTURE */ /* opt in main; */ + + fprintf(xmlout, " \n"); + + /* TO DO: all the tile headers (sigh) */ + fprintf(xmlout, " \n", cp->tileno_size); /* size of the vector tileno */ + for(i = 0; i < cp->tileno_size; i++) { /* I think cp->tileno_size will be same number as (cp->tw * cp->th) or as global j2k_curtileno */ + // Standard seems to use zero-based # for tile-part. + fprintf(xmlout, " \n", i, cp->tileno[i]); /* ID number of the tiles present in the codestream */ + fprintf(xmlout, " \n"); + /* All markers in tile-part headers (between SOT and SOD) are optional, unless structure requires. */ + if(i == 0) { + xml_out_frame_cod(xmlout, &(cp->tcps[i])); /* No more than 1 per tile */ + xml_out_frame_coc(xmlout, &(cp->tcps[i]), numcomps); /* No more than 1 per component */ + xml_out_frame_qcd(xmlout, &(cp->tcps[i])); /* No more than 1 per tile */ + xml_out_frame_qcc(xmlout, &(cp->tcps[i]), numcomps); /* No more than 1 per component */ + xml_out_frame_rgn(xmlout, &(cp->tcps[i]), numcomps); /* No more than 1 per component */ + } + xml_out_frame_poc(xmlout, &(cp->tcps[i])); /* Reqd only if any progression order changes different from main POC */ +#ifdef SUPPRESS_FOR_NOW + xml_out_frame_ppt(xmlout, &(cp->tcps[i])); /* Either PPT [distributed in tile headers] or PPM or codestream packet header reqd. */ +#endif + xml_out_frame_plt(xmlout, &(cp->tcps[i])); /* NO-OP. PLT NOT SAVED IN DATA STRUCTURE */ /* Can be used in conjunction with main's PLM */ + xml_out_frame_com(xmlout, &(cp->tcps[i])); /* NO-OP. COM NOT SAVED IN DATA STRUCTURE */ + /* opj_tcp_t * cp->tcps; "tile coding parameters" */ + /* Maybe not: fprintf(xmlout, " <>%d, cp->matrice[i]; */ /* Fixed layer */ + fprintf(xmlout, " \n"); + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " \n"); /* size of the vector tileno */ + +#ifdef NOTYET + IMAGINE the cp object has data to support the following... but we could use an new different data structure instead + /* I'm unclear if the span of the original fread(frame_codestream...) included the following items if they're trailing. */ + /* ALSO TO DO, BUT DATA STRUCTURE DOESN'T HANDLE YET: boxes (anywhere in file except before the Filetype box): */ + xml_out_frame_jp2i(xmlout, &cp); /* IntellectualProperty 'jp2i' (no restrictions on location) */ + xml_out_frame_xml(xmlout, &cp); /* XML 'xml\040' (0x786d6c20). Can appear multiply */ + xml_out_frame_uuid(xmlout, &cp); /* UUID 'uuid' (top level only) */ + xml_out_frame_uinf(xmlout, &cp); /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */ +#endif + + fprintf(xmlout, " \n"); + + /* Extra commentary: */ + if(notes) { + fprintf(xmlout, " \n"); + if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2) + && (img->comps[0].dx == img->comps[2].dx / 2 ) && (img->comps[0].dx == 1)) + || (img->numcomps == 1)) { + fprintf(xmlout, " \n"); + } + else if ((img->numcomps == 3) && + (img->comps[0].dx == 1) && (img->comps[1].dx == 1)&& + (img->comps[2].dx == 1)) {// If YUV 4:4:4 input --> to bmp + fprintf(xmlout, " \n"); + } + else { + fprintf(xmlout, " \n"); + } + } + + opj_destroy_decompress(dinfo); + opj_cio_close(cio); + free(frame_codestream); + + return 0; +} + +/* ------------- */ + +void int16_to_3packedchars(short int value, char* buf) +{ + /* This is to retrieve the 3-letter ASCII language code */ + /* Each char is packed into 5 bits, as difference from 0x60 */ + int i; + for (i = 2; i >= 0; i--) + { + buf[i] = (value & 0x001f) + 0x60; + value = (value >>5); + } + buf[3] = '\0'; +} + +/* ------------- */ + +void xml_out_frame_siz(FILE* xmlout, opj_image_t *img, opj_cp_t *cp) +{ + opj_image_comp_t *comp; + int i; + + fprintf(xmlout, " \n"); + // This is similar to j2k.c's j2k_dump_image. + // Not of interest: Lsiz, Rsiz + fprintf(xmlout, " %d\n", img->x1); + fprintf(xmlout, " %d\n", img->y1); + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", img->x0); + fprintf(xmlout, " %d\n", img->y0); + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", cp->tdx); + fprintf(xmlout, " %d\n", cp->tdy); + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", cp->tx0); + fprintf(xmlout, " %d\n", cp->ty0); + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", img->numcomps); + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + //fprintf(xmlout," \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + + for (i = 0; i < img->numcomps; i++) {/* image-components */ + comp = &(img->comps[i]); + fprintf(xmlout, " \n", i+1); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout," 0x%02x\n", (comp->sgnd << 7) & (comp->prec - 1)); + if(derived) { + fprintf(xmlout," %d\n", comp->sgnd); + fprintf(xmlout," %d\n", comp->prec); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", comp->dx); + fprintf(xmlout, " %d\n", comp->dy); + fprintf(xmlout, " %d\n", comp->w); + fprintf(xmlout, " %d\n", comp->h); + /* Rest of these aren't calculated when SIZ is read: + fprintf(xmlout, " %d\n", comp->x0); + fprintf(xmlout, " %d\n", comp->y0); + if(notes) + fprintf(xmlout," \n"); + fprintf(xmlout, " %d\n", comp->bpp); + fprintf(xmlout, " %d\n", comp->resno_decoded); */ + // SUPPRESS: n/a to mj2_to_metadata. fprintf(xmlout," %dfactor); + /* factor = number of division by 2 of the out image compare to the original size of image */ + // TO DO comp->data: int *data; /* image-component data */ + + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " \n"); +} + +/* ------------- */ + +void xml_out_frame_cod(FILE* xmlout, opj_tcp_t *tcp) +{ +/* Could be called with tcp = &j2k_default_tcp; +/* Or, for tile-part header, with &j2k_cp->tcps[j2k_curtileno] +/* Alignment for main:" < < < < To help maintain xml pretty-printing */ +/* Alignment for tile:" < < < To help maintain xml pretty-printing */ + opj_tccp_t *tccp; + int i; + char spaces[13] = " "; /* 12 spaces if tilepart*/ + char* s = spaces; + if(tcp == j2k_default_tcp) { + s++;s++; /* shorten s to 10 spaces if main */ + } + tccp = &(tcp->tccps[0]); + + fprintf(xmlout, "%s\n",s); /* Required in main header */ + /* Not retained or of interest: Lcod */ + fprintf(xmlout, "%s 0x%02x\n", s, tcp->csty); /* 1 byte */ + if(notes) { + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + } + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s %d\n", s, tcp->prg); /* 1 byte, SGcod (A) */ + if(notes) { + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + } + fprintf(xmlout, "%s %d\n", s, tcp->numlayers); /* 2 bytes, SGcod (B) */ + fprintf(xmlout, "%s %d\n", s, tcp->mct); /* 1 byte, SGcod (C). More or less boolean */ + if(notes) + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */ + fprintf(xmlout, "%s \n",s); + /* Internal data structure tccp defines separate defaults for each component, but they all get the same values */ + /* So we only have to report the first component's values here. */ + /* Compare j2k_read_cox(...) */ + fprintf(xmlout, "%s %d\n", s, tccp->numresolutions - 1); /* 1 byte, SPcox (D) */ + fprintf(xmlout, "%s %d\n", s, tccp->cblkw - 2); /* 1 byte, SPcox (E) */ + fprintf(xmlout, "%s %d\n", s, tccp->cblkh - 2); /* 1 byte, SPcox (F) */ + if(notes) { + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n", s); + } + fprintf(xmlout, "%s 0x%02x\n", s, tccp->cblksty); /* 1 byte, SPcox (G) */ + if(notes) { + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s \n",s); + } + fprintf(xmlout, "%s %d\n", s, tccp->qmfbid); /* 1 byte, SPcox (H) */ + if(notes) + fprintf(xmlout, "%s \n",s); + if (tccp->csty & J2K_CP_CSTY_PRT) { + fprintf(xmlout, "%s \n",s); /* 1 byte, SPcox (I_i) */ + if(notes) + fprintf(xmlout, "%s \n",s); + for (i = 0; i < tccp->numresolutions; i++) { + fprintf(xmlout, "%s \n", s, i); + if(raw) + fprintf(xmlout,"%s 0x%02x\n", s, (tccp->prch[i] << 4) | tccp->prcw[i]); /* packed into 1 byte, SPcox (G) */ + if(derived) { + fprintf(xmlout,"%s %d\n", s, tccp->prcw[i]); + fprintf(xmlout,"%s %d\n", s, tccp->prch[i]); + } + fprintf(xmlout, "%s \n", s, i); + } + fprintf(xmlout, "%s \n",s); /* 1 byte, SPcox (I_i) */ + } + fprintf(xmlout, "%s \n",s); + fprintf(xmlout, "%s\n",s); +} + +/* ------------- */ + +void xml_out_frame_coc(FILE* xmlout, opj_tcp_t *tcp, int numcomps) /* Optional in main & tile-part headers */ +{ +/* Uses global j2k_default_tcp */ + opj_tccp_t *tccp, *firstcomp_tccp; + int i, compno; + char spaces[13] = " "; /* 12 spaces if tilepart*/ + char* s = spaces; + if(tcp == j2k_default_tcp) { + s++;s++; /* shorten s to 10 spaces if main */ + } + + firstcomp_tccp = &(tcp->tccps[0]); + /* Internal data structure tccp defines separate defaults for each component, set from main */ + /* default, then selectively overwritten. */ + /* Compare j2k_read_cox(...) */ + /* We don't really know which was the default, and which were not */ + /* Let's pretend that [0] is the default and all others are not */ + if(notes) { + fprintf(xmlout, "%s\n", s); + if(tcp == j2k_default_tcp) + fprintf(xmlout, "%s\n", s); + else + fprintf(xmlout, "%s\n", s); + } + for (compno = 1; compno < numcomps; compno++) /* spec says components are zero-based */ + { + tccp = &tcp->tccps[compno]; + if(same_component_style(firstcomp_tccp, tccp)) + continue; + +/* Alignments: " < < < < < To help maintain xml pretty-printing */ + fprintf(xmlout, "%s\n", s); /* Optional in main header, at most 1 per component */ + if(notes) + fprintf(xmlout, "%s \n", s); + /* Overrides the main COD for the specific component */ + /* Not retained or of interest: Lcod */ + fprintf(xmlout, "%s 0x%02x\n", s, tccp->csty); /* 1 byte */ + if(notes) { + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + fprintf(xmlout, "%s %d\n", s, compno); /* 1 or 2 bytes */ + /* Unfortunately compo isn't retained in j2k_read_coc: compno = cio_read(j2k_img->numcomps <= 256 ? 1 : 2); /* Ccoc */ + /*if(j2k_img_numcomps <=256) + component is 1 byte + else + compno is 2 byte */ + + /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */ + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s %d\n", s, tccp->numresolutions - 1); /* 1 byte, SPcox (D) */ + fprintf(xmlout, "%s %d\n", s, tccp->cblkw - 2); /* 1 byte, SPcox (E) */ + fprintf(xmlout, "%s %d\n", s, tccp->cblkh - 2); /* 1 byte, SPcox (F) */ + if(notes) { + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + fprintf(xmlout, "%s 0x%02x\n", s, tccp->cblksty); /* 1 byte, SPcox (G) */ + if(notes) { + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + fprintf(xmlout, "%s %d\n", s, tccp->qmfbid); /* 1 byte, SPcox (H) */ + if(notes) + fprintf(xmlout, "%s \n", s); + if (tccp->csty & J2K_CP_CSTY_PRT) { + fprintf(xmlout, "%s \n", s); /* 1 byte, SPcox (I_i) */ + if(notes) + fprintf(xmlout, "%s \n", s); + for (i = 0; i < tccp->numresolutions-1; i++) { /* subtract 1 to get # of decomposition levels */ + fprintf(xmlout, "%s \n", s, i); + if(raw) + fprintf(xmlout,"%s 0x%02x\n", s, (tccp->prch[i] << 4) | tccp->prcw[i]); /* packed into 1 byte, SPcox (G) */ + if(derived) { + fprintf(xmlout,"%s %d\n", s, tccp->prcw[i]); + fprintf(xmlout,"%s %d\n", s, tccp->prch[i]); + } + fprintf(xmlout, "%s \n", s, i); + } + fprintf(xmlout, "%s \n", s); /* 1 byte, SPcox (I_i) */ + } + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s\n", s); + } +} + +/* ------------- */ + +BOOL same_component_style(opj_tccp_t *tccp1, opj_tccp_t *tccp2) +{ + int i; + + if(tccp1->numresolutions != tccp2->numresolutions) + return FALSE; + if(tccp1->cblkw != tccp2->cblkw) + return FALSE; + if(tccp1->cblkh != tccp2->cblkh) + return FALSE; + if(tccp1->cblksty != tccp2->cblksty) + return FALSE; + if(tccp1->csty != tccp2->csty) + return FALSE; + + if (tccp1->csty & J2K_CP_CSTY_PRT) { + for (i = 0; i < tccp1->numresolutions; i++) { + if(tccp1->prcw[i] != tccp2->prcw[i] || tccp1->prch[i] != tccp2->prch[i]) + return FALSE; + } + } + return TRUE; +} + +/* ------------- */ + +void xml_out_frame_qcd(FILE* xmlout, opj_tcp_t *tcp) +{ + /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */ + opj_tccp_t *tccp; + int bandno, numbands; + char spaces[13] = " "; /* 12 spaces if tilepart*/ + char* s = spaces; + if(tcp == j2k_default_tcp) { + s++;s++; /* shorten s to 10 spaces if main */ + } + + /* Compare j2k_read_qcx */ + fprintf(xmlout, "%s\n", s); /* Required in main header, single occurrence */ + tccp = &(tcp->tccps[0]); + /* Not retained or of interest: Lqcd */ + fprintf(xmlout, "%s \n", s); /* 1 byte */ + if(notes) + fprintf(xmlout, "%s \n", s); + if(raw) + fprintf(xmlout, "%s 0x%02x\n", s, (tccp->numgbits) << 5 | tccp->qntsty); + if(derived) + fprintf(xmlout, "%s %d\n", s, tccp->qntsty); + if(notes) { + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + if(derived) + fprintf(xmlout, "%s %d\n", s, tccp->numgbits); + if(notes) + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + + /* Problem: numbands in some cases is calculated from len, which is not retained or available here at this time */ + /* So we'll just dump all internal values */ + /* We could calculate it, but I'm having trouble believing the length equations in the standard */ + + fprintf(xmlout, "%s \n", s); + switch(tccp->qntsty) { + case J2K_CCP_QNTSTY_NOQNT: /* no quantization */ + /* This is what standard says, but I don't believe it: len = 4 + (3*decomp); */ + numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */ + /* Better: IMAGINE numbands = tccp->stepsize_numbands; */ + /* Instead look for first zero exponent, quit there. Adequate? */ + fprintf(xmlout, "%s \n", s); + if(notes) { + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + for (bandno = 0; bandno < numbands; bandno++) { + if(tccp->stepsizes[bandno].expn == 0) + break; /* Remove when we have real numbands */ + fprintf(xmlout, "%s \n", s, bandno); + if(raw) + fprintf(xmlout,"%s 0x%02x\n", s, tccp->stepsizes[bandno].expn << 3); + if(derived) + fprintf(xmlout,"%s %d\n", s, tccp->stepsizes[bandno].expn); + fprintf(xmlout, "%s \n", s); + } + fprintf(xmlout, "%s \n", s); + break; + case J2K_CCP_QNTSTY_SIQNT: /* scalar quantization derived */ + /* This is what standard says. Should I believe it:: len = 5; + /* numbands = 1; */ + fprintf(xmlout, "%s \n", s); + if(notes) + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + if(notes) + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + + for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) { + if(tccp->stepsizes[bandno].expn == 0) + break; + + fprintf(xmlout, "%s %d\n", s, bandno, tccp->stepsizes[bandno].expn); + } + + fprintf(xmlout, "%s \n", s); + break; + + default: /* J2K_CCP_QNTSTY_SEQNT */ /* scalar quantization expounded */ + /* This is what standard says, but should I believe it: len = 5 + 6*decomp; */ + numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/ + /* Better: IMAGINE numbands = tccp->stepsize_numbands; */ + fprintf(xmlout, "%s \n", s); + if(notes) { + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + for (bandno = 0; bandno < numbands; bandno++) { + if(tccp->stepsizes[bandno].expn == 0 && tccp->stepsizes[bandno].mant == 0) + break; /* Remove when we have real numbands */ + + fprintf(xmlout, "%s \n", s, bandno); + if(raw) + fprintf(xmlout,"%s 0x%02x\n", s, (tccp->stepsizes[bandno].expn << 11) | tccp->stepsizes[bandno].mant); + if(derived) { + fprintf(xmlout,"%s %d\n", s, tccp->stepsizes[bandno].expn); + fprintf(xmlout,"%s %d\n", s, tccp->stepsizes[bandno].mant); + } + fprintf(xmlout, "%s \n", s); + } + fprintf(xmlout, "%s \n", s); + break; + } /* switch */ + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s\n", s); + +/* Alignments: " < < < < < To help maintain xml pretty-printing */ +} + +/* ------------- */ + +void xml_out_frame_qcc(FILE* xmlout, opj_tcp_t *tcp, int numcomps) +{ +/* Uses global j2k_default_tcp */ + /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */ + opj_tccp_t *tccp, *firstcomp_tccp; + int bandno, numbands; + int compno; + char spaces[13] = " "; /* 12 spaces if tilepart*/ + char* s = spaces; + if(tcp == j2k_default_tcp) { + s++;s++; /* shorten s to 10 spaces if main */ + } + + firstcomp_tccp = &(tcp->tccps[0]); + /* Internal data structure tccp defines separate defaults for each component, set from main */ + /* default, then selectively overwritten. */ + /* Compare j2k_read_qcx(...) */ + /* We don't really know which was the default, and which were not */ + /* Let's pretend that [0] is the default and all others are not */ + if(notes) { + fprintf(xmlout, "%s\n", s); + if(tcp == j2k_default_tcp) + fprintf(xmlout, "%s\n", s); + else + fprintf(xmlout, "%s\n", s); + } + for (compno = 1; compno < numcomps; compno++) /* spec says components are zero-based */ + { + tccp = &(tcp->tccps[compno]); + if(same_component_quantization(firstcomp_tccp, tccp)) + continue; + + /* Compare j2k_read_qcx */ + fprintf(xmlout, "%s\n", s, compno); /* Required in main header, single occurrence */ + tccp = &j2k_default_tcp->tccps[0]; + /* Not retained or perhaps of interest: Lqcd It maybe can be calculated. */ + fprintf(xmlout, "%s \n", s); /* 1 byte */ + if(notes) + fprintf(xmlout, "%s \n", s); + if(raw) + fprintf(xmlout, "%s 0x%02x\n", s, (tccp->numgbits) << 5 | tccp->qntsty); + if(derived) + fprintf(xmlout, "%s %d\n", s, tccp->qntsty); + if(notes) { + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + if(derived) + fprintf(xmlout, "%s %d\n", s, tccp->numgbits); + if(notes) + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + + /* Problem: numbands in some cases is calculated from len, which is not retained or available here at this time */ + /* So we'll just dump all internal values */ + fprintf(xmlout, "%s \n", s); + switch(tccp->qntsty) { + case J2K_CCP_QNTSTY_NOQNT: + numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */ + /* Better: IMAGINE numbands = tccp->stepsize_numbands; */ + + /* Instead look for first zero exponent, quit there. Adequate? */ + fprintf(xmlout, "%s \n", s); + if(notes) { + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + for (bandno = 0; bandno < numbands; bandno++) { + if(tccp->stepsizes[bandno].expn == 0) + break; /* Remove this once we have real numbands */ + fprintf(xmlout, "%s \n", s, bandno); + if(raw) + fprintf(xmlout,"%s 0x%02x\n", s, tccp->stepsizes[bandno].expn << 3); + if(derived) + fprintf(xmlout,"%s %d\n", s, tccp->stepsizes[bandno].expn); + fprintf(xmlout, "%s \n", s); + } + fprintf(xmlout, "%s \n", s); + break; + case J2K_CCP_QNTSTY_SIQNT: + /* numbands = 1; */ + fprintf(xmlout, "%s \n", s); + if(notes) + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + if(notes) + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + + for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) { + if(tccp->stepsizes[bandno].expn == 0) + break; + + fprintf(xmlout, "%s %d\n", s, bandno, tccp->stepsizes[bandno].expn); + } + fprintf(xmlout, "%s \n", s); + break; + + default: /* J2K_CCP_QNTSTY_SEQNT */ + numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/ + /* Better: IMAGINE numbands = tccp->stepsize_numbands; */ + fprintf(xmlout, "%s \n", s); + if(notes) { + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s \n", s); + } + for (bandno = 0; bandno < numbands; bandno++) { + if(tccp->stepsizes[bandno].expn == 0 && tccp->stepsizes[bandno].mant == 0) + break; /* Remove this once we have real numbands count */ + fprintf(xmlout, "%s \n", s, bandno); + if(raw) + fprintf(xmlout,"%s 0x%02x\n", s, (tccp->stepsizes[bandno].expn << 11) | tccp->stepsizes[bandno].mant); + if(derived) { + fprintf(xmlout,"%s %d\n", s, tccp->stepsizes[bandno].expn); + fprintf(xmlout,"%s %d\n", s, tccp->stepsizes[bandno].mant); + } + fprintf(xmlout, "%s \n", s); + } + fprintf(xmlout, "%s \n", s); + break; + } /* switch */ + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s\n", s); + } +/* Alignments: " < < < < < To help maintain xml pretty-printing */ +} + +/* ------------- */ + +BOOL same_component_quantization(opj_tccp_t *tccp1, opj_tccp_t *tccp2) +{ + int bandno, numbands; + + if(tccp1->qntsty != tccp2->qntsty) + return FALSE; + if(tccp1->numgbits != tccp2->numgbits) + return FALSE; + + switch(tccp1->qntsty) { + case J2K_CCP_QNTSTY_NOQNT: + numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */ + /* Instead look for first zero exponent, quit there. Adequate? */ + for (bandno = 0; bandno < numbands; bandno++) { + if(tccp1->stepsizes[bandno].expn == 0) + break; + if(tccp1->stepsizes[bandno].expn != tccp2->stepsizes[bandno].expn) + return FALSE; + } + break; + case J2K_CCP_QNTSTY_SIQNT: + /* numbands = 1; */ + if(tccp1->stepsizes[0].expn != tccp2->stepsizes[0].expn || tccp1->stepsizes[0].mant != tccp2->stepsizes[0].mant) + return FALSE; + /* Don't need to check remainder, since they are calculated from [0] */ + break; + + default: /* J2K_CCP_QNTSTY_SEQNT */ + numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/ + /* This comparison may cause us problems with trailing junk values. */ + for (bandno = 0; bandno < numbands; bandno++) { + if(tccp1->stepsizes[bandno].expn != tccp2->stepsizes[bandno].expn || tccp1->stepsizes[bandno].mant != tccp2->stepsizes[bandno].mant); + return FALSE; + } + break; + } /* switch */ + return TRUE; +} + +/* ------------- */ + +void xml_out_frame_rgn(FILE* xmlout, opj_tcp_t *tcp, int numcomps) +{ + int compno, SPrgn; + /* MJ2 files can have regions of interest if hybridized with JPX Part II */ + char spaces[13] = " "; /* 12 spaces if tilepart*/ + char* s = spaces; + if(tcp == j2k_default_tcp) { + s++;s++; /* shorten s to 10 spaces if main */ + } + + for(compno = 0; compno < numcomps; compno++) { + SPrgn = tcp->tccps[compno].roishift; /* 1 byte; SPrgn */ + if(SPrgn == 0) + continue; /* Yet another kludge */ + + fprintf(xmlout, "%s\n", s); /* Optional in main header, at most 1 per component */ + if(notes) + fprintf(xmlout, "%s\n", s); + /* Not retained or of interest: Lrgd */ + fprintf(xmlout, "%s 0\n", s); /* 1 byte */ + if(notes) + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "%s %d\n", s, compno); /* 1 or 2 bytes */ + fprintf(xmlout, "%s %d\n", s, SPrgn); /* 1 byte */ + if(notes) + fprintf(xmlout, "%s \n", s); + fprintf(xmlout, "POC != 1) + return; /* Not present */ + + fprintf(xmlout, "%s\n", s); /* Optional in main header, at most 1 per component */ + /* j2k_read_poc seems to allow accumulation of default pocs from multiple POC segments, but does + the spec really allow that? */ + /* 2 bytes, not retained; Lpoc */ + /* I probably didn't get this dump precisely right. */ + for (i = 0; i < tcp->numpocs; i++) { + poc = &tcp->pocs[i]; + fprintf(xmlout, "%s \n", s, i+1); + fprintf(xmlout, "%S %d\n", s, poc->resno0); /* 1 byte, RSpoc_i */ + if(notes) + fprintf(xmlout,"%s \n", s); + fprintf(xmlout, "%s %d\n", s, poc->compno0);/* j2k_img->numcomps <= 256 ? 1 byte : 2 bytes; CSpoc_i */ + if(notes) + fprintf(xmlout,"%s \n", s); + fprintf(xmlout, "%s %d\n", s, poc->layno1); /* int_min(cio_read(2), tcp->numlayers); /* 2 bytes; LYEpoc_i */ + if(notes) + fprintf(xmlout,"%s \n", s); + fprintf(xmlout, "%s %d\n", s, poc->resno1); /*int_min(cio_read(1), tccp->numresolutions); /* REpoc_i */ + if(notes) + fprintf(xmlout,"%s \n", s); + fprintf(xmlout, "%s %d\n", s, poc->compno1); /* int_min(cio_read(j2k_img->numcomps <= 256 ? 1 : 2), j2k_img->numcomps); /* CEpoc_i */ + if(notes) + fprintf(xmlout,"%s \n", s); + fprintf(xmlout, "%s %d\n", s, poc->prg); /* 1 byte Ppoc_i */ + if(notes) { + fprintf(xmlout,"%s \n", s); + fprintf(xmlout,"%s \n", s); + fprintf(xmlout,"%s \n", s); + } + fprintf(xmlout, "%s \n", s); + } + fprintf(xmlout, "%sppm != 1) + return; /* Not present */ +/* Main header uses indent of 10 spaces */ + fprintf(xmlout, " \n"); /* Optional in main header, but if not, must be in PPT or codestream */ + /* 2 bytes Lppm not saved */ + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + + /* 1 byte, not retained ; Zppm is sequence # of this PPM header */ + /* 4 bytes, possibly overwritten multiple times in j2k_cp->ppm_previous: Nppm */ + /* Use j symbol for index instead of i, to make comparable with j2k_read_ppm */ + /* Not real clear whether to use ppm->store or ppm_len as upper bound */ + fprintf(xmlout, " \n"); + xml_out_dump_hex(xmlout, cp->ppm_data, cp->ppm_len); + /* Dump packet headers 1 byte at a time: lppm[i][j] */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); /* Optional in main header, but if not, must be in PPT or codestream */ +} + +/* ------------- */ + +void xml_out_frame_ppt(FILE *xmlout, opj_tcp_t *tcp) { /* For tile-part header, not main (which uses PPM instead). */ +/* Either the PPM or PPT is required if the packet headers are not distributed in the bit stream */ +/* Use of PPM and PPT are mutually exclusive. */ +/* Compare j2k_read_ppt() */ + int j; + + if(tcp->ppt != 1) + return; /* Not present */ + + /* Tile-part indents are 12 spaces */ + fprintf(xmlout, " \n"); /* Optional in main header, but if not, must be in PPT or codestream */ + /* 2 bytes Lppm not saved */ + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + + /* 1 byte, not retained ; Zppt is sequence # of this PPT header */ + /* 4 bytes, possibly overwritten multiple times in j2k_cp->ppt_previous: Nppt */ + /* Use j symbol for index instead of i, to make comparable with j2k_read_ppt */ + /* Not real clear whether to use ppt->store or ppt_len as upper bound */ + fprintf(xmlout, " \n"); + xml_out_dump_hex(xmlout, tcp->ppt_data, tcp->ppt_len); + /* Dump packet headers 1 byte at a time: lppt[i][j] */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); /* Optional in tile-part header, but if not, must be in PPM or codestream */ +} +#endif SUPPRESS_FOR_NOW + +/* ------------- */ + +void xml_out_frame_tlm(FILE* xmlout) { /* opt, main header only. May be multiple. */ +/* Compare j2k_read_tlm()... which doesn't retain anything! */ +/* Plan: Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */ +/* Main header indents are 10 spaces */ +} + +/* ------------- */ + +void xml_out_frame_plm(FILE* xmlout) { /* opt, main header only; can be used in conjunction with tile-part's PLT */ +/* NO-OP. PLM NOT SAVED IN DATA STRUCTURE */ + /* Compare j2k_read_plm()... which doesn't retain anything! */ +/* Plan: Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */ +/* Main header indents are 10 spaces */ +} + +/* ------------- */ + +void xml_out_frame_plt(FILE* xmlout, opj_tcp_t *tcp) { /* opt, tile-part headers only; can be used in conjunction with main header's PLM */ +/* NO-OP. PLT NOT SAVED IN DATA STRUCTURE */ + /* Compare j2k_read_plt()... which doesn't retain anything! */ +/* Tile-part header indents are 12 spaces */ +} + +/* ------------- */ + +void xml_out_frame_crg(FILE* xmlout) { /* NO-OP. CRG NOT SAVED IN DATA STRUCTURE */ /* opt, main header only; */ +/* Compare j2k_read_crg()... which doesn't retain anything! */ +/* Plan: Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */ +#ifdef NOTYET + THIS PSEUDOCODE IMAGINES THESE EXIST: j2k_default_tcp->crg, j2k_default_tcp->crg_i, j2k_default_tcp->crg_xcrg*, j2k_default_tcp->crg_ycrg* + (POSSIBLY DON'T NEED crg_i, CAN GET NUMBER OR COMPONENTS FROM ELSEWHERE) + if(j2k_default_tcp->crg != 1 || j2k_default_tcp->crg_i == 0) + return; /* Not present */ + +/* Main header indents are 10 spaces */ + fprintf(xmlout, " \n", j2k_default_tcp->crg_i); + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + /* This isn't the most compact form of table, but is OK when number of components is small, as is likely. */ + for (i = 0; i < j2k_default_tcp->crg_i; i++) { + fprintf(xmlout, " \n", i+1); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout," %d\n", j2k_default_tcp->crg_xcrg[i]); + if(derived) { + /* Calculate n * 100%/65536; 4 digits after decimal point is sufficiently accurate */ + fprintf(xmlout," %.4f\n", ((double)j2k_default_tcp->crg_xcrg[i])/655.36); + /* We could do another calculation that include XRsiz[i]; maybe later. */ + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + if(raw) + fprintf(xmlout," %d\n", j2k_default_tcp->crg_ycrg[i]); + if(derived) { + fprintf(xmlout," %f\n", ((double)j2k_default_tcp->crg_ycrg[i])/655.36); + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + + fprintf(xmlout, " \n"); + +#endif +} + +/* ------------- */ + +/* Regrettably from a metadata point of view, j2k_read_com() skips over any comments in main header or tile-part-header */ +void xml_out_frame_com(FILE* xmlout, opj_tcp_t *tcp) { /* NO-OP. COM NOT SAVED IN DATA STRUCTURE */ /* opt in main or tile-part headers; */ +/* Compare j2k_read_com()... which doesn't retain anything! */ +#ifdef NOTYET + char spaces[13] = " "; /* 12 spaces if tilepart*/ + char* s = spaces; + if(tcp == &j2k_default_tcp) { + s++;s++; /* shorten s to 10 spaces if main */ + } + THIS PSEUDOCODE IMAGINES THESE EXIST: tcp->com, tcp->com_len, tcp->com_data array + if(tcp->com != 1) + return; /* Not present */ + + fprintf(xmlout, "%s\n", s); /* Optional in main or tile-part header */ + xml_out_dump_hex_and_ascii(tcp->com_data, tcp->com_len, s); + fprintf(xmlout, "%s\n", s); +#endif +} + +void xml_out_dump_hex(FILE* xmlout, char *data, int data_len, char* s) { + /* s is a string of spaces for indent */ + int i; + + /* This is called when raw is true, or there is no appropriate derived form */ + fprintf(xmlout, "%s\n", s); + fprintf(xmlout, "%s ", s); /* Inadequate for pretty printing */ + for (i = 0; i < data_len; i++) { /* Dump packet headers */ + fprintf(xmlout, "%02x", data[i]); + } + fprintf(xmlout, "%s\n", s); +} + +/* Define this as an even number: */ +#define BYTES_PER_DUMP_LINE 40 +/* Current total width for Hex and ASCII is : 11 spaces lead + (3 * BPDL) + 2 spaces + BPDL */ +void xml_out_dump_hex_and_ascii(FILE* xmlout, char *data, int data_len, char* s) { + /* s is a string of spaces for indent */ + int i,j; + + if(raw) + xml_out_dump_hex(xmlout, data, data_len, s); + + if(derived) { + fprintf(xmlout, "%s\n", s); + for (i = 0; i < data_len; ) { + fprintf(xmlout,"%s ", s); /* Additional leading space added in loop */ + /* First column: hex */ + for (j = 0; j < BYTES_PER_DUMP_LINE; j++) /* Dump bytes */ + fprintf(xmlout," %02x", data[i+j]); + /* Space between columns... */ fprintf(xmlout, " "); + /* Second column: ASCII */ + for (j = 0; j < BYTES_PER_DUMP_LINE; j++, i++) { + if(isprint((int)data[i]) && i < data_len) + fprintf(xmlout,"%c", data[i]); + else + fprintf(xmlout," "); + } + /* If we also wanted to output UCS-2 Unicode as a third column, then entire document + must use fwprintf. Forget about it for now. As it stands, if data is UCS-2 format but still + the ASCII set, then we'll be able to read every other byte as ASCII in column 2. If + data is UTF-8 format but still ASCII, then we'll be able to read every byte as ASCII + in column 2. */ + } + fprintf(xmlout, "%s\n", s); + } +} + + +/* ------------- */ + +void xml_out_frame_jp2h(FILE* xmlout, opj_jp2_t *jp2_struct) { /* JP2 Header */ +/* Compare jp2_read_jp2h(opj_jp2_t * jp2_struct) */ + int i; + + fprintf(xmlout, " \n"); + +/* Compare jp2_read_ihdr(jp2_struct)) */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", jp2_struct->h); /* 4 bytes */ + fprintf(xmlout, " %d\n", jp2_struct->w); /* 4 bytes */ + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", jp2_struct->numcomps); /* 2 bytes */ + if(notes) + fprintf(xmlout, " \n"); /* 2 bytes */ + fprintf(xmlout, " \n"); /* 1 byte */ + if(jp2_struct->bpc == 255) { + fprintf(xmlout, " 0x%02x\n", jp2_struct->bpc); /* 1 byte */ + if(notes) + fprintf(xmlout, " \n"); + } else { /* Not 0xff */ + if(raw) { + fprintf(xmlout, " 0x%02x\n", jp2_struct->bpc); /* 1 byte */ + if(notes) + fprintf(xmlout," \n"); + } + if(derived) { + fprintf(xmlout, " %d\n", jp2_struct->bpc & 0x7f); + fprintf(xmlout, " %d\n", jp2_struct->bpc >> 7); + } + } + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", jp2_struct->C); /* 1 byte */ + if(notes) + fprintf(xmlout, " \n"); /* 2 bytes */ + fprintf(xmlout, " %d\n", jp2_struct->UnkC); /* 1 byte */ + if(notes) + fprintf(xmlout, " \n"); /* 1 byte */ + fprintf(xmlout, " %d\n", jp2_struct->IPR); /* 1 byte */ + if(notes) + fprintf(xmlout, " \n"); /* 2 bytes */ + fprintf(xmlout, " \n"); + + if (jp2_struct->bpc == 255) + { + fprintf(xmlout, " \n"); + if(notes) + fprintf(xmlout, " \n"); + /* Bits per pixel varies with components */ + /* Compare jp2_read_bpcc(jp2_struct) */ + for (i = 0; i < (int)jp2_struct->numcomps; i++) { + if(raw) + fprintf(xmlout," 0x%02x\n", jp2_struct->comps[i].bpcc); /* 1 byte */ + if(derived) { + fprintf(xmlout," %d\n", (jp2_struct->comps[i].bpcc & 0x7f)+1); + fprintf(xmlout," %d\n", jp2_struct->comps[i].bpcc >> 7); + } + } + fprintf(xmlout, " \n"); + } + + /* Compare jp2_read_colr(jp2_struct) */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", jp2_struct->meth); /* 1 byte */ + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + fprintf(xmlout, " %d\n", jp2_struct->precedence); /* 1 byte */ + if(notes) + fprintf(xmlout, " \n"); + fprintf(xmlout, " %d\n", jp2_struct->approx); /* 1 byte */ + if(notes) + fprintf(xmlout, " \n"); + + if (jp2_struct->meth == 1) { + fprintf(xmlout, " %d\n", jp2_struct->enumcs); /* 4 bytes */ + if(notes) { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } + } + else + if(notes) + fprintf(xmlout, " \n"); + /* only 1 byte is read and nothing stored */ + fprintf(xmlout, " \n"); + + /* TO DO? No OpenJPEG support. + Palette 'pclr' + ComponentMapping 'cmap' + ChannelDefinition 'cdef' + Resolution 'res' + */ + fprintf(xmlout, " \n"); +} +/* ------------- */ + +#ifdef NOTYET +IMAGE these use cp structure, extended... but we could use a new data structure instead +void xml_out_frame_jp2i(FILE* xmlout, opj_cp_t *cp) { + /* IntellectualProperty 'jp2i' (no restrictions on location) */ + int i; + IMAGE cp->jp2i, cp->jp2i_count, cp->jp2i_data (array of chars), cp->cp2i_len (array of ints) + if(cp->jp2i != 1) + return; /* Not present */ + + for(i = 0; i < cp->jp2i_count; i++) + { + fprintf(xmlout, " \n"); + /* I think this can be anything, including binary, so do a dump */ + /* Is it better to indent or not indent this content? Indent is better for reading, but + worse for cut/paste. */ + xml_out_dump_hex_and_ascii(xmlout, cp->jp2i_data[i], cp->jp2i_len[i]); + fprintf(xmlout, " \n"); + } +} + +void xml_out_frame_xml(FILE* xmlout, opj_cp_t *cp) { + /* XML 'xml\040' (0x786d6c20). Can appear multiply, before or after jp2c codestreams */ + IMAGE cp->xml, cp->xml_count, cp->xml_data (array of chars) + MAYBE WE DON'T NEED cp->xml_len (array of ints) IF WE ASSUME xml_data IS NULL-TERMINATED. + ASSUME ASSUME EACH LINE IS ENDED BY \n. + int i; + if(cp->xml != 1) + return; /* Not present */ + + for(i = 0; i < cp->xml_count; i++) + { + fprintf(xmlout, " \n", i+1); + /* Is it better to indent or not indent this content? Indent is better for reading, but + worse for cut/paste. Being lazy, didn't indent here. */ + fprintf(xmlout,cp->xml_data[i]); /* May be multiple lines */ /* Could check if this is well-formed */ + fprintf(xmlout, " \n"); + } +} + +void xml_out_frame_uuid(FILE* xmlout, opj_cp_t *cp) { + /* UUID 'uuid' (top level only) */ + /* Part I 1.7.2 says: may appear multiply in JP2 file, anywhere except before File Type box */ + /* Part III 5.2.1 says: Private extensions shall be achieved through the 'uuid' type. */ + /* A UUID is a 16-byte value. There is a conventional string representation for it: + "0x12345678-9ABC-DEF0-1234-567890ABCDEF". Let's assume that is what is stored in uuid_value */ + + /* Part III 6.1 Any other MJ2 box type could be alternatively written as a 'uuid' box, with value given + as : 0xXXXXXXXX-0011-0010-8000-00AA00389B71, where the Xs are the boxtype in hex. However, + such a file is "not compliant; systems may choose to read [such] objects ... as equivalent to the box of + the same type, or not." Here, we choose not to. */ + int i; + IMAGE cp->uuid, cp->uuid_count, cp->uuid_value (array of uuids... let's say fixed-length strings) cp->uuid_data (array of char buffers), cp->uuid_len (array of ints) + if(cp->juuid != 1) + return; /* Not present */ + + for(i = 0; i < cp->uuid_count; i++) + { + fprintf(xmlout, " + fprintf(xmlout, " %s\n", cp->uuid_value[i]); + fprintf(xmlout, " \n"); + /* I think this can be anything, including binary, so do a dump */ + /* Is it better to indent or not indent this content? Indent is better for reading, but + worse for cut/paste. */ + xml_out_dump_hex_and_ascii(xmlout, cp->uuid_data[i], cp->uuid_len[i]); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } +} + +void xml_out_frame_uinf(FILE* xmlout, opj_cp_t *cp) { + /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */ + /* Part I 1.7.3 says: may appear multiply in JP2 file, anywhere at the top level except before File Type box */ + /* So there may be multiple ulst's, and each can have multiple UUIDs listed (with a single URL) */ + /* This is not quite as vendor-specific as UUIDs, or at least is meant to be generally readable */ + /* Assume UUIDs stored in canonical string format */ + int i, j; + IMAGE cp->uinf, cp->uinf_count, cp->uinf_ulst_nu (array of ints) + cp->uinf_uuid (2 dimensional array of uuids... let's say fixed-length strings), + cp->uinf_url (array of char buffers) + + if(cp->uinf != 1) + return; /* Not present */ + + for(i = 0; i < cp->uuid_count; i++) + { + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n",cp->cp->uinf_ulst_nu[i]); + for(j = 0; j < cp->uinf_ulst_nu[i]; j++) + fprintf(xmlout, " %s\n", cp->uuif_uuid[i][j], j+1); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + /* Could add VERS and FLAG here */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " %s",cp->uinf_url[i]); /* Probably single line, so indent works */ /* In theory, could check if this is well-formed, or good live link */ + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + fprintf(xmlout, " \n"); + } +} + +IMAGE these use cp structure, extended... but we could use a new data structure instead +void xml_out_frame_unknown_type(FILE* xmlout, opj_cp_t *cp) { + /* Part III 5.2.1 says "Type fields not defined here are reserved. Private extensions + shall be acieved through the 'uuid' type." [This implies an unknown + type would be an error, but then...] "Boxes not explicitly defined in this standard, + or otherwise unrecognized by a reader, may be ignored." + Also, it says "the following types are not and will not be used, or used only in + their existing sense, in future versions of this specification, to avoid conflict + with existing content using earlier pre-standard versions of this format: + clip, crgn, matt, kmat, pnot, ctab, load, imap; + track reference types tmcd, chap, sync,scpt, ssrc" + [But good luck figuring out the mapping.] + Part III Amend. 2 4.1 is stronger: "All these specifications [of this family, e.g., + JP2 Part I, ISO Base format (Part 12) leading to MP4, Quicktime, and possibly including + MJ2] require that readers ignore objects that are unrecognizable to them". + */ + int i; + IMAGE cp->unknown_type, cp->unknown_type_count, cp->unknown_type_boxtype (array of buf[5]s), cp->unknown_type_data (array of chars), cp->unknown_type_len (array of ints) + if(cp->unknown_type != 1) + return; /* Not present */ + + for(i = 0; i < cp->unknown_type_count; i++) + { + fprintf(xmlout, " \n", cp->unknown_type_boxtype[i]); + /* Can be anything, including binary, so do a dump */ + /* Is it better to indent or not indent this content? Indent is better for reading, but + worse for cut/paste. */ + xml_out_dump_hex_and_ascii(xmlout, cp->unknown_type_data[i], cp->unknown_type_len[i]); + fprintf(xmlout, " \n"); + } +} + +#endif diff --git a/contrib/menuetlibc/openjpeg/mj2/meta_out.h b/contrib/menuetlibc/openjpeg/mj2/meta_out.h new file mode 100644 index 0000000000..293316d1f4 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/meta_out.h @@ -0,0 +1,13 @@ +/* meta_out.h */ +/* Dump MJ2, JP2 metadata (partial so far) to xml file */ +/* Callable from mj2_to_metadata */ +/* Contributed to Open JPEG by Glenn Pearson, U.S. National Library of Medicine */ + +#define BOOL int +#define FALSE 0 +#define TRUE 1 + +void xml_write_init(BOOL n, BOOL t, BOOL r, BOOL d); + +int xml_write_struct(FILE *file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, char* stringDTD, opj_event_mgr_t *event_mgr); + diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2.c b/contrib/menuetlibc/openjpeg/mj2/mj2.c new file mode 100644 index 0000000000..01ee90c537 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2.c @@ -0,0 +1,2911 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2003-2007, Francois-Olivier Devaux + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include "../libopenjpeg/opj_includes.h" +#include "mj2.h" + +/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */ +/*@{*/ + +/** @name Local static functions */ +/*@{*/ + +/** +Read box headers +@param cinfo Codec context info +@param cio Input stream +@param box +@return Returns true if successful, returns false otherwise +*/ +/*-- UNUSED +static bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio, opj_jp2_box_t *box); +--*/ +/* +* +* Read box headers +* +*/ + +int mj2_read_boxhdr(mj2_box_t * box, opj_cio_t *cio) +{ + box->init_pos = cio_tell(cio); + box->length = cio_read(cio, 4); + box->type = cio_read(cio, 4); + if (box->length == 1) { + if (cio_read(cio, 4) != 0) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Cannot handle box sizes higher than 2^32\n"); + return 1; + }; + box->length = cio_read(cio, 4); + if (box->length == 0) + box->length = cio_numbytesleft(cio) + 12; + } + else if (box->length == 0) { + box->length = cio_numbytesleft(cio) + 8; + } + return 0; +} + +/* +* +* Initialisation of a Standard Movie, given a simple movie structure defined by the user +* The movie will have one sample per chunk +* +* Arguments: opj_mj2_t * movie +* Several variables of "movie" must be defined in order to enable a correct execution of +* this function: +* - The number of tracks of each type (movie->num_vtk, movie->num_stk, movie->num_htk) +* - The memory for each must be allocated (movie->tk) +* - For each track: +* The track type (tk->track_type) +* The number of sample (tk->num_samples) +* The sample rate (tk->sample_rate) +* +*/ + +int mj2_init_stdmovie(opj_mj2_t * movie) +{ + int i; + unsigned int j; + time_t ltime; + + movie->brand = MJ2_MJ2; + movie->minversion = 0; + movie->num_cl = 2; + movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int)); + + movie->cl[0] = MJ2_MJ2; + movie->cl[1] = MJ2_MJ2S; + time(<ime); /* Time since 1/1/70 */ + movie->creation_time = (unsigned int) ltime + 2082844800; /* Seconds between 1/1/04 and 1/1/70 */ + movie->timescale = 1000; + + movie->rate = 1 << 16; /* Rate to play presentation (default = 0x00010000) */ + movie->volume = 1 << 8; /* Movie volume (default = 0x0100) */ + movie->trans_matrix[0] = 0x00010000; /* Transformation matrix for video */ + movie->trans_matrix[1] = 0; /* Unity is { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 } */ + movie->trans_matrix[2] = 0; + movie->trans_matrix[3] = 0; + movie->trans_matrix[4] = 0x00010000; + movie->trans_matrix[5] = 0; + movie->trans_matrix[6] = 0; + movie->trans_matrix[7] = 0; + movie->trans_matrix[8] = 0x40000000; + movie->next_tk_id = 1; + + for (i = 0; i < movie->num_htk + movie->num_stk + movie->num_vtk; i++) { + mj2_tk_t *tk = &movie->tk[i]; + movie->next_tk_id++; + tk->jp2_struct.comps = NULL; + tk->jp2_struct.cl = NULL; + + if (tk->track_type == 0) { + if (tk->num_samples == 0) + return 1; + + tk->Dim[0] = 0; + tk->Dim[1] = 0; + + tk->timescale = 1000; /* Timescale = 1 ms */ + + tk->chunk[0].num_samples = 1; + tk->chunk[0].sample_descr_idx = 1; + + tk->same_sample_size = 0; + + tk->num_samplestochunk = 1; /* One sample per chunk */ + tk->sampletochunk = (mj2_sampletochunk_t*) opj_malloc(tk->num_samplestochunk * sizeof(mj2_sampletochunk_t)); + tk->sampletochunk[0].first_chunk = 1; + tk->sampletochunk[0].samples_per_chunk = 1; + tk->sampletochunk[0].sample_descr_idx = 1; + + if (tk->sample_rate == 0) { + opj_event_msg(tk->cinfo, EVT_ERROR, + "Error while initializing MJ2 movie: Sample rate of track %d must be different from zero\n", + tk->track_ID); + return 1; + } + + for (j = 0; j < tk->num_samples; j++) { + tk->sample[j].sample_delta = tk->timescale / tk->sample_rate; + } + + tk->num_tts = 1; + tk->tts = (mj2_tts_t*) opj_malloc(tk->num_tts * sizeof(mj2_tts_t)); + tk->tts[0].sample_count = tk->num_samples; + tk->tts[0].sample_delta = tk->timescale / tk->sample_rate; + + tk->horizresolution = 0x00480000; /* Horizontal resolution (typically 72) */ + tk->vertresolution = 0x00480000; /* Vertical resolution (typically 72) */ + tk->compressorname[0] = 0x0f4d6f74; /* Compressor Name[]: Motion JPEG2000 */ + tk->compressorname[1] = 0x696f6e20; + tk->compressorname[2] = 0x4a504547; + tk->compressorname[3] = 0x32303030; + tk->compressorname[4] = 0x00120000; + tk->compressorname[5] = 0; + tk->compressorname[6] = 0x00000042; + tk->compressorname[7] = 0x000000DC; + tk->num_url = 0; /* Number of URL */ + tk->num_urn = 0; /* Number of URN */ + tk->graphicsmode = 0; /* Graphicsmode */ + tk->opcolor[0] = 0; /* OpColor */ + tk->opcolor[1] = 0; /* OpColor */ + tk->opcolor[2] = 0; /* OpColor */ + tk->creation_time = movie->creation_time; /* Seconds between 1/1/04 and 1/1/70 */ + tk->language = 0; /* Language (undefined) */ + tk->layer = 0; + tk->volume = 1 << 8; /* Movie volume (default = 0x0100) */ + tk->trans_matrix[0] = 0x00010000; /* Transformation matrix for track */ + tk->trans_matrix[1] = 0; /* Unity is { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 } */ + tk->trans_matrix[2] = 0; + tk->trans_matrix[3] = 0; + tk->trans_matrix[4] = 0x00010000; + tk->trans_matrix[5] = 0; + tk->trans_matrix[6] = 0; + tk->trans_matrix[7] = 0; + tk->trans_matrix[8] = 0x40000000; + tk->fieldcount = 1; + tk->fieldorder = 0; + tk->or_fieldcount = 1; + tk->or_fieldorder = 0; + tk->num_br = 2; + tk->br = (unsigned int*) opj_malloc(tk->num_br * sizeof(unsigned int)); + tk->br[0] = MJ2_JP2; + tk->br[1] = MJ2_J2P0; + tk->num_jp2x = 0; + tk->hsub = 2; /* 4:2:0 */ + tk->vsub = 2; /* 4:2:0 */ + tk->hoff = 0; + tk->voff = 0; + tk->visual_w = tk->w << 16; + tk->visual_h = tk->h << 16; + } + else { + tk->num_br = 0; + tk->jp2xdata = NULL; + } + } + return 0; +} + +/* +* Time To Sample box Decompact +* +*/ +void mj2_tts_decompact(mj2_tk_t * tk) +{ + int i, j; + tk->num_samples = 0; + for (i = 0; i < tk->num_tts; i++) { + tk->num_samples += tk->tts[i].sample_count; + } + + tk->sample = (mj2_sample_t*) opj_malloc(tk->num_samples * sizeof(mj2_sample_t)); + + for (i = 0; i < tk->num_tts; i++) { + for (j = 0; j < tk->tts[i].sample_count; j++) { + tk->sample[j].sample_delta = tk->tts[i].sample_delta; + } + } +} + +/* +* Sample To Chunk box Decompact +* +*/ +void mj2_stsc_decompact(mj2_tk_t * tk) +{ + int j, i; + unsigned int k; + int sampleno=0; + + if (tk->num_samplestochunk == 1) { + tk->num_chunks = + (unsigned int) ceil((double) tk->num_samples / + (double) tk->sampletochunk[0].samples_per_chunk); + tk->chunk = (mj2_chunk_t*) opj_malloc(tk->num_chunks * sizeof(mj2_chunk_t)); + for (k = 0; k < tk->num_chunks; k++) { + tk->chunk[k].num_samples = tk->sampletochunk[0].samples_per_chunk; + } + + } else { + tk->chunk = (mj2_chunk_t*) opj_malloc(tk->num_samples * sizeof(mj2_chunk_t)); + tk->num_chunks = 0; + for (i = 0; i < tk->num_samplestochunk -1 ; i++) { + for (j = tk->sampletochunk[i].first_chunk - 1; + j < tk->sampletochunk[i + 1].first_chunk - 1; j++) { + tk->chunk[j].num_samples = tk->sampletochunk[i].samples_per_chunk; + tk->num_chunks++; + sampleno += tk->chunk[j].num_samples; + } + } + tk->num_chunks += (int)(tk->num_samples - sampleno) / tk->sampletochunk[tk->num_samplestochunk - 1].samples_per_chunk; + for (k = tk->sampletochunk[tk->num_samplestochunk - 1].first_chunk - 1; + k < tk->num_chunks; k++) { + tk->chunk[k].num_samples = + tk->sampletochunk[tk->num_samplestochunk - 1].samples_per_chunk; + } + tk->chunk = (mj2_chunk_t*) + opj_realloc(tk->chunk, tk->num_chunks * sizeof(mj2_chunk_t)); + } + +} + + +/* +* Chunk offset box Decompact +* +*/ +void mj2_stco_decompact(mj2_tk_t * tk) +{ + int j; + unsigned int i; + int k = 0; + int intra_chunk_offset; + + for (i = 0; i < tk->num_chunks; i++) { + intra_chunk_offset = 0; + for (j = 0; j < tk->chunk[i].num_samples; j++) { + tk->sample[k].offset = intra_chunk_offset + tk->chunk[i].offset; + intra_chunk_offset += tk->sample[k].sample_size; + k++; + } + } +} + +/* +* Write the JP box +* +* JP Signature box +* +*/ +void mj2_write_jp(opj_cio_t *cio) +{ + mj2_box_t box; + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + + cio_write(cio, MJ2_JP, 4); /* JP */ + cio_write(cio, 0x0d0a870a, 4); /* 0x0d0a870a required in a JP box */ + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the JP box +* +* JPEG 2000 signature +* +*/ +int mj2_read_jp(opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_JP != box.type) { /* Check Marker */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP Marker\n"); + return 1; + } + if (0x0d0a870a != cio_read(cio, 4)) { /* read the 0x0d0a870a required in a JP box */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP Marker\n"); + return 1; + } + if (cio_tell(cio) - box.init_pos != box.length) { /* Check box length */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP Box size \n"); + return 1; + } + return 0; + +} + +/* +* Write the FTYP box +* +* File type box +* +*/ +void mj2_write_ftyp(opj_mj2_t * movie, opj_cio_t *cio) +{ + int i; + mj2_box_t box; + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + + cio_write(cio, MJ2_FTYP, 4); /* FTYP */ + cio_write(cio, movie->brand, 4); /* BR */ + cio_write(cio, movie->minversion, 4); /* MinV */ + + for (i = 0; i < movie->num_cl; i++) + cio_write(cio, movie->cl[i], 4); /* CL */ + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* Length */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the FTYP box +* +* File type box +* +*/ +int mj2_read_ftyp(opj_mj2_t * movie, opj_cio_t *cio) +{ + int i; + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); /* Box Size */ + if (MJ2_FTYP != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected FTYP Marker\n"); + return 1; + } + + movie->brand = cio_read(cio, 4); /* BR */ + movie->minversion = cio_read(cio, 4); /* MinV */ + movie->num_cl = (box.length - 16) / 4; + movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int)); + + for (i = movie->num_cl - 1; i > -1; i--) + movie->cl[i] = cio_read(cio, 4); /* CLi */ + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with FTYP Box\n"); + return 1; + } + return 0; +} + + +/* +* Write the STCO box +* +* Chunk Offset Box +* +*/ +void mj2_write_stco(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + unsigned int i; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_STCO, 4); /* STCO */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + cio_write(cio, tk->num_chunks, 4); /* Entry Count */ + + for (i = 0; i < tk->num_chunks; i++) { + cio_write(cio, tk->chunk[i].offset, 4); /* Entry offset */ + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the STCO box +* +* Chunk Offset Box +* +*/ +int mj2_read_stco(mj2_tk_t * tk, opj_cio_t *cio) +{ + unsigned int i; + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); /* Box Size */ + if (MJ2_STCO != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STCO Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in STCO box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in STCO box. Expected flag 0\n"); + return 1; + } + + + if (cio_read(cio, 4) != tk->num_chunks) { + opj_event_msg(cio->cinfo, EVT_ERROR, + "Error in STCO box: expecting same amount of entry-count as chunks \n"); + } else { + for (i = 0; i < tk->num_chunks; i++) { + tk->chunk[i].offset = cio_read(cio, 4); /* Entry offset */ + } + } + + mj2_stco_decompact(tk); + + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STCO Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the STSZ box +* +* Sample size box +* +*/ +void mj2_write_stsz(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + unsigned int i; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_STSZ, 4); /* STSZ */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + if (tk->same_sample_size == 1) { /* If they all have the same size */ + cio_write(cio, tk->sample[0].sample_size, 4); /* Size */ + + cio_write(cio, 1, 4); /* Entry count = 1 */ + } + + else { + cio_write(cio, 0, 4); /* Sample Size = 0 becase they all have different sizes */ + + cio_write(cio, tk->num_samples, 4); /* Sample Count */ + + for (i = 0; i < tk->num_samples; i++) { + cio_write(cio, tk->sample[i].sample_size, 4); + } + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the STSZ box +* +* Sample size box +* +*/ +int mj2_read_stsz(mj2_tk_t * tk, opj_cio_t *cio) +{ + int sample_size; + unsigned int i; + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); /* Box Size */ + if (MJ2_STSZ != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSZ Marker\n"); + return 1; + } + + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in STSZ box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in STSZ box. Expected flag 0\n"); + return 1; + } + + sample_size = cio_read(cio, 4); + + if (sample_size != 0) { /* Samples do have the same size */ + tk->same_sample_size = 1; + for (i = 0; i < tk->num_samples; i++) { + tk->sample[i].sample_size = sample_size; + } + cio_skip(cio,4); /* Sample count = 1 */ + } else { + tk->same_sample_size = 0; + if (tk->num_samples != cio_read(cio, 4)) { /* Sample count */ + opj_event_msg(cio->cinfo, EVT_ERROR, + "Error in STSZ box. Expected that sample-count is number of samples in track\n"); + return 1; + } + for (i = 0; i < tk->num_samples; i++) { + tk->sample[i].sample_size = cio_read(cio, 4); /* Sample Size */ + } + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSZ Box size\n"); + return 1; + } + } + return 0; + +} + +/* +* Write the STSC box +* +* Sample to Chunk +* +*/ +void mj2_write_stsc(mj2_tk_t * tk, opj_cio_t *cio) +{ + int i; + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_STSC, 4); /* STSC */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + cio_write(cio, tk->num_samplestochunk, 4); /* Entry Count */ + + for (i = 0; i < tk->num_samplestochunk; i++) { + cio_write(cio, tk->sampletochunk[i].first_chunk, 4); /* First Chunk */ + cio_write(cio, tk->sampletochunk[i].samples_per_chunk, 4); /* Samples per chunk */ + cio_write(cio, tk->sampletochunk[i].sample_descr_idx, 4); /* Samples description index */ + } + + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the STSC box +* +* Sample to Chunk +* +*/ +int mj2_read_stsc(mj2_tk_t * tk, opj_cio_t *cio) +{ + int i; + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); /* Box Size */ + if (MJ2_STSC != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSC Marker\n"); + return 1; + } + + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in STSC box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in STSC box. Expected flag 0\n"); + return 1; + } + + tk->num_samplestochunk = cio_read(cio, 4); + + tk->sampletochunk = (mj2_sampletochunk_t*) opj_malloc(tk->num_samplestochunk * sizeof(mj2_sampletochunk_t)); + + for (i = 0; i < tk->num_samplestochunk; i++) { + tk->sampletochunk[i].first_chunk = cio_read(cio, 4); + tk->sampletochunk[i].samples_per_chunk = cio_read(cio, 4); + tk->sampletochunk[i].sample_descr_idx = cio_read(cio, 4); + } + + mj2_stsc_decompact(tk); /* decompact sample to chunk box */ + + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSC Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the STTS box +* +* Time to Sample Box +* +*/ +void mj2_write_stts(mj2_tk_t * tk, opj_cio_t *cio) +{ + + int i; + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_STTS, 4); /* STTS */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + cio_write(cio, tk->num_tts, 4); /* entry_count */ + for (i = 0; i < tk->num_tts; i++) { + cio_write(cio, tk->tts[i].sample_count, 4); /* Sample-count */ + cio_write(cio, tk->tts[i].sample_delta, 4); /* Sample-Delta */ + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the STTS box +* +* +* +*/ +int mj2_read_stts(mj2_tk_t * tk, opj_cio_t *cio) +{ + int i; + + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_STTS != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STTS Marker\n"); + return 1; + } + + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in STTS box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in STTS box. Expected flag 0\n"); + return 1; + } + + tk->num_tts = cio_read(cio, 4); + + tk->tts = (mj2_tts_t*) opj_malloc(tk->num_tts * sizeof(mj2_tts_t)); + + for (i = 0; i < tk->num_tts; i++) { + tk->tts[i].sample_count = cio_read(cio, 4); + tk->tts[i].sample_delta = cio_read(cio, 4); + } + + mj2_tts_decompact(tk); + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STTS Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the FIEL box +* +* Field coding Box +* +*/ +void mj2_write_fiel(mj2_tk_t * tk, opj_cio_t *cio) +{ + + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_FIEL, 4); /* STTS */ + + cio_write(cio, tk->fieldcount, 1); /* Field count */ + cio_write(cio, tk->fieldorder, 1); /* Field order */ + + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the FIEL box +* +* Field coding Box +* +*/ +int mj2_read_fiel(mj2_tk_t * tk, opj_cio_t *cio) +{ + + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_FIEL != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected FIEL Marker\n"); + return 1; + } + + + tk->fieldcount = cio_read(cio, 1); + tk->fieldorder = cio_read(cio, 1); + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with FIEL Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the ORFO box +* +* Original Format Box +* +*/ +void mj2_write_orfo(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_ORFO, 4); + + cio_write(cio, tk->or_fieldcount, 1); /* Original Field count */ + cio_write(cio, tk->or_fieldorder, 1); /* Original Field order */ + + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the ORFO box +* +* Original Format Box +* +*/ +int mj2_read_orfo(mj2_tk_t * tk, opj_cio_t *cio) +{ + + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_ORFO != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected ORFO Marker\n"); + return 1; + } + + + tk->or_fieldcount = cio_read(cio, 1); + tk->or_fieldorder = cio_read(cio, 1); + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with ORFO Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the JP2P box +* +* MJP2 Profile Box +* +*/ +void mj2_write_jp2p(mj2_tk_t * tk, opj_cio_t *cio) +{ + + int i; + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_JP2P, 4); + + cio_write(cio, 0, 4); /* Version 0, flags =0 */ + + for (i = 0; i < tk->num_br; i++) { + cio_write(cio, tk->br[i], 4); + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the JP2P box +* +* MJP2 Profile Box +* +*/ +int mj2_read_jp2p(mj2_tk_t * tk, opj_cio_t *cio) +{ + int i; + + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_JP2P != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP2P Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in JP2P box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in JP2P box. Expected flag 0\n"); + return 1; + } + + + tk->num_br = (box.length - 12) / 4; + tk->br = (unsigned int*) opj_malloc(tk->num_br * sizeof(unsigned int)); + + for (i = 0; i < tk->num_br; i++) { + tk->br[i] = cio_read(cio, 4); + } + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP2P Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the JP2X box +* +* MJP2 Prefix Box +* +*/ +void mj2_write_jp2x(mj2_tk_t * tk, opj_cio_t *cio) +{ + + int i; + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_JP2X, 4); + + for (i = 0; i < tk->num_jp2x; i++) { + cio_write(cio, tk->jp2xdata[i], 1); + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the JP2X box +* +* MJP2 Prefix Box +* +*/ +int mj2_read_jp2x(mj2_tk_t * tk, opj_cio_t *cio) +{ + unsigned int i; + + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_JP2X != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP2X Marker\n"); + return 1; + } + + + tk->num_jp2x = (box.length - 8); + tk->jp2xdata = (unsigned char*) opj_malloc(tk->num_jp2x * sizeof(unsigned char)); + + for (i = 0; i < tk->num_jp2x; i++) { + tk->jp2xdata[i] = cio_read(cio, 1); + } + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP2X Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the JSUB box +* +* MJP2 Subsampling Box +* +*/ +void mj2_write_jsub(mj2_tk_t * tk, opj_cio_t *cio) +{ + + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_JSUB, 4); + + cio_write(cio, tk->hsub, 1); + cio_write(cio, tk->vsub, 1); + cio_write(cio, tk->hoff, 1); + cio_write(cio, tk->voff, 1); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the JSUB box +* +* MJP2 Subsampling Box +* +*/ +int mj2_read_jsub(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_JSUB != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JSUB Marker\n"); + return 1; + } + + tk->hsub = cio_read(cio, 1); + tk->vsub = cio_read(cio, 1); + tk->hoff = cio_read(cio, 1);; + tk->voff = cio_read(cio, 1); + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JSUB Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the SMJ2 box +* +* Visual Sample Entry Description +* +*/ +void mj2_write_smj2(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_MJ2, 4); /* MJ2 */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + cio_write(cio, 1, 4); + + cio_write(cio, 0, 2); /* Pre-defined */ + + cio_write(cio, 0, 2); /* Reserved */ + + cio_write(cio, 0, 4); /* Pre-defined */ + cio_write(cio, 0, 4); /* Pre-defined */ + cio_write(cio, 0, 4); /* Pre-defined */ + + cio_write(cio, tk->w, 2); /* Width */ + cio_write(cio, tk->h, 2); /* Height */ + + cio_write(cio, tk->horizresolution, 4); /* Horizontal resolution */ + cio_write(cio, tk->vertresolution, 4); /* Vertical resolution */ + + cio_write(cio, 0, 4); /* Reserved */ + + cio_write(cio, 1, 2); /* Pre-defined = 1 */ + + cio_write(cio, tk->compressorname[0], 4); /* Compressor Name */ + cio_write(cio, tk->compressorname[1], 4); + cio_write(cio, tk->compressorname[2], 4); + cio_write(cio, tk->compressorname[3], 4); + cio_write(cio, tk->compressorname[4], 4); + cio_write(cio, tk->compressorname[5], 4); + cio_write(cio, tk->compressorname[6], 4); + cio_write(cio, tk->compressorname[7], 4); + + cio_write(cio, tk->depth, 2); /* Depth */ + + cio_write(cio, 0xffff, 2); /* Pre-defined = -1 */ + + jp2_write_jp2h(&tk->jp2_struct, cio); + + mj2_write_fiel(tk, cio); + + if (tk->num_br != 0) + mj2_write_jp2p(tk, cio); + if (tk->num_jp2x != 0) + mj2_write_jp2x(tk, cio); + + mj2_write_jsub(tk, cio); + mj2_write_orfo(tk, cio); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the SMJ2 box +* +* Visual Sample Entry Description +* +*/ +int mj2_read_smj2(opj_image_t * img, mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + mj2_box_t box2; + int i; + opj_jp2_color_t color; + + mj2_read_boxhdr(&box, cio); + + if (MJ2_MJ2 != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error in SMJ2 box: Expected MJ2 Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in MJP2 box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in MJP2 box. Expected flag 0\n"); + return 1; + } + + cio_skip(cio,4); + + cio_skip(cio,2); /* Pre-defined */ + + cio_skip(cio,2); /* Reserved */ + + cio_skip(cio,4); /* Pre-defined */ + cio_skip(cio,4); /* Pre-defined */ + cio_skip(cio,4); /* Pre-defined */ + + tk->w = cio_read(cio, 2); /* Width */ + tk->h = cio_read(cio, 2); /* Height */ + + tk->horizresolution = cio_read(cio, 4); /* Horizontal resolution */ + tk->vertresolution = cio_read(cio, 4); /* Vertical resolution */ + + cio_skip(cio,4); /* Reserved */ + + cio_skip(cio,2); /* Pre-defined = 1 */ + + tk->compressorname[0] = cio_read(cio, 4); /* Compressor Name */ + tk->compressorname[1] = cio_read(cio, 4); + tk->compressorname[2] = cio_read(cio, 4); + tk->compressorname[3] = cio_read(cio, 4); + tk->compressorname[4] = cio_read(cio, 4); + tk->compressorname[5] = cio_read(cio, 4); + tk->compressorname[6] = cio_read(cio, 4); + tk->compressorname[7] = cio_read(cio, 4); + + tk->depth = cio_read(cio, 2); /* Depth */ + + /* Init std value */ + tk->num_jp2x = 0; + tk->fieldcount = 1; + tk->fieldorder = 0; + tk->or_fieldcount = 1; + tk->or_fieldorder = 0; + + cio_skip(cio,2); /* Pre-defined = -1 */ + memset(&color, 0, sizeof(opj_jp2_color_t)); + + if (!jp2_read_jp2h(&tk->jp2_struct, cio, &color)) { + opj_event_msg(tk->cinfo, EVT_ERROR, "Error reading JP2H Box\n"); + return 1; + } + + tk->jp2_struct.comps = (opj_jp2_comps_t*) opj_malloc(tk->jp2_struct.numcomps * sizeof(opj_jp2_comps_t)); + tk->jp2_struct.cl = (unsigned int*) opj_malloc(sizeof(unsigned int)); + + tk->num_br = 0; + tk->num_jp2x = 0; + + for (i = 0; cio_tell(cio) - box.init_pos < box.length; i++) { + mj2_read_boxhdr(&box2, cio); + cio_seek(cio, box2.init_pos); + switch (box2.type) { + case MJ2_FIEL: + if (mj2_read_fiel(tk, cio)) + return 1; + break; + + case MJ2_JP2P: + if (mj2_read_jp2p(tk, cio)) + return 1; + break; + + case MJ2_JP2X: + if (mj2_read_jp2x(tk, cio)) + return 1; + break; + + case MJ2_JSUB: + if (mj2_read_jsub(tk, cio)) + return 1; + break; + + case MJ2_ORFO: + if (mj2_read_orfo(tk, cio)) + return 1; + break; + + default: + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MJP2 Box size\n"); + return 1; + break; + + } + } + return 0; +} + + +/* +* Write the STSD box +* +* Sample Description +* +*/ +void mj2_write_stsd(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_STSD, 4); /* STSD */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + cio_write(cio, 1, 4); /* entry_count = 1 (considering same JP2 headerboxes) */ + + if (tk->track_type == 0) { + mj2_write_smj2(tk, cio); + } else if (tk->track_type == 1) { + // Not implemented + } + if (tk->track_type == 2) { + // Not implemented + } + + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the STSD box +* +* Sample Description +* +*/ +int mj2_read_stsd(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio) +{ + int i; + int entry_count, len_2skip; + + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + + if (MJ2_STSD != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSD Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in STSD box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in STSD box. Expected flag 0\n"); + return 1; + } + + entry_count = cio_read(cio, 4); + + if (tk->track_type == 0) { + for (i = 0; i < entry_count; i++) { + if (mj2_read_smj2(img, tk, cio)) + return 1; + } + } else if (tk->track_type == 1) { + len_2skip = cio_read(cio, 4); // Not implemented -> skipping box + cio_skip(cio,len_2skip - 4); + } else if (tk->track_type == 2) { + len_2skip = cio_read(cio, 4); // Not implemented -> skipping box + cio_skip(cio,len_2skip - 4); + } + + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSD Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the STBL box +* +* Sample table box box +* +*/ +void mj2_write_stbl(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_STBL, 4); /* STBL */ + + mj2_write_stsd(tk, cio); + mj2_write_stts(tk, cio); + mj2_write_stsc(tk, cio); + mj2_write_stsz(tk, cio); + mj2_write_stco(tk, cio); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the STBL box +* +* Sample table box box +* +*/ +int mj2_read_stbl(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_STBL != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STBL Marker\n"); + return 1; + } + + if (mj2_read_stsd(tk, img, cio)) + return 1; + if (mj2_read_stts(tk, cio)) + return 1; + if (mj2_read_stsc(tk, cio)) + return 1; + if (mj2_read_stsz(tk, cio)) + return 1; + if (mj2_read_stco(tk, cio)) + return 1; + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STBL Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the URL box +* +* URL box +* +*/ +void mj2_write_url(mj2_tk_t * tk, int url_num, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_URL, 4); /* URL */ + + if (url_num == 0) + cio_write(cio, 1, 4); /* Version = 0, flags = 1 because stored in same file */ + else { + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + cio_write(cio, tk->url[url_num - 1].location[0], 4); + cio_write(cio, tk->url[url_num - 1].location[1], 4); + cio_write(cio, tk->url[url_num - 1].location[2], 4); + cio_write(cio, tk->url[url_num - 1].location[3], 4); + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the URL box +* +* URL box +* +*/ +int mj2_read_url(mj2_tk_t * tk, int urn_num, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_URL != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected URL Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in URL box\n"); + return 1; + } + + if (1 != cio_read(cio, 3)) { /* If flags = 1 --> media data in file */ + tk->url[urn_num].location[0] = cio_read(cio, 4); + tk->url[urn_num].location[1] = cio_read(cio, 4); + tk->url[urn_num].location[2] = cio_read(cio, 4); + tk->url[urn_num].location[3] = cio_read(cio, 4); + } else { + tk->num_url--; + } + + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with URL Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the URN box +* +* URN box +* +*/ +void mj2_write_urn(mj2_tk_t * tk, int urn_num, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_URN, 4); /* URN */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + cio_write(cio, tk->urn[urn_num].name[0], 4); + cio_write(cio, tk->urn[urn_num].name[1], 4); + cio_write(cio, tk->urn[urn_num].name[2], 4); + cio_write(cio, tk->urn[urn_num].name[3], 4); + cio_write(cio, tk->urn[urn_num].location[0], 4); + cio_write(cio, tk->urn[urn_num].location[1], 4); + cio_write(cio, tk->urn[urn_num].location[2], 4); + cio_write(cio, tk->urn[urn_num].location[3], 4); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the URN box +* +* URN box +* +*/ +int mj2_read_urn(mj2_tk_t * tk, int urn_num, opj_cio_t *cio) +{ + + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_URN != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected URN Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in URN box\n"); + return 1; + } + + if (1 != cio_read(cio, 3)) { /* If flags = 1 --> media data in file */ + tk->urn[urn_num].name[0] = cio_read(cio, 4); + tk->urn[urn_num].name[1] = cio_read(cio, 4); + tk->urn[urn_num].name[2] = cio_read(cio, 4); + tk->urn[urn_num].name[3] = cio_read(cio, 4); + tk->urn[urn_num].location[0] = cio_read(cio, 4); + tk->urn[urn_num].location[1] = cio_read(cio, 4); + tk->urn[urn_num].location[2] = cio_read(cio, 4); + tk->urn[urn_num].location[3] = cio_read(cio, 4); + } + + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with URN Box size\n"); + return 1; + } + return 0; +} + + +/* +* Write the DREF box +* +* Data reference box +* +*/ +void mj2_write_dref(mj2_tk_t * tk, opj_cio_t *cio) +{ + int i; + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_DREF, 4); /* DREF */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + if (tk->num_url + tk->num_urn == 0) { /* Media data in same file */ + cio_write(cio, 1, 4); /* entry_count = 1 */ + mj2_write_url(tk, 0, cio); + } else { + cio_write(cio, tk->num_url + tk->num_urn, 4); /* entry_count */ + + for (i = 0; i < tk->num_url; i++) + mj2_write_url(tk, i + 1, cio); + + for (i = 0; i < tk->num_urn; i++) + mj2_write_urn(tk, i, cio); + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the DREF box +* +* Data reference box +* +*/ +int mj2_read_dref(mj2_tk_t * tk, opj_cio_t *cio) +{ + + int i; + int entry_count, marker; + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_DREF != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected DREF Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in DREF box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in DREF box. Expected flag 0\n"); + return 1; + } + + entry_count = cio_read(cio, 4); + tk->num_url = 0; + tk->num_urn = 0; + + for (i = 0; i < entry_count; i++) { + cio_skip(cio,4); + marker = cio_read(cio, 4); + if (marker == MJ2_URL) { + cio_skip(cio,-8); + tk->num_url++; + if (mj2_read_url(tk, tk->num_url, cio)) + return 1; + } else if (marker == MJ2_URN) { + cio_skip(cio,-8); + tk->num_urn++; + if (mj2_read_urn(tk, tk->num_urn, cio)) + return 1; + } else { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with in DREF box. Expected URN or URL box\n"); + return 1; + } + + } + + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with DREF Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the DINF box +* +* Data information box +* +*/ +void mj2_write_dinf(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_DINF, 4); /* DINF */ + + mj2_write_dref(tk, cio); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the DINF box +* +* Data information box +* +*/ +int mj2_read_dinf(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_DINF != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected DINF Marker\n"); + return 1; + } + + if (mj2_read_dref(tk, cio)) + return 1; + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with DINF Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the VMHD box +* +* Video Media information box +* +*/ +void mj2_write_vmhd(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_VMHD, 4); /* VMHD */ + + cio_write(cio, 1, 4); /* Version = 0, flags = 1 */ + + cio_write(cio, tk->graphicsmode, 2); + cio_write(cio, tk->opcolor[0], 2); + cio_write(cio, tk->opcolor[1], 2); + cio_write(cio, tk->opcolor[2], 2); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the VMHD box +* +* Video Media information box +* +*/ +int mj2_read_vmhd(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_VMHD != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected VMHD Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in VMHD box\n"); + return 1; + } + + if (1 != cio_read(cio, 3)) { /* Flags = 1 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in VMHD box. Expected flag 1\n"); + return 1; + } + + tk->track_type = 0; + tk->graphicsmode = cio_read(cio, 2); + tk->opcolor[0] = cio_read(cio, 2); + tk->opcolor[1] = cio_read(cio, 2); + tk->opcolor[2] = cio_read(cio, 2); + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with VMHD Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the SMHD box +* +* Sound Media information box +* +*/ +void mj2_write_smhd(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_SMHD, 4); /* SMHD */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + cio_write(cio, tk->balance, 2); + + cio_write(cio, 0, 2); /* Reserved */ + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the SMHD box +* +* Sound Media information box +* +*/ +int mj2_read_smhd(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_SMHD != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected SMHD Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in SMHD box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in SMHD box. Expected flag 0\n"); + return 1; + } + + tk->track_type = 1; + tk->balance = cio_read(cio, 2); + + /* Init variables to zero to avoid problems when freeeing memory + The values will possibly be overidded when decoding the track structure */ + tk->num_br = 0; + tk->num_url = 0; + tk->num_urn = 0; + tk->num_chunks = 0; + tk->num_tts = 0; + tk->num_samplestochunk = 0; + tk->num_samples = 0; + + cio_skip(cio,2); /* Reserved */ + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with SMHD Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the HMHD box +* +* Hint Media information box +* +*/ +void mj2_write_hmhd(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_HMHD, 4); /* HMHD */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + cio_write(cio, tk->maxPDUsize, 2); + cio_write(cio, tk->avgPDUsize, 2); + cio_write(cio, tk->maxbitrate, 4); + cio_write(cio, tk->avgbitrate, 4); + cio_write(cio, tk->slidingavgbitrate, 4); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the HMHD box +* +* Hint Media information box +* +*/ +int mj2_read_hmhd(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_HMHD != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected HMHD Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in HMHD box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in HMHD box. Expected flag 0\n"); + return 1; + } + + tk->track_type = 2; + tk->maxPDUsize = cio_read(cio, 2); + tk->avgPDUsize = cio_read(cio, 2); + tk->maxbitrate = cio_read(cio, 4); + tk->avgbitrate = cio_read(cio, 4); + tk->slidingavgbitrate = cio_read(cio, 4); + + /* Init variables to zero to avoid problems when freeeing memory + The values will possibly be overidded when decoding the track structure */ + tk->num_br = 0; + tk->num_url = 0; + tk->num_urn = 0; + tk->num_chunks = 0; + tk->num_tts = 0; + tk->num_samplestochunk = 0; + tk->num_samples = 0; + + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with HMHD Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the MINF box +* +* Media information box +* +*/ +void mj2_write_minf(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_MINF, 4); /* MINF */ + + if (tk->track_type == 0) { + mj2_write_vmhd(tk, cio); + } else if (tk->track_type == 1) { + mj2_write_smhd(tk, cio); + } else if (tk->track_type == 2) { + mj2_write_hmhd(tk, cio); + } + + mj2_write_dinf(tk, cio); + mj2_write_stbl(tk, cio); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the MINF box +* +* Media information box +* +*/ +int mj2_read_minf(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio) +{ + + unsigned int box_type; + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_MINF != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MINF Marker\n"); + return 1; + } + + cio_skip(cio,4); + box_type = cio_read(cio, 4); + cio_skip(cio,-8); + + if (box_type == MJ2_VMHD) { + if (mj2_read_vmhd(tk, cio)) + return 1; + } else if (box_type == MJ2_SMHD) { + if (mj2_read_smhd(tk, cio)) + return 1; + } else if (box_type == MJ2_HMHD) { + if (mj2_read_hmhd(tk, cio)) + return 1; + } else { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error in MINF box expected vmhd, smhd or hmhd\n"); + return 1; + } + + if (mj2_read_dinf(tk, cio)) + return 1; + + if (mj2_read_stbl(tk, img, cio)) + return 1; + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MINF Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the HDLR box +* +* Handler reference box +* +*/ +void mj2_write_hdlr(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_HDLR, 4); /* HDLR */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + cio_write(cio, 0, 4); /* Predefine */ + + tk->name = 0; /* The track name is immediately determined by the track type */ + + if (tk->track_type == 0) { + tk->handler_type = 0x76696465; /* Handler type: vide */ + cio_write(cio, tk->handler_type, 4); + + cio_write(cio, 0, 4); + cio_write(cio, 0, 4); + cio_write(cio, 0, 4); /* Reserved */ + + cio_write(cio, 0x76696465, 4); + cio_write(cio, 0x6F206d65, 4); + cio_write(cio, 0x64696120, 4); + cio_write(cio, 0x74726163, 4); + cio_write(cio, 0x6b00, 2); /* String: video media track */ + } else if (tk->track_type == 1) { + tk->handler_type = 0x736F756E; /* Handler type: soun */ + cio_write(cio, tk->handler_type, 4); + + cio_write(cio, 0, 4); + cio_write(cio, 0, 4); + cio_write(cio, 0, 4); /* Reserved */ + + cio_write(cio, 0x536F756E, 4); + cio_write(cio, 0x6400, 2); /* String: Sound */ + } else if (tk->track_type == 2) { + tk->handler_type = 0x68696E74; /* Handler type: hint */ + cio_write(cio, tk->handler_type, 4); + + cio_write(cio, 0, 4); + cio_write(cio, 0, 4); + cio_write(cio, 0, 4); /* Reserved */ + + cio_write(cio, 0x48696E74, 4); + cio_write(cio, 0, 2); /* String: Hint */ + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the HDLR box +* +* Handler reference box +* +*/ +int mj2_read_hdlr(mj2_tk_t * tk, opj_cio_t *cio) +{ + int i; + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_HDLR != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected HDLR Marker\n"); + return 1; + } + + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in HDLR box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in HDLR box. Expected flag 0\n"); + return 1; + } + + cio_skip(cio,4); /* Reserved */ + + tk->handler_type = cio_read(cio, 4); + cio_skip(cio,12); /* Reserved */ + + tk->name_size = box.length - 32; + + tk->name = (char*) opj_malloc(tk->name_size * sizeof(char)); + for (i = 0; i < tk->name_size; i++) { + tk->name[i] = cio_read(cio, 1); /* Name */ + } + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with HDLR Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the MDHD box +* +* Media Header Box +* +*/ +void mj2_write_mdhd(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + unsigned int i; + time_t ltime; + unsigned int modification_time; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_MDHD, 4); /* MDHD */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + cio_write(cio, tk->creation_time, 4); /* Creation Time */ + + time(<ime); /* Time since 1/1/70 */ + modification_time = (unsigned int)ltime + 2082844800; /* Seoonds between 1/1/04 and 1/1/70 */ + + cio_write(cio, modification_time, 4); /* Modification Time */ + + cio_write(cio, tk->timescale, 4); /* Timescale */ + + tk->duration = 0; + + for (i = 0; i < tk->num_samples; i++) + tk->duration += tk->sample[i].sample_delta; + + cio_write(cio, tk->duration, 4); /* Duration */ + + cio_write(cio, tk->language, 2); /* Language */ + + cio_write(cio, 0, 2); /* Predefined */ + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the MDHD box +* +* Media Header Box +* +*/ +int mj2_read_mdhd(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (!(MJ2_MHDR == box.type || MJ2_MDHD == box.type)) { // Kakadu writes MHDR instead of MDHD + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MDHD Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in MDHD box\n"); + return 1; + } + + if (0 != cio_read(cio, 3)) { /* Flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in MDHD box. Expected flag 0\n"); + return 1; + } + + + tk->creation_time = cio_read(cio, 4); /* Creation Time */ + + tk->modification_time = cio_read(cio, 4); /* Modification Time */ + + tk->timescale = cio_read(cio, 4); /* Timescale */ + + tk->duration = cio_read(cio, 4); /* Duration */ + + tk->language = cio_read(cio, 2); /* Language */ + + cio_skip(cio,2); /* Predefined */ + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MDHD Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the MDIA box +* +* Media box +* +*/ +void mj2_write_mdia(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_MDIA, 4); /* MDIA */ + + mj2_write_mdhd(tk, cio); + mj2_write_hdlr(tk, cio); + mj2_write_minf(tk, cio); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the MDIA box +* +* Media box +* +*/ +int mj2_read_mdia(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_MDIA != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MDIA Marker\n"); + return 1; + } + + if (mj2_read_mdhd(tk, cio)) + return 1; + if (mj2_read_hdlr(tk, cio)) + return 1; + if (mj2_read_minf(tk, img, cio)) + return 1; + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MDIA Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the TKHD box +* +* Track Header box +* +*/ +void mj2_write_tkhd(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + unsigned int i; + time_t ltime; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + + cio_write(cio, MJ2_TKHD, 4); /* TKHD */ + + cio_write(cio, 3, 4); /* Version=0, flags=3 */ + + time(<ime); /* Time since 1/1/70 */ + tk->modification_time = (unsigned int)ltime + 2082844800; /* Seoonds between 1/1/04 and 1/1/70 */ + + cio_write(cio, tk->creation_time, 4); /* Creation Time */ + + cio_write(cio, tk->modification_time, 4); /* Modification Time */ + + cio_write(cio, tk->track_ID, 4); /* Track ID */ + + cio_write(cio, 0, 4); /* Reserved */ + + tk->duration = 0; + + for (i = 0; i < tk->num_samples; i++) + tk->duration += tk->sample[i].sample_delta; + + cio_write(cio, tk->duration, 4); /* Duration */ + + cio_write(cio, 0, 4); /* Reserved */ + cio_write(cio, 0, 4); /* Reserved */ + + cio_write(cio, tk->layer, 2); /* Layer */ + + cio_write(cio, 0, 2); /* Predefined */ + + cio_write(cio, tk->volume, 2); /* Volume */ + + cio_write(cio, 0, 2); /* Reserved */ + + cio_write(cio, tk->trans_matrix[0], 4); /* Transformation matrix for track */ + cio_write(cio, tk->trans_matrix[1], 4); + cio_write(cio, tk->trans_matrix[2], 4); + cio_write(cio, tk->trans_matrix[3], 4); + cio_write(cio, tk->trans_matrix[4], 4); + cio_write(cio, tk->trans_matrix[5], 4); + cio_write(cio, tk->trans_matrix[6], 4); + cio_write(cio, tk->trans_matrix[7], 4); + cio_write(cio, tk->trans_matrix[8], 4); + + cio_write(cio, tk->visual_w, 4); /* Video Visual Width */ + + cio_write(cio, tk->visual_h, 4); /* Video Visual Height */ + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the TKHD box +* +* Track Header box +* +*/ +int mj2_read_tkhd(mj2_tk_t * tk, opj_cio_t *cio) +{ + int flag; + + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + + if (MJ2_TKHD != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected TKHD Marker\n"); + return 1; + } + + if (0 != cio_read(cio, 1)) { /* Version = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in TKHD box\n"); + return 1; + } + + flag = cio_read(cio, 3); + + if (!(flag == 1 || flag == 2 || flag == 3 || flag == 4)) { /* Flags = 1,2,3 or 4 */ + opj_event_msg(cio->cinfo, EVT_ERROR, + "Error with flag in TKHD box: Expected flag 1,2,3 or 4\n"); + return 1; + } + + tk->creation_time = cio_read(cio, 4); /* Creation Time */ + + tk->modification_time = cio_read(cio, 4); /* Modification Time */ + + tk->track_ID = cio_read(cio, 4); /* Track ID */ + + cio_skip(cio,4); /* Reserved */ + + tk->duration = cio_read(cio, 4); /* Duration */ + + cio_skip(cio,8); /* Reserved */ + + tk->layer = cio_read(cio, 2); /* Layer */ + + cio_read(cio, 2); /* Predefined */ + + tk->volume = cio_read(cio, 2); /* Volume */ + + cio_skip(cio,2); /* Reserved */ + + tk->trans_matrix[0] = cio_read(cio, 4); /* Transformation matrix for track */ + tk->trans_matrix[1] = cio_read(cio, 4); + tk->trans_matrix[2] = cio_read(cio, 4); + tk->trans_matrix[3] = cio_read(cio, 4); + tk->trans_matrix[4] = cio_read(cio, 4); + tk->trans_matrix[5] = cio_read(cio, 4); + tk->trans_matrix[6] = cio_read(cio, 4); + tk->trans_matrix[7] = cio_read(cio, 4); + tk->trans_matrix[8] = cio_read(cio, 4); + + tk->visual_w = cio_read(cio, 4); /* Video Visual Width */ + + tk->visual_h = cio_read(cio, 4); /* Video Visual Height */ + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with TKHD Box size\n"); + return 1; + } + return 0; +} + +/* +* Write the TRAK box +* +* Track box +* +*/ +void mj2_write_trak(mj2_tk_t * tk, opj_cio_t *cio) +{ + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + + cio_write(cio, MJ2_TRAK, 4); /* TRAK */ + + mj2_write_tkhd(tk, cio); + mj2_write_mdia(tk, cio); + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the TRAK box +* +* Track box +* +*/ +int mj2_read_trak(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_TRAK != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected TRAK Marker\n"); + return 1; + } + if (mj2_read_tkhd(tk, cio)) + return 1; + if (mj2_read_mdia(tk, img, cio)) + return 1; + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with TRAK Box\n"); + return 1; + } + return 0; +} + +/* +* Write the MVHD box +* +* Movie header Box +* +*/ +void mj2_write_mvhd(opj_mj2_t * movie, opj_cio_t *cio) +{ + int i; + mj2_box_t box; + unsigned j; + time_t ltime; + int max_tk_num = 0; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_MVHD, 4); /* MVHD */ + + cio_write(cio, 0, 4); /* Version = 0, flags = 0 */ + + time(<ime); /* Time since 1/1/70 */ + movie->modification_time = (unsigned int)ltime + 2082844800; /* Seoonds between 1/1/04 and 1/1/70 */ + + cio_write(cio, movie->creation_time, 4); /* Creation Time */ + + cio_write(cio, movie->modification_time, 4); /* Modification Time */ + + cio_write(cio, movie->timescale, 4); /* Timescale */ + + movie->duration = 0; + + for (i = 0; i < (movie->num_stk + movie->num_htk + movie->num_vtk); i++) { + mj2_tk_t *tk = &movie->tk[i]; + + for (j = 0; j < tk->num_samples; j++) { + movie->duration += tk->sample[j].sample_delta; + } + } + + cio_write(cio, movie->duration, 4); + + cio_write(cio, movie->rate, 4); /* Rate to play presentation */ + + cio_write(cio, movie->volume, 2); /* Volume */ + + cio_write(cio, 0, 2); /* Reserved */ + cio_write(cio, 0, 4); /* Reserved */ + cio_write(cio, 0, 4); /* Reserved */ + + cio_write(cio, movie->trans_matrix[0], 4); /* Transformation matrix for video */ + cio_write(cio, movie->trans_matrix[1], 4); + cio_write(cio, movie->trans_matrix[2], 4); + cio_write(cio, movie->trans_matrix[3], 4); + cio_write(cio, movie->trans_matrix[4], 4); + cio_write(cio, movie->trans_matrix[5], 4); + cio_write(cio, movie->trans_matrix[6], 4); + cio_write(cio, movie->trans_matrix[7], 4); + cio_write(cio, movie->trans_matrix[8], 4); + + cio_write(cio, 0, 4); /* Pre-defined */ + cio_write(cio, 0, 4); /* Pre-defined */ + cio_write(cio, 0, 4); /* Pre-defined */ + cio_write(cio, 0, 4); /* Pre-defined */ + cio_write(cio, 0, 4); /* Pre-defined */ + cio_write(cio, 0, 4); /* Pre-defined */ + + + for (i = 0; i < movie->num_htk + movie->num_stk + movie->num_vtk; i++) { + if (max_tk_num < movie->tk[i].track_ID) + max_tk_num = movie->tk[i].track_ID; + } + + movie->next_tk_id = max_tk_num + 1; + + cio_write(cio, movie->next_tk_id, 4); /* ID of Next track to be added */ + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the MVHD box +* +* Movie header Box +* +*/ +int mj2_read_mvhd(opj_mj2_t * movie, opj_cio_t *cio) +{ + mj2_box_t box; + + mj2_read_boxhdr(&box, cio); + if (MJ2_MVHD != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MVHD Marker\n"); + return 1; + } + + + if (0 != cio_read(cio, 4)) { /* Version = 0, flags = 0 */ + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in MVHD box\n"); + } + + movie->creation_time = cio_read(cio, 4); /* Creation Time */ + + movie->modification_time = cio_read(cio, 4); /* Modification Time */ + + movie->timescale = cio_read(cio, 4); /* Timescale */ + + movie->duration = cio_read(cio, 4); /* Duration */ + + movie->rate = cio_read(cio, 4); /* Rate to play presentation */ + + movie->volume = cio_read(cio, 2); /* Volume */ + + cio_skip(cio,10); /* Reserved */ + + movie->trans_matrix[0] = cio_read(cio, 4); /* Transformation matrix for video */ + movie->trans_matrix[1] = cio_read(cio, 4); + movie->trans_matrix[2] = cio_read(cio, 4); + movie->trans_matrix[3] = cio_read(cio, 4); + movie->trans_matrix[4] = cio_read(cio, 4); + movie->trans_matrix[5] = cio_read(cio, 4); + movie->trans_matrix[6] = cio_read(cio, 4); + movie->trans_matrix[7] = cio_read(cio, 4); + movie->trans_matrix[8] = cio_read(cio, 4); + + cio_skip(cio,24); /* Pre-defined */ + + movie->next_tk_id = cio_read(cio, 4); /* ID of Next track to be added */ + + if (cio_tell(cio) - box.init_pos != box.length) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MVHD Box Size\n"); + return 1; + } + return 0; +} + + +/* +* Write the MOOV box +* +* Movie Box +* +*/ +void mj2_write_moov(opj_mj2_t * movie, opj_cio_t *cio) +{ + int i; + mj2_box_t box; + + box.init_pos = cio_tell(cio); + cio_skip(cio,4); + cio_write(cio, MJ2_MOOV, 4); /* MOOV */ + + mj2_write_mvhd(movie, cio); + + for (i = 0; i < (movie->num_stk + movie->num_htk + movie->num_vtk); i++) { + mj2_write_trak(&movie->tk[i], cio); + } + + box.length = cio_tell(cio) - box.init_pos; + cio_seek(cio, box.init_pos); + cio_write(cio, box.length, 4); /* L */ + cio_seek(cio, box.init_pos + box.length); +} + +/* +* Read the MOOV box +* +* Movie Box +* +*/ +int mj2_read_moov(opj_mj2_t * movie, opj_image_t * img, opj_cio_t *cio) +{ + unsigned int i; + mj2_box_t box; + mj2_box_t box2; + + mj2_read_boxhdr(&box, cio); + if (MJ2_MOOV != box.type) { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MOOV Marker\n"); + return 1; + } + + if (mj2_read_mvhd(movie, cio)) + return 1; + + movie->tk = (mj2_tk_t*) opj_malloc((movie->next_tk_id - 1) * sizeof(mj2_tk_t)); + + for (i = 0; cio_tell(cio) - box.init_pos < box.length; i++) { + mj2_tk_t *tk = &movie->tk[i]; + tk->cinfo = movie->cinfo; + mj2_read_boxhdr(&box2, cio); + if (box2.type == MJ2_TRAK) { + cio_seek(cio, box2.init_pos); + if (mj2_read_trak(tk, img, cio)) + return 1; + + if (tk->track_type == 0) { + movie->num_vtk++; + } else if (tk->track_type == 1) { + movie->num_stk++; + } else if (tk->track_type == 2) { + movie->num_htk++; + } + } else if (box2.type == MJ2_MVEX) { + cio_seek(cio, box2.init_pos); + cio_skip(cio,box2.length); + i--; + } else { + opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MOOV Box: Expected TRAK or MVEX box\n"); + return 1; + } + } + return 0; +} + +int mj2_read_struct(FILE *file, opj_mj2_t *movie) { + mj2_box_t box; + opj_image_t img; + unsigned char * src; + int fsresult; + int foffset; + opj_cio_t *cio; + + /* open a byte stream for reading */ + src = (unsigned char*) opj_malloc(300 * sizeof(unsigned char)); + + /* Assuming that jp and ftyp markers size do + not exceed 300 bytes */ + fread(src,300,1, file); + + cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 300); + + if (mj2_read_jp(cio)) + return 1; + if (mj2_read_ftyp(movie, cio)) + return 1; + + fsresult = fseek(file,cio_tell(cio),SEEK_SET); + if( fsresult ) { + opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read data after FTYP box\n" ); + return 1; + } + + foffset = cio_tell(cio); + + box.type = 0; + + fread(src,30,1,file); + cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 300); + mj2_read_boxhdr(&box, cio); + + while(box.type != MJ2_MOOV) { + + switch(box.type) + { + case MJ2_MDAT: + fsresult = fseek(file,foffset+box.length,SEEK_SET); + if( fsresult ) { + opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read MDAT box\n" ); + return 1; + } + foffset += box.length; + break; + + case MJ2_MOOF: + fsresult = fseek(file,foffset+box.length,SEEK_SET); + if( fsresult ) { + opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read MOOF box\n" ); + return 1; + } + foffset += box.length; + break; + case MJ2_FREE: + fsresult = fseek(file,foffset+box.length,SEEK_SET); + if( fsresult ) { + opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read FREE box\n" ); + return 1; + } + foffset += box.length; + break; + case MJ2_SKIP: + fsresult = fseek(file,foffset+box.length,SEEK_SET); + if( fsresult ) { + opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read SKIP box\n" ); + return 1; + } + foffset += box.length; + break; + default: + opj_event_msg(cio->cinfo, EVT_ERROR, "Unknown box in MJ2 stream\n"); + fsresult = fseek(file,foffset+box.length,SEEK_SET); + if( fsresult ) { + opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read end of unknown box\n"); + return 1; + } + foffset += box.length; + break; + } + fsresult = fread(src,8,1,file); + if (fsresult != 1) { + opj_event_msg(cio->cinfo, EVT_ERROR, "MOOV box not found in file\n"); + return 1; + } + cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 8); + mj2_read_boxhdr(&box, cio); + } + + fseek(file,foffset,SEEK_SET); + src = (unsigned char*)opj_realloc(src,box.length); + fsresult = fread(src,box.length,1,file); + if (fsresult != 1) { + opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read MOOV box\n"); + return 1; + } + + cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, box.length); + + if (mj2_read_moov(movie, &img, cio)) + return 1; + + opj_free(src); + return 0; +} + +/* ----------------------------------------------------------------------- */ +/* MJ2 decoder interface */ +/* ----------------------------------------------------------------------- */ + +opj_dinfo_t* mj2_create_decompress() { + opj_mj2_t* mj2; + opj_dinfo_t *dinfo = (opj_dinfo_t*) opj_calloc(1, sizeof(opj_dinfo_t)); + if(!dinfo) return NULL; + + dinfo->is_decompressor = true; + + mj2 = (opj_mj2_t*) opj_calloc(1, sizeof(opj_mj2_t)); + dinfo->mj2_handle = mj2; + if(mj2) { + mj2->cinfo = (opj_common_ptr)dinfo; + } + mj2->j2k = j2k_create_decompress((opj_common_ptr)dinfo); + dinfo->j2k_handle = mj2->j2k; + + return dinfo; +} + +void mj2_setup_decoder(opj_mj2_t *movie, mj2_dparameters_t *mj2_parameters) { + movie->num_vtk=0; + movie->num_stk=0; + movie->num_htk=0; + + /* setup the J2K decoder parameters */ + j2k_setup_decoder((opj_j2k_t*)movie->cinfo->j2k_handle, + &mj2_parameters->j2k_parameters); + +} + +void mj2_destroy_decompress(opj_mj2_t *movie) { + if(movie) { + int i; + mj2_tk_t *tk=NULL; + + if (movie->cinfo->j2k_handle) + j2k_destroy_compress(movie->j2k); + + if (movie->num_cl != 0) + opj_free(movie->cl); + + for (i = 0; i < movie->num_vtk + movie->num_stk + movie->num_htk; i++) { + tk = &movie->tk[i]; + if (tk->name_size != 0) + opj_free(tk->name); + if (tk->track_type == 0) {// Video track + if (tk->jp2_struct.comps != 0) + opj_free(tk->jp2_struct.comps); + if (tk->jp2_struct.cl != 0) + opj_free(tk->jp2_struct.cl); + if (tk->num_jp2x != 0) + opj_free(tk->jp2xdata); + + } + if (tk->num_url != 0) + opj_free(tk->url); + if (tk->num_urn != 0) + opj_free(tk->urn); + if (tk->num_br != 0) + opj_free(tk->br); + if (tk->num_tts != 0) + opj_free(tk->tts); + if (tk->num_chunks != 0) + opj_free(tk->chunk); + if (tk->num_samplestochunk != 0) + opj_free(tk->sampletochunk); + if (tk->num_samples != 0) + opj_free(tk->sample); + } + + opj_free(movie->tk); + } + opj_free(movie); +} + +/* ----------------------------------------------------------------------- */ +/* MJ2 encoder interface */ +/* ----------------------------------------------------------------------- */ + + +opj_cinfo_t* mj2_create_compress() { + opj_mj2_t* mj2; + opj_cinfo_t *cinfo = (opj_cinfo_t*) opj_calloc(1, sizeof(opj_cinfo_t)); + if(!cinfo) return NULL; + + mj2 = (opj_mj2_t*) opj_calloc(1, sizeof(opj_mj2_t)); + cinfo->mj2_handle = mj2; + if(mj2) { + mj2->cinfo = (opj_common_ptr)cinfo; + } + + mj2->j2k = j2k_create_compress(mj2->cinfo); + cinfo->j2k_handle = mj2->j2k; + + return cinfo; +} + +void mj2_setup_encoder(opj_mj2_t *movie, mj2_cparameters_t *parameters) { + if(movie && parameters) { + opj_jp2_t *jp2_struct; + + movie->num_htk = 0; // No hint tracks + movie->num_stk = 0; // No sound tracks + movie->num_vtk = 1; // One video track + + movie->brand = MJ2_MJ2; // One brand: MJ2 + movie->num_cl = 2; // Two compatible brands: MJ2 and MJ2S + movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int)); + movie->cl[0] = MJ2_MJ2; + movie->cl[1] = MJ2_MJ2S; + movie->minversion = 0; // Minimum version: 0 + + movie->tk = (mj2_tk_t*) opj_malloc(sizeof(mj2_tk_t)); //Memory allocation for the video track + movie->tk[0].track_ID = 1; // Track ID = 1 + movie->tk[0].track_type = 0; // Video track + movie->tk[0].Dim[0] = parameters->Dim[0]; + movie->tk[0].Dim[1] = parameters->Dim[1]; + movie->tk[0].w = parameters->w; + movie->tk[0].h = parameters->h; + movie->tk[0].CbCr_subsampling_dx = parameters->CbCr_subsampling_dx; + movie->tk[0].CbCr_subsampling_dy = parameters->CbCr_subsampling_dy; + movie->tk[0].sample_rate = parameters->frame_rate; + movie->tk[0].name_size = 0; + movie->tk[0].chunk = (mj2_chunk_t*) opj_malloc(sizeof(mj2_chunk_t)); + movie->tk[0].sample = (mj2_sample_t*) opj_malloc(sizeof(mj2_sample_t)); + + jp2_struct = &movie->tk[0].jp2_struct; + jp2_struct->numcomps = 3; // NC + jp2_struct->comps = (opj_jp2_comps_t*) opj_malloc(jp2_struct->numcomps * sizeof(opj_jp2_comps_t)); + jp2_struct->precedence = 0; /* PRECEDENCE*/ + jp2_struct->approx = 0; /* APPROX*/ + jp2_struct->brand = JP2_JP2; /* BR */ + jp2_struct->minversion = 0; /* MinV */ + jp2_struct->numcl = 1; + jp2_struct->cl = (unsigned int*) opj_malloc(jp2_struct->numcl * sizeof(unsigned int)); + jp2_struct->cl[0] = JP2_JP2; /* CL0 : JP2 */ + jp2_struct->C = 7; /* C : Always 7*/ + jp2_struct->UnkC = 0; /* UnkC, colorspace specified in colr box*/ + jp2_struct->IPR = 0; /* IPR, no intellectual property*/ + jp2_struct->w = parameters->w; + jp2_struct->h = parameters->h; + jp2_struct->bpc = 7; + jp2_struct->meth = 1; + jp2_struct->enumcs = 18; // YUV + } +} + +void mj2_destroy_compress(opj_mj2_t *movie) { + if(movie) { + int i; + mj2_tk_t *tk=NULL; + + if (movie->cinfo->j2k_handle) { + j2k_destroy_compress(movie->j2k); + } + + if (movie->num_cl != 0) + opj_free(movie->cl); + + for (i = 0; i < movie->num_vtk + movie->num_stk + movie->num_htk; i++) { + tk = &movie->tk[i]; + if (tk->name_size != 0) + opj_free(tk->name); + if (tk->track_type == 0) {// Video track + if (tk->jp2_struct.comps != 0) + opj_free(tk->jp2_struct.comps); + if (tk->jp2_struct.cl != 0) + opj_free(tk->jp2_struct.cl); + if (tk->num_jp2x != 0) + opj_free(tk->jp2xdata); + + } + if (tk->num_url != 0) + opj_free(tk->url); + if (tk->num_urn != 0) + opj_free(tk->urn); + if (tk->num_br != 0) + opj_free(tk->br); + if (tk->num_tts != 0) + opj_free(tk->tts); + if (tk->num_chunks != 0) + opj_free(tk->chunk); + if (tk->num_samplestochunk != 0) + opj_free(tk->sampletochunk); + if (tk->num_samples != 0) + opj_free(tk->sample); + } + + opj_free(movie->tk); + } + opj_free(movie); +} diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2.h b/contrib/menuetlibc/openjpeg/mj2/mj2.h new file mode 100644 index 0000000000..97cf8ede22 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2.h @@ -0,0 +1,391 @@ +/* +* Copyright (c) 2003-2004, François-Olivier Devaux +* Copyright (c) 2003-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium +* All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#ifndef __MJ2_H +#define __MJ2_H +/** +@file mj2.h +@brief The Motion JPEG 2000 file format Reader/Writer (MJ22) + +*/ + +/** @defgroup MJ2 MJ2 - Motion JPEG 2000 file format reader/writer */ +/*@{*/ + +#define MJ2_JP 0x6a502020 +#define MJ2_FTYP 0x66747970 +#define MJ2_MJ2 0x6d6a7032 +#define MJ2_MJ2S 0x6d6a3273 +#define MJ2_MDAT 0x6d646174 +#define MJ2_MOOV 0x6d6f6f76 +#define MJ2_MVHD 0x6d766864 +#define MJ2_TRAK 0x7472616b +#define MJ2_TKHD 0x746b6864 +#define MJ2_MDIA 0x6d646961 +#define MJ2_MDHD 0x6d646864 +#define MJ2_MHDR 0x6d686472 +#define MJ2_HDLR 0x68646C72 +#define MJ2_MINF 0x6d696e66 +#define MJ2_VMHD 0x766d6864 +#define MJ2_SMHD 0x736d6864 +#define MJ2_HMHD 0x686d6864 +#define MJ2_DINF 0x64696e66 +#define MJ2_DREF 0x64726566 +#define MJ2_URL 0x75726c20 +#define MJ2_URN 0x75726e20 +#define MJ2_STBL 0x7374626c +#define MJ2_STSD 0x73747364 +#define MJ2_STTS 0x73747473 +#define MJ2_STSC 0x73747363 +#define MJ2_STSZ 0x7374737a +#define MJ2_STCO 0x7374636f +#define MJ2_MOOF 0x6d6f6f66 +#define MJ2_FREE 0x66726565 +#define MJ2_SKIP 0x736b6970 +#define MJ2_JP2C 0x6a703263 +#define MJ2_FIEL 0x6669656c +#define MJ2_JP2P 0x6a703270 +#define MJ2_JP2X 0x6a703278 +#define MJ2_JSUB 0x6a737562 +#define MJ2_ORFO 0x6f72666f +#define MJ2_MVEX 0x6d766578 +#define MJ2_JP2 0x6a703220 +#define MJ2_J2P0 0x4a325030 + +/** +Decompressed format used in parameters +YUV = 0 +*/ +#define YUV_DFMT 1 + +/** +Compressed format used in parameters +MJ2 = 0 +*/ +#define MJ2_CFMT 2 + + +/* ----------------------------------------------------------------------- */ + +/** +Time To Sample +*/ +typedef struct mj2_tts { + int sample_count; + int sample_delta; +} mj2_tts_t; + +/** +Chunk +*/ +typedef struct mj2_chunk { + int num_samples; + int sample_descr_idx; + int offset; +} mj2_chunk_t; + +/** +Sample to chunk +*/ +typedef struct mj2_sampletochunk { + int first_chunk; + int samples_per_chunk; + int sample_descr_idx; +} mj2_sampletochunk_t; + +/** +Sample +*/ +typedef struct mj2_sample { + unsigned int sample_size; + unsigned int offset; + unsigned int sample_delta; +} mj2_sample_t; + +/** +URL +*/ +typedef struct mj2_url { + int location[4]; +} mj2_url_t; + +/** +URN +*/ +typedef struct mj2_urn { + int name[2]; + int location[4]; +} mj2_urn_t; + +/** +Video Track Parameters +*/ +typedef struct mj2_tk { + /** codec context */ + opj_common_ptr cinfo; + int track_ID; + int track_type; + unsigned int creation_time; + unsigned int modification_time; + int duration; + int timescale; + int layer; + int volume; + int language; + int balance; + int maxPDUsize; + int avgPDUsize; + int maxbitrate; + int avgbitrate; + int slidingavgbitrate; + int graphicsmode; + int opcolor[3]; + int num_url; + mj2_url_t *url; + int num_urn; + mj2_urn_t *urn; + int Dim[2]; + int w; + int h; + int visual_w; + int visual_h; + int CbCr_subsampling_dx; + int CbCr_subsampling_dy; + int sample_rate; + int sample_description; + int horizresolution; + int vertresolution; + int compressorname[8]; + int depth; + unsigned char fieldcount; + unsigned char fieldorder; + unsigned char or_fieldcount; + unsigned char or_fieldorder; + int num_br; + unsigned int *br; + unsigned char num_jp2x; + unsigned char *jp2xdata; + unsigned char hsub; + unsigned char vsub; + unsigned char hoff; + unsigned char voff; + int trans_matrix[9]; + /** Number of samples */ + unsigned int num_samples; + int transorm; + int handler_type; + int name_size; + unsigned char same_sample_size; + int num_tts; + /** Time to sample */ + mj2_tts_t *tts; + unsigned int num_chunks; + mj2_chunk_t *chunk; + int num_samplestochunk; + mj2_sampletochunk_t *sampletochunk; + char *name; + opj_jp2_t jp2_struct; + /** Sample parameters */ + mj2_sample_t *sample; +} mj2_tk_t; + +/** +MJ2 box +*/ +typedef struct mj2_box { + int length; + int type; + int init_pos; +} mj2_box_t; + +/** +MJ2 Movie +*/ +typedef struct opj_mj2 { + /** codec context */ + opj_common_ptr cinfo; + /** handle to the J2K codec */ + opj_j2k_t *j2k; + unsigned int brand; + unsigned int minversion; + int num_cl; + unsigned int *cl; + unsigned int creation_time; + unsigned int modification_time; + int timescale; + unsigned int duration; + int rate; + int num_vtk; + int num_stk; + int num_htk; + int volume; + int trans_matrix[9]; + int next_tk_id; + /** Track Parameters */ + mj2_tk_t *tk; +} opj_mj2_t; + +/** +Decompression parameters +*/ +typedef struct mj2_dparameters { + /**@name command line encoder parameters (not used inside the library) */ + /*@{*/ + /** input file name */ + char infile[OPJ_PATH_LEN]; + /** output file name */ + char outfile[OPJ_PATH_LEN]; + /** J2K decompression parameters */ + opj_dparameters_t j2k_parameters; +} mj2_dparameters_t; + +/** +Compression parameters +*/ +typedef struct mj2_cparameters { + /**@name command line encoder parameters (not used inside the library) */ + /*@{*/ + /** J2K compression parameters */ + opj_cparameters_t j2k_parameters; + /** input file name */ + char infile[OPJ_PATH_LEN]; + /** output file name */ + char outfile[OPJ_PATH_LEN]; + /** input file format 0:MJ2 */ + int decod_format; + /** output file format 0:YUV */ + int cod_format; + /** Portion of the image coded */ + int Dim[2]; + /** YUV Frame width */ + int w; + /** YUV Frame height */ + int h; + /* Sample rate of YUV 4:4:4, 4:2:2 or 4:2:0 */ + int CbCr_subsampling_dx; + /* Sample rate of YUV 4:4:4, 4:2:2 or 4:2:0 */ + int CbCr_subsampling_dy; + /* Video Frame Rate */ + int frame_rate; + /* In YUV files, numcomps always considered as 3 */ + int numcomps; + /* In YUV files, precision always considered as 8 */ + int prec; +} mj2_cparameters_t; + + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Write the JP box +*/ +void mj2_write_jp(opj_cio_t *cio); +/** +Write the FTYP box +@param movie MJ2 movie +@param cio Output buffer stream +*/ +void mj2_write_ftyp(opj_mj2_t *movie, opj_cio_t *cio); +/** +Creates an MJ2 decompression structure +@return Returns a handle to a MJ2 decompressor if successful, returns NULL otherwise +*/ +opj_dinfo_t* mj2_create_decompress(); +/** +Destroy a MJ2 decompressor handle +@param movie MJ2 decompressor handle to destroy +*/ +void mj2_destroy_decompress(opj_mj2_t *movie); +/** +Setup the decoder decoding parameters using user parameters. +Decoding parameters are returned in mj2->j2k->cp. +@param movie MJ2 decompressor handle +@param parameters decompression parameters +*/ +void mj2_setup_decoder(opj_mj2_t *movie, mj2_dparameters_t *mj2_parameters); +/** +Decode an image from a JPEG-2000 file stream +@param movie MJ2 decompressor handle +@param cio Input buffer stream +@return Returns a decoded image if successful, returns NULL otherwise +*/ +opj_image_t* mj2_decode(opj_mj2_t *movie, opj_cio_t *cio); +/** +Creates a MJ2 compression structure +@return Returns a handle to a MJ2 compressor if successful, returns NULL otherwise +*/ +opj_cinfo_t* mj2_create_compress(); +/** +Destroy a MJ2 compressor handle +@param movie MJ2 compressor handle to destroy +*/ +void mj2_destroy_compress(opj_mj2_t *movie); +/** +Setup the encoder parameters using the current image and using user parameters. +Coding parameters are returned in mj2->j2k->cp. +@param movie MJ2 compressor handle +@param parameters compression parameters +*/ +void mj2_setup_encoder(opj_mj2_t *movie, mj2_cparameters_t *parameters); +/** +Encode an image into a JPEG-2000 file stream +@param movie MJ2 compressor handle +@param cio Output buffer stream +@param image Image to encode +@param index Name of the index file if required, NULL otherwise +@return Returns true if successful, returns false otherwise +*/ +bool mj2_encode(opj_mj2_t *movie, opj_cio_t *cio, opj_image_t *image, char *index); + +/** +Init a Standard MJ2 movie +@param movie MJ2 Movie +@return Returns 0 if successful, returns 1 otherwise +*/ +int mj2_init_stdmovie(opj_mj2_t *movie); +/** +Read the structure of an MJ2 file +@param File MJ2 input File +@param movie J2 movie structure +@return Returns 0 if successful, returns 1 otherwise +*/ +int mj2_read_struct(FILE *file, opj_mj2_t *mj2); +/** +Write the the MOOV box to an output buffer stream +@param movie MJ2 movie structure +@param cio Output buffer stream +*/ +void mj2_write_moov(opj_mj2_t *movie, opj_cio_t *cio); + + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __MJ2_H */ diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_convert.c b/contrib/menuetlibc/openjpeg/mj2/mj2_convert.c new file mode 100644 index 0000000000..3f4c2e75cc --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_convert.c @@ -0,0 +1,329 @@ +/* +* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium +* Copyright (c) 2002-2007, Professor Benoit Macq +* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. 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. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. +*/ + +#include "../libopenjpeg/opj_includes.h" +#include "mj2.h" + +/* ----------------------- */ +/* */ +/* */ +/* Count the number of frames */ +/* in a YUV file */ +/* */ +/* ----------------------- */ + +int yuv_num_frames(mj2_tk_t * tk, char *infile) +{ + int numimages, frame_size; + long end_of_f; + FILE *f; + + f = fopen(infile,"rb"); + if (!f) { + fprintf(stderr, "failed to open %s for reading\n",infile); + return -1; + } + + frame_size = (int) (tk->w * tk->h * (1.0 + (double) 2 / (double) (tk->CbCr_subsampling_dx * tk->CbCr_subsampling_dy))); /* Calculate frame size */ + + fseek(f, 0, SEEK_END); + end_of_f = ftell(f); /* Calculate file size */ + + if (end_of_f < frame_size) { + fprintf(stderr, + "YUV does not contains any frame of %d x %d size\n", tk->w, + tk->h); + return -1; + } + + numimages = end_of_f / frame_size; /* Calculate number of images */ + fclose(f); + + return numimages; +} + +// ----------------------- +// +// +// YUV to IMAGE +// +// ----------------------- + +opj_image_t *mj2_image_create(mj2_tk_t * tk, opj_cparameters_t *parameters) +{ + opj_image_cmptparm_t cmptparm[3]; + opj_image_t * img; + int i; + int numcomps = 3; + int subsampling_dx = parameters->subsampling_dx; + int subsampling_dy = parameters->subsampling_dy; + + /* initialize image components */ + memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t)); + for(i = 0; i < numcomps; i++) { + cmptparm[i].prec = 8; + cmptparm[i].bpp = 8; + cmptparm[i].sgnd = 0; + cmptparm[i].dx = i ? subsampling_dx * tk->CbCr_subsampling_dx : subsampling_dx; + cmptparm[i].dy = i ? subsampling_dy * tk->CbCr_subsampling_dy : subsampling_dy; + cmptparm[i].w = tk->w; + cmptparm[i].h = tk->h; + } + /* create the image */ + img = opj_image_create(numcomps, cmptparm, CLRSPC_SRGB); + return img; +} + +char yuvtoimage(mj2_tk_t * tk, opj_image_t * img, int frame_num, opj_cparameters_t *parameters, char* infile) +{ + int i, compno; + int offset; + long end_of_f, position; + int numcomps = 3; + int subsampling_dx = parameters->subsampling_dx; + int subsampling_dy = parameters->subsampling_dy; + FILE *yuvfile; + + yuvfile = fopen(infile,"rb"); + if (!yuvfile) { + fprintf(stderr, "failed to open %s for readings\n",parameters->infile); + return 1; + } + + offset = (int) ((double) (frame_num * tk->w * tk->h) * (1.0 + + 1.0 * (double) 2 / (double) (tk->CbCr_subsampling_dx * tk->CbCr_subsampling_dy))); + fseek(yuvfile, 0, SEEK_END); + end_of_f = ftell(yuvfile); + fseek(yuvfile, sizeof(unsigned char) * offset, SEEK_SET); + position = ftell(yuvfile); + if (position >= end_of_f) { + fprintf(stderr, "Cannot reach frame number %d in yuv file !!\n", + frame_num); + fclose(yuvfile); + return 1; + } + + img->x0 = tk->Dim[0]; + img->y0 = tk->Dim[1]; + img->x1 = !tk->Dim[0] ? (tk->w - 1) * subsampling_dx + 1 : tk->Dim[0] + + (tk->w - 1) * subsampling_dx + 1; + img->y1 = !tk->Dim[1] ? (tk->h - 1) * subsampling_dy + 1 : tk->Dim[1] + + (tk->h - 1) * subsampling_dy + 1; + + for(compno = 0; compno < numcomps; compno++) { + for (i = 0; i < (tk->w * tk->h / (img->comps[compno].dx * img->comps[compno].dy)) + && !feof(yuvfile); i++) { + if (!fread(&img->comps[compno].data[i], 1, 1, yuvfile)) { + fprintf(stderr, "Error reading %s file !!\n", infile); + return 1; + } + } + } + fclose(yuvfile); + + return 0; +} + + + +// ----------------------- +// +// +// IMAGE to YUV +// +// ----------------------- + + +bool imagetoyuv(opj_image_t * img, char *outfile) +{ + FILE *f; + int i; + + if (img->numcomps == 3) { + if (img->comps[0].dx != img->comps[1].dx / 2 + || img->comps[1].dx != img->comps[2].dx) { + fprintf(stderr, + "Error with the input image components size: cannot create yuv file)\n"); + return false; + } + } else if (!(img->numcomps == 1)) { + fprintf(stderr, + "Error with the number of image components(must be one or three)\n"); + return false; + } + + f = fopen(outfile, "a+b"); + if (!f) { + fprintf(stderr, "failed to open %s for writing\n", outfile); + return false; + } + + + for (i = 0; i < (img->comps[0].w * img->comps[0].h); i++) { + unsigned char y; + y = img->comps[0].data[i]; + fwrite(&y, 1, 1, f); + } + + + if (img->numcomps == 3) { + for (i = 0; i < (img->comps[1].w * img->comps[1].h); i++) { + unsigned char cb; + cb = img->comps[1].data[i]; + fwrite(&cb, 1, 1, f); + } + + + for (i = 0; i < (img->comps[2].w * img->comps[2].h); i++) { + unsigned char cr; + cr = img->comps[2].data[i]; + fwrite(&cr, 1, 1, f); + } + } else if (img->numcomps == 1) { + for (i = 0; i < (img->comps[0].w * img->comps[0].h * 0.25); i++) { + unsigned char cb = 125; + fwrite(&cb, 1, 1, f); + } + + + for (i = 0; i < (img->comps[0].w * img->comps[0].h * 0.25); i++) { + unsigned char cr = 125; + fwrite(&cr, 1, 1, f); + } + } + fclose(f); + return true; +} + +// ----------------------- +// +// +// IMAGE to BMP +// +// ----------------------- + +int imagetobmp(opj_image_t * img, char *outfile) { + int w,wr,h,hr,i,pad; + FILE *f; + + if (img->numcomps == 3 && img->comps[0].dx == img->comps[1].dx + && img->comps[1].dx == img->comps[2].dx + && img->comps[0].dy == img->comps[1].dy + && img->comps[1].dy == img->comps[2].dy + && img->comps[0].prec == img->comps[1].prec + && img->comps[1].prec == img->comps[2].prec) { + /* -->> -->> -->> -->> + + 24 bits color + + <<-- <<-- <<-- <<-- */ + + f = fopen(outfile, "wb"); + if (!f) { + fprintf(stderr, "failed to open %s for writing\n", outfile); + return 1; + } + + w = img->comps[0].w; + wr = int_ceildivpow2(img->comps[0].w, img->comps[0].factor); + + h = img->comps[0].h; + hr = int_ceildivpow2(img->comps[0].h, img->comps[0].factor); + + fprintf(f, "BM"); + + /* FILE HEADER */ + /* ------------- */ + fprintf(f, "%c%c%c%c", + (unsigned char) (hr * wr * 3 + 3 * hr * (wr % 2) + + 54) & 0xff, + (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2) + 54) + >> 8) & 0xff, + (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2) + 54) + >> 16) & 0xff, + (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2) + 54) + >> 24) & 0xff); + fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, + ((0) >> 16) & 0xff, ((0) >> 24) & 0xff); + fprintf(f, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff, + ((54) >> 16) & 0xff, ((54) >> 24) & 0xff); + + /* INFO HEADER */ + /* ------------- */ + fprintf(f, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, + ((40) >> 16) & 0xff, ((40) >> 24) & 0xff); + fprintf(f, "%c%c%c%c", (unsigned char) ((wr) & 0xff), + (unsigned char) ((wr) >> 8) & 0xff, + (unsigned char) ((wr) >> 16) & 0xff, + (unsigned char) ((wr) >> 24) & 0xff); + fprintf(f, "%c%c%c%c", (unsigned char) ((hr) & 0xff), + (unsigned char) ((hr) >> 8) & 0xff, + (unsigned char) ((hr) >> 16) & 0xff, + (unsigned char) ((hr) >> 24) & 0xff); + fprintf(f, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff); + fprintf(f, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff); + fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, + ((0) >> 16) & 0xff, ((0) >> 24) & 0xff); + fprintf(f, "%c%c%c%c", + (unsigned char) (3 * hr * wr + + 3 * hr * (wr % 2)) & 0xff, + (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2)) >> + 8) & 0xff, + (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2)) >> + 16) & 0xff, + (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2)) >> + 24) & 0xff); + fprintf(f, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, + ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff); + fprintf(f, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, + ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff); + fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, + ((0) >> 16) & 0xff, ((0) >> 24) & 0xff); + fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, + ((0) >> 16) & 0xff, ((0) >> 24) & 0xff); + + for (i = 0; i < wr * hr; i++) { + unsigned char R, G, B; + /* a modifier */ + // R = img->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)]; + R = img->comps[0].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)]; + // G = img->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)]; + G = img->comps[1].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)]; + // B = img->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)]; + B = img->comps[2].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)]; + fprintf(f, "%c%c%c", B, G, R); + + if ((i + 1) % wr == 0) { + for (pad = (3 * wr) % 4 ? 4 - (3 * wr) % 4 : 0; pad > 0; pad--) /* ADD */ + fprintf(f, "%c", 0); + } + } + fclose(f); + } + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_convert.h b/contrib/menuetlibc/openjpeg/mj2/mj2_convert.h new file mode 100644 index 0000000000..78e6c470a0 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_convert.h @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2003-2004, François-Olivier Devaux +* Copyright (c) 2002-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. 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. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. +*/ + + +#include "mj2.h" + +#ifndef __MJ2_CONVERT_H +#define __MJ2_CONVERT_H + +int imagetoyuv(opj_image_t * img, char *outfile); + +int imagetobmp(opj_image_t * img, char *outfile); + +opj_image_t *mj2_image_create(mj2_tk_t * tk, opj_cparameters_t *parameters); + +char yuvtoimage(mj2_tk_t * tk, opj_image_t * img, int frame_num, opj_cparameters_t *parameters, char* infile); + +int yuv_num_frames(mj2_tk_t * tk, char *infile); + + +#endif diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.c b/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.c new file mode 100644 index 0000000000..63869ea97e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.c @@ -0,0 +1,250 @@ +/* +* Copyright (c) 2003-2004, François-Olivier Devaux +* Copyright (c) 2002-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. 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. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. +*/ + +#include +#include +#include + +#include "opj_config.h" +#include "openjpeg.h" +#include "../libopenjpeg/j2k_lib.h" +#include "../libopenjpeg/j2k.h" +#include "../libopenjpeg/jp2.h" +#include "mj2.h" +#include "mj2_convert.h" + +#ifdef HAVE_LIBLCMS2 +#include +#endif +#ifdef HAVE_LIBLCMS1 +#include +#endif +#include "color.h" +/* -------------------------------------------------------------------------- */ + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting a FILE* client object +*/ +void info_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[INFO] %s", msg); +} + +/* -------------------------------------------------------------------------- */ + + +int main(int argc, char *argv[]) { + mj2_dparameters_t mj2_parameters; /* decompression parameters */ + opj_dinfo_t* dinfo; + opj_event_mgr_t event_mgr; /* event manager */ + opj_cio_t *cio = NULL; + unsigned int tnum, snum; + opj_mj2_t *movie; + mj2_tk_t *track; + mj2_sample_t *sample; + unsigned char* frame_codestream; + FILE *file, *outfile; + char outfilename[50]; + opj_image_t *img = NULL; + unsigned int max_codstrm_size = 0; + double total_time = 0; + unsigned int numframes = 0; + + if (argc != 3) { + printf("Usage: %s inputfile.mj2 outputfile.yuv\n",argv[0]); + return 1; + } + + file = fopen(argv[1], "rb"); + + if (!file) { + fprintf(stderr, "failed to open %s for reading\n", argv[1]); + return 1; + } + + // Checking output file + outfile = fopen(argv[2], "w"); + if (!file) { + fprintf(stderr, "failed to open %s for writing\n", argv[2]); + return 1; + } + fclose(outfile); + + /* + configure the event callbacks (not required) + setting of each callback is optionnal + */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = NULL; + + /* get a MJ2 decompressor handle */ + dinfo = mj2_create_decompress(); + movie = (opj_mj2_t*)dinfo->mj2_handle; + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* set J2K decoding parameters to default values */ + opj_set_default_decoder_parameters(&mj2_parameters.j2k_parameters); + + /* setup the decoder decoding parameters using user parameters */ + mj2_setup_decoder((opj_mj2_t*)dinfo->mj2_handle, &mj2_parameters); + + if (mj2_read_struct(file, movie)) // Creating the movie structure + return 1; + + // Decode first video track + for (tnum=0; tnum < (unsigned int)(movie->num_htk + movie->num_stk + movie->num_vtk); tnum++) { + if (movie->tk[tnum].track_type == 0) + break; + } + + if (movie->tk[tnum].track_type != 0) { + printf("Error. Movie does not contain any video track\n"); + return 1; + } + + track = &movie->tk[tnum]; + + // Output info on first video tracl + fprintf(stdout,"The first video track contains %d frames.\nWidth: %d, Height: %d \n\n", + track->num_samples, track->w, track->h); + + max_codstrm_size = track->sample[0].sample_size-8; + frame_codestream = (unsigned char*) malloc(max_codstrm_size * sizeof(unsigned char)); + + numframes = track->num_samples; + + for (snum=0; snum < numframes; snum++) + { + double init_time = opj_clock(); + double elapsed_time; + + sample = &track->sample[snum]; + if (sample->sample_size-8 > max_codstrm_size) { + max_codstrm_size = sample->sample_size-8; + if ((frame_codestream = (unsigned char*) + realloc(frame_codestream, max_codstrm_size)) == NULL) { + printf("Error reallocation memory\n"); + return 1; + }; + } + fseek(file,sample->offset+8,SEEK_SET); + fread(frame_codestream, sample->sample_size-8, 1, file); // Assuming that jp and ftyp markers size do + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream, sample->sample_size-8); + + img = opj_decode(dinfo, cio); // Decode J2K to image + +#ifdef WANT_SYCC_TO_RGB + if(img->color_space == CLRSPC_SYCC) + { + color_sycc_to_rgb(img); + } +#endif + + if(img->icc_profile_buf) + { +#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) + color_apply_icc_profile(img); +#endif + + free(img->icc_profile_buf); + img->icc_profile_buf = NULL; img->icc_profile_len = 0; + } + + if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2) + && (img->comps[0].dx == img->comps[2].dx / 2 ) && (img->comps[0].dx == 1)) + || (img->numcomps == 1)) { + + if (!imagetoyuv(img, argv[2])) // Convert image to YUV + return 1; + } + else if ((img->numcomps == 3) && + (img->comps[0].dx == 1) && (img->comps[1].dx == 1)&& + (img->comps[2].dx == 1))// If YUV 4:4:4 input --> to bmp + { + fprintf(stdout,"The frames will be output in a bmp format (output_1.bmp, ...)\n"); + sprintf(outfilename,"output_%d.bmp",snum); + if (imagetobmp(img, outfilename)) // Convert image to BMP + return 1; + + } + else { + fprintf(stdout,"Image component dimensions are unknown. Unable to output image\n"); + fprintf(stdout,"The frames will be output in a j2k file (output_1.j2k, ...)\n"); + + sprintf(outfilename,"output_%d.j2k",snum); + outfile = fopen(outfilename, "wb"); + if (!outfile) { + fprintf(stderr, "failed to open %s for writing\n",outfilename); + return 1; + } + fwrite(frame_codestream,sample->sample_size-8,1,outfile); + fclose(outfile); + } + /* close the byte stream */ + opj_cio_close(cio); + /* free image data structure */ + opj_image_destroy(img); + elapsed_time = opj_clock()-init_time; + fprintf(stderr, "Frame number %d/%d decoded in %.2f mseconds\n", snum + 1, numframes, elapsed_time*1000); + total_time += elapsed_time; + + } + + free(frame_codestream); + fclose(file); + + /* free remaining structures */ + if(dinfo) { + mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle); + } + free(dinfo); + + fprintf(stdout, "%d frame(s) correctly decompressed\n", snum); + fprintf(stdout,"Total decoding time: %.2f seconds (%.1f fps)\n", total_time, (float)numframes/total_time); + + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.dsp b/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.dsp new file mode 100644 index 0000000000..5b5bad617c --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.dsp @@ -0,0 +1,159 @@ +# Microsoft Developer Studio Project File - Name="mj2_to_frames" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=mj2_to_frames - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mj2_to_frames.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mj2_to_frames.mak" CFG="mj2_to_frames - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mj2_to_frames - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "mj2_to_frames - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mj2_to_frames - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FR /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "mj2_to_frames - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "mj2_to_frames___Win32_Debug0" +# PROP BASE Intermediate_Dir "mj2_to_frames___Win32_Debug0" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "mj2_to_frames___Win32_Debug0" +# PROP Intermediate_Dir "mj2_to_frames___Win32_Debug0" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MT /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FR /YX /FD /GZ /c +# SUBTRACT CPP /X +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcmtd" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "mj2_to_frames - Win32 Release" +# Name "mj2_to_frames - Win32 Debug" +# Begin Group "MJ2" + +# PROP Default_Filter "" +# Begin Group "MJ2 Header Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\compat\getopt.h +# End Source File +# Begin Source File + +SOURCE=.\mj2.h +# End Source File +# Begin Source File + +SOURCE=.\mj2_convert.h +# End Source File +# End Group +# Begin Group "MJ2 Source Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\compat\getopt.c + +!IF "$(CFG)" == "mj2_to_frames - Win32 Release" + +!ELSEIF "$(CFG)" == "mj2_to_frames - Win32 Debug" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\mj2.c + +!IF "$(CFG)" == "mj2_to_frames - Win32 Release" + +!ELSEIF "$(CFG)" == "mj2_to_frames - Win32 Debug" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\mj2_convert.c + +!IF "$(CFG)" == "mj2_to_frames - Win32 Release" + +!ELSEIF "$(CFG)" == "mj2_to_frames - Win32 Debug" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\mj2_to_frames.c + +!IF "$(CFG)" == "mj2_to_frames - Win32 Release" + +!ELSEIF "$(CFG)" == "mj2_to_frames - Win32 Debug" + +!ENDIF + +# End Source File +# End Group +# End Group +# Begin Group "OpenJPEG Headers" + +# PROP Default_Filter "" +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.dsw b/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.dsw new file mode 100644 index 0000000000..897121cfb6 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "LibOpenJPEG"="..\LibOpenJPEG.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "mj2_to_frames"=".\mj2_to_frames.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.sln b/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.sln new file mode 100644 index 0000000000..e54e17ad0a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.sln @@ -0,0 +1,29 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mj2_to_frames", "mj2_to_frames.vcproj", "{64325EAD-A083-4C8E-B852-71006428881D}" + ProjectSection(ProjectDependencies) = postProject + {4F27AA53-4181-4A1A-8238-3931B0A41048} = {4F27AA53-4181-4A1A-8238-3931B0A41048} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibOpenJPEG", "..\LibOpenJPEG.vcproj", "{4F27AA53-4181-4A1A-8238-3931B0A41048}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {64325EAD-A083-4C8E-B852-71006428881D}.Debug|Win32.ActiveCfg = Debug|Win32 + {64325EAD-A083-4C8E-B852-71006428881D}.Debug|Win32.Build.0 = Debug|Win32 + {64325EAD-A083-4C8E-B852-71006428881D}.Release|Win32.ActiveCfg = Release|Win32 + {64325EAD-A083-4C8E-B852-71006428881D}.Release|Win32.Build.0 = Release|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Debug|Win32.ActiveCfg = Debug|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Debug|Win32.Build.0 = Debug|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Release|Win32.ActiveCfg = Release|Win32 + {4F27AA53-4181-4A1A-8238-3931B0A41048}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.vcproj b/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.vcproj new file mode 100644 index 0000000000..5ac797adcd --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_frames.vcproj @@ -0,0 +1,324 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.c b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.c new file mode 100644 index 0000000000..90be6202f8 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.c @@ -0,0 +1,312 @@ +/* mj2_to_metadata.c */ +/* Dump MJ2, JP2 metadata (partial so far) to xml file */ +/* Contributed to Open JPEG by Glenn Pearson, contract software developer, U.S. National Library of Medicine. + +The base code in this file was developed by the author as part of a video archiving +project for the U.S. National Library of Medicine, Bethesda, MD. +It is the policy of NLM (and U.S. government) to not assert copyright. + +A non-exclusive copy of this code has been contributed to the Open JPEG project. +Except for copyright, inclusion of the code within Open JPEG for distribution and use +can be bound by the Open JPEG open-source license and disclaimer, expressed elsewhere. +*/ + +#include "../libopenjpeg/opj_includes.h" +#include "mj2.h" + +#include "mj2_to_metadata.h" +#include +#include "getopt.h" + +/* -------------------------------------------------------------------------- */ + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting a FILE* client object +*/ +void info_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[INFO] %s", msg); +} + +/* -------------------------------------------------------------------------- */ + + + +/* ------------- */ + +void help_display() +{ + /* "1234567890123456789012345678901234567890123456789012345678901234567890123456789" */ + fprintf(stdout," Help for the 'mj2_to_metadata' Program\n"); + fprintf(stdout," ======================================\n"); + fprintf(stdout,"The -h option displays this information on screen.\n\n"); + + fprintf(stdout,"mj2_to_metadata generates an XML file from a Motion JPEG 2000 file.\n"); + fprintf(stdout,"The generated XML shows the structural, but not (yet) curatorial,\n"); + fprintf(stdout,"metadata from the movie header and from the JPEG 2000 image and tile\n"); + fprintf(stdout,"headers of a sample frame. Excluded: low-level packed-bits image data.\n\n"); + + fprintf(stdout,"By Default\n"); + fprintf(stdout,"----------\n"); + fprintf(stdout,"The metadata includes the jp2 image and tile headers of the first frame.\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"Metadata values are shown in 'raw' form (e.g., hexidecimal) as stored in the\n"); + fprintf(stdout,"file, and, if apt, in a 'derived' form that is more quickly grasped.\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"Notes explaining the XML are embedded as terse comments. These include\n"); + fprintf(stdout," meaning of non-obvious tag abbreviations;\n"); + fprintf(stdout," range and precision of valid values;\n"); + fprintf(stdout," interpretations of values, such as enumerations; and\n"); + fprintf(stdout," current implementation limitations.\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"The sample-size and chunk-offset tables, each with 1 row per frame, are not reported.\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"The file is self-contained and no verification (e.g., against a DTD) is requested.\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"Required Parameters (except with -h)\n"); + fprintf(stdout,"------------------------------------\n"); + fprintf(stdout,"[Caution: file strings that contain spaces should be wrapped with quotes.]\n"); + fprintf(stdout,"-i input.mj2 : where 'input' is any source file name or path.\n"); + fprintf(stdout," MJ2 files created with 'frames_to_mj2' are supported so far.\n"); + fprintf(stdout," These are silent, single-track, 'MJ2 Simple Profile' videos.\n"); + fprintf(stdout,"-o output.xml : where 'output' is any destination file name or path.\n"); + fprintf(stdout,"\n"); + fprintf(stdout,"Optional Parameters\n"); + fprintf(stdout,"-------------------\n"); + fprintf(stdout,"-h : Display this help information.\n"); + fprintf(stdout,"-n : Suppress all mj2_to_metadata notes.\n"); + fprintf(stdout,"-t : Include sample-size and chunk-offset tables.\n"); + fprintf(stdout,"-f n : where n > 0. Include jp2 header info for frame n [default=1].\n"); + fprintf(stdout,"-f 0 : No jp2 header info.\n"); + fprintf(stdout,"-r : Suppress all 'raw' data for which a 'derived' form exists.\n"); + fprintf(stdout,"-d : Suppress all 'derived' data.\n"); + fprintf(stdout," (If both -r and -d given, -r will be ignored.)\n"); + fprintf(stdout,"-v string : Verify against the DTD file located by the string.\n"); + fprintf(stdout," Prepend quoted 'string' with either SYSTEM or PUBLIC keyword.\n"); + fprintf(stdout," Thus, for the distributed DTD placed in the same directory as\n"); + fprintf(stdout," the output file: -v \"SYSTEM mj2_to_metadata.dtd\"\n"); + fprintf(stdout," \"PUBLIC\" is used with an access protocol (e.g., http:) + URL.\n"); + /* More to come */ + fprintf(stdout,"\n"); + /* "1234567890123456789012345678901234567890123456789012345678901234567890123456789" */ +} + +/* ------------- */ + +int main(int argc, char *argv[]) { + + opj_dinfo_t* dinfo; + opj_event_mgr_t event_mgr; /* event manager */ + + FILE *file, *xmlout; +/* char xmloutname[50]; */ + opj_mj2_t *movie; + + char* infile = 0; + char* outfile = 0; + char* s, S1, S2, S3; + int len; + unsigned int sampleframe = 1; /* First frame */ + char* stringDTD = NULL; + BOOL notes = TRUE; + BOOL sampletables = FALSE; + BOOL raw = TRUE; + BOOL derived = TRUE; + mj2_dparameters_t parameters; + + while (TRUE) { + /* ':' after letter means it takes an argument */ + int c = getopt(argc, argv, "i:o:f:v:hntrd"); + /* FUTURE: Reserve 'p' for pruning file (which will probably make -t redundant) */ + if (c == -1) + break; + switch (c) { + case 'i': /* IN file */ + infile = optarg; + s = optarg; + while (*s) { s++; } /* Run to filename end */ + s--; + S3 = *s; + s--; + S2 = *s; + s--; + S1 = *s; + + if ((S1 == 'm' && S2 == 'j' && S3 == '2') + || (S1 == 'M' && S2 == 'J' && S3 == '2')) { + break; + } + fprintf(stderr, "Input file name must have .mj2 extension, not .%c%c%c.\n", S1, S2, S3); + return 1; + + /* ----------------------------------------------------- */ + case 'o': /* OUT file */ + outfile = optarg; + while (*outfile) { outfile++; } /* Run to filename end */ + outfile--; + S3 = *outfile; + outfile--; + S2 = *outfile; + outfile--; + S1 = *outfile; + + outfile = optarg; + + if ((S1 == 'x' && S2 == 'm' && S3 == 'l') + || (S1 == 'X' && S2 == 'M' && S3 == 'L')) + break; + + fprintf(stderr, + "Output file name must have .xml extension, not .%c%c%c\n", S1, S2, S3); + return 1; + + /* ----------------------------------------------------- */ + case 'f': /* Choose sample frame. 0 = none */ + sscanf(optarg, "%u", &sampleframe); + break; + + /* ----------------------------------------------------- */ + case 'v': /* Verification by DTD. */ + stringDTD = optarg; + /* We will not insist upon last 3 chars being "dtd", since non-file + access protocol may be used. */ + if(strchr(stringDTD,'"') != NULL) { + fprintf(stderr, "-D's string must not contain any embedded double-quote characters.\n"); + return 1; + } + + if (strncmp(stringDTD,"PUBLIC ",7) == 0 || strncmp(stringDTD,"SYSTEM ",7) == 0) + break; + + fprintf(stderr, "-D's string must start with \"PUBLIC \" or \"SYSTEM \"\n"); + return 1; + + /* ----------------------------------------------------- */ + case 'n': /* Suppress comments */ + notes = FALSE; + break; + + /* ----------------------------------------------------- */ + case 't': /* Show sample size and chunk offset tables */ + sampletables = TRUE; + break; + + /* ----------------------------------------------------- */ + case 'h': /* Display an help description */ + help_display(); + return 0; + + /* ----------------------------------------------------- */ + case 'r': /* Suppress raw data */ + raw = FALSE; + break; + + /* ----------------------------------------------------- */ + case 'd': /* Suppress derived data */ + derived = FALSE; + break; + + /* ----------------------------------------------------- */ + default: + return 1; + } /* switch */ + } /* while */ + + if(!raw && !derived) + raw = TRUE; /* At least one of 'raw' and 'derived' must be true */ + + /* Error messages */ + /* -------------- */ + if (!infile || !outfile) { + fprintf(stderr,"Correct usage: mj2_to_metadata -i mj2-file -o xml-file (plus options)\n"); + return 1; + } + +/* was: + if (argc != 3) { + printf("Bad syntax: Usage: MJ2_to_metadata inputfile.mj2 outputfile.xml\n"); + printf("Example: MJ2_to_metadata foreman.mj2 foreman.xml\n"); + return 1; + } +*/ + len = strlen(infile); + if(infile[0] == ' ') + { + infile++; /* There may be a leading blank if user put space after -i */ + } + + file = fopen(infile, "rb"); /* was: argv[1] */ + + if (!file) { + fprintf(stderr, "Failed to open %s for reading.\n", infile); /* was: argv[1] */ + return 1; + } + + len = strlen(outfile); + if(outfile[0] == ' ') + { + outfile++; /* There may be a leading blank if user put space after -o */ + } + + // Checking output file + xmlout = fopen(outfile, "w"); /* was: argv[2] */ + if (!xmlout) { + fprintf(stderr, "Failed to open %s for writing.\n", outfile); /* was: argv[2] */ + return 1; + } + // Leave it open + + /* + configure the event callbacks (not required) + setting of each callback is optionnal + */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = info_callback; + + /* get a MJ2 decompressor handle */ + dinfo = mj2_create_decompress(); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr); + + /* setup the decoder decoding parameters using user parameters */ + movie = (opj_mj2_t*) dinfo->mj2_handle; + mj2_setup_decoder(dinfo->mj2_handle, ¶meters); + + if (mj2_read_struct(file, movie)) // Creating the movie structure + { + fclose(xmlout); + return 1; + } + + xml_write_init(notes, sampletables, raw, derived); + xml_write_struct(file, xmlout, movie, sampleframe, stringDTD, &event_mgr); + fclose(xmlout); + + fprintf(stderr,"Metadata correctly extracted to XML file \n");; + + /* free remaining structures */ + if(dinfo) { + mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle); + } + + return 0; +} + + diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dsp b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dsp new file mode 100644 index 0000000000..7b4e20fd69 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dsp @@ -0,0 +1,140 @@ +# Microsoft Developer Studio Project File - Name="mj2_to_metadata" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=mj2_to_metadata - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mj2_to_metadata.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mj2_to_metadata.mak" CFG="mj2_to_metadata - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mj2_to_metadata - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "mj2_to_metadata - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mj2_to_metadata - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmtd" +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "mj2_to_metadata - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "mj2_to_metadata___Win32_Debug0" +# PROP BASE Intermediate_Dir "mj2_to_metadata___Win32_Debug0" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "mj2_to_metadata___Win32_Debug0" +# PROP Intermediate_Dir "mj2_to_metadata___Win32_Debug0" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcmtd" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "mj2_to_metadata - Win32 Release" +# Name "mj2_to_metadata - Win32 Debug" +# Begin Group "MJ2" + +# PROP Default_Filter "" +# Begin Group "MJ2 Header Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\compat\getopt.h +# End Source File +# Begin Source File + +SOURCE=.\meta_out.h +# End Source File +# Begin Source File + +SOURCE=.\mj2.h +# End Source File +# Begin Source File + +SOURCE=.\mj2_convert.h +# End Source File +# Begin Source File + +SOURCE=.\mj2_to_metadata.h +# End Source File +# End Group +# Begin Group "MJ2 Source Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\compat\getopt.c +# End Source File +# Begin Source File + +SOURCE=.\meta_out.c +# End Source File +# Begin Source File + +SOURCE=.\mj2.c +# End Source File +# Begin Source File + +SOURCE=.\mj2_convert.c +# End Source File +# Begin Source File + +SOURCE=.\mj2_to_metadata.c +# End Source File +# End Group +# End Group +# End Target +# End Project diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dsw b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dsw new file mode 100644 index 0000000000..f28254b49b --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "LibOpenJPEG"="..\LibOpenJPEG.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "mj2_to_metadata"=".\mj2_to_metadata.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name LibOpenJPEG + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dtd b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dtd new file mode 100644 index 0000000000..249de1a071 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.dtd @@ -0,0 +1,425 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.h b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.h new file mode 100644 index 0000000000..f4c3491911 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.h @@ -0,0 +1,9 @@ +/* mj2_to_metadata.h */ +/* Dump MJ2, JP2 metadata (partial so far) to xml file */ +/* Contributed to Open JPEG by Glenn Pearson, U.S. National Library of Medicine */ + +#define BOOL int +#define FALSE 0 +#define TRUE 1 + +#include "meta_out.h" diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.sln b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.sln new file mode 100644 index 0000000000..32b926d45a --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.sln @@ -0,0 +1,29 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mj2_to_metadata", "mj2_to_metadata.vcproj", "{69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}" + ProjectSection(ProjectDependencies) = postProject + {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD} = {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibOpenJPEG", "..\LibOpenJPEG.vcproj", "{0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Debug|Win32.ActiveCfg = Debug|Win32 + {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Debug|Win32.Build.0 = Debug|Win32 + {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Release|Win32.ActiveCfg = Release|Win32 + {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Release|Win32.Build.0 = Release|Win32 + {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Debug|Win32.ActiveCfg = Debug|Win32 + {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Debug|Win32.Build.0 = Debug|Win32 + {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Release|Win32.ActiveCfg = Release|Win32 + {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.vcproj b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.vcproj new file mode 100644 index 0000000000..4207365cfd --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata.vcproj @@ -0,0 +1,349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata_Notes.doc b/contrib/menuetlibc/openjpeg/mj2/mj2_to_metadata_Notes.doc new file mode 100644 index 0000000000000000000000000000000000000000..05ccec2068dd5bff73cf83aab716406f6c1db099 GIT binary patch literal 35328 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 literal 0 HcmV?d00001 diff --git a/contrib/menuetlibc/openjpeg/mj2/readme.txt b/contrib/menuetlibc/openjpeg/mj2/readme.txt new file mode 100644 index 0000000000..9419d2a2d0 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/readme.txt @@ -0,0 +1,3 @@ +Attention : the motion jpeg 2000 files currently only work with OpenJPEG v0.97 that you can find here : + +http://www.openjpeg.org/openjpeg_v097.tar.gz \ No newline at end of file diff --git a/contrib/menuetlibc/openjpeg/mj2/wrap_j2k_in_mj2.c b/contrib/menuetlibc/openjpeg/mj2/wrap_j2k_in_mj2.c new file mode 100644 index 0000000000..77b495981d --- /dev/null +++ b/contrib/menuetlibc/openjpeg/mj2/wrap_j2k_in_mj2.c @@ -0,0 +1,371 @@ +/* + * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2007, Professor Benoit Macq + * Copyright (c) 2003-2007, Francois-Olivier Devaux + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + */ + +#include +#include +#include + +#include "openjpeg.h" +#include "../libopenjpeg/j2k.h" +#include "../libopenjpeg/jp2.h" +#include "../libopenjpeg/cio.h" +#include "mj2.h" + +static int int_ceildiv(int a, int b) { + return (a + b - 1) / b; +} + +/** +Size of memory first allocated for MOOV box +*/ +#define TEMP_BUF 10000 + + +/* -------------------------------------------------------------------------- */ + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting a FILE* client object +*/ +void info_callback(const char *msg, void *client_data) { + FILE *stream = (FILE*)client_data; + fprintf(stream, "[INFO] %s", msg); +} + +/* -------------------------------------------------------------------------- */ + + + +static void read_siz_marker(FILE *file, opj_image_t *image) +{ + int len,i; + char buf, buf2[2]; + unsigned char *siz_buffer; + opj_cio_t *cio; + + fseek(file, 0, SEEK_SET); + do { + fread(&buf,1,1, file); + if (buf==(char)0xff) + fread(&buf,1,1, file); + } + while (!(buf==(char)0x51)); + + fread(buf2,2,1,file); /* Lsiz */ + len = ((buf2[0])<<8) + buf2[1]; + + siz_buffer = (unsigned char*) malloc(len * sizeof(unsigned char)); + fread(siz_buffer,len, 1, file); + cio = opj_cio_open(NULL, siz_buffer, len); + + cio_read(cio, 2); /* Rsiz (capabilities) */ + image->x1 = cio_read(cio, 4); /* Xsiz */ + image->y1 = cio_read(cio, 4); /* Ysiz */ + image->x0 = cio_read(cio, 4); /* X0siz */ + image->y0 = cio_read(cio, 4); /* Y0siz */ + cio_skip(cio, 16); /* XTsiz, YTsiz, XT0siz, YT0siz */ + + image->numcomps = cio_read(cio,2); /* Csiz */ + image->comps = + (opj_image_comp_t *) malloc(image->numcomps * sizeof(opj_image_comp_t)); + + for (i = 0; i < image->numcomps; i++) { + int tmp; + tmp = cio_read(cio,1); /* Ssiz_i */ + image->comps[i].prec = (tmp & 0x7f) + 1; + image->comps[i].sgnd = tmp >> 7; + image->comps[i].dx = cio_read(cio,1); /* XRsiz_i */ + image->comps[i].dy = cio_read(cio,1); /* YRsiz_i */ + image->comps[i].resno_decoded = 0; /* number of resolution decoded */ + image->comps[i].factor = 0; /* reducing factor by component */ + } + fseek(file, 0, SEEK_SET); + opj_cio_close(cio); + free(siz_buffer); +} + +static void setparams(opj_mj2_t *movie, opj_image_t *image) { + int i, depth_0, depth, sign; + + movie->tk[0].sample_rate = 25; + movie->tk[0].w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx); + movie->tk[0].h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy); + mj2_init_stdmovie(movie); + + movie->tk[0].depth = image->comps[0].prec; + + if (image->numcomps==3) { + if ((image->comps[0].dx == 1) + && (image->comps[1].dx == 1) + && (image->comps[2].dx == 1)) + movie->tk[0].CbCr_subsampling_dx = 1; + else + if ((image->comps[0].dx == 1) + && (image->comps[1].dx == 2) + && (image->comps[2].dx == 2)) + movie->tk[0].CbCr_subsampling_dx = 2; + else + fprintf(stderr,"Image component sizes are incoherent\n"); + + if ((image->comps[0].dy == 1) + && (image->comps[1].dy == 1) + && (image->comps[2].dy == 1)) + movie->tk[0].CbCr_subsampling_dy = 1; + else + if ((image->comps[0].dy == 1) + && (image->comps[1].dy == 2) + && (image->comps[2].dy == 2)) + movie->tk[0].CbCr_subsampling_dy = 2; + else + fprintf(stderr,"Image component sizes are incoherent\n"); + } + + movie->tk[0].sample_rate = 25; + + movie->tk[0].jp2_struct.numcomps = image->numcomps; // NC + + /* Init Standard jp2 structure */ + + movie->tk[0].jp2_struct.comps = + (opj_jp2_comps_t *) malloc(movie->tk[0].jp2_struct.numcomps * sizeof(opj_jp2_comps_t)); + movie->tk[0].jp2_struct.precedence = 0; /* PRECEDENCE*/ + movie->tk[0].jp2_struct.approx = 0; /* APPROX*/ + movie->tk[0].jp2_struct.brand = JP2_JP2; /* BR */ + movie->tk[0].jp2_struct.minversion = 0; /* MinV */ + movie->tk[0].jp2_struct.numcl = 1; + movie->tk[0].jp2_struct.cl = (unsigned int *) malloc(movie->tk[0].jp2_struct.numcl * sizeof(int)); + movie->tk[0].jp2_struct.cl[0] = JP2_JP2; /* CL0 : JP2 */ + movie->tk[0].jp2_struct.C = 7; /* C : Always 7*/ + movie->tk[0].jp2_struct.UnkC = 0; /* UnkC, colorspace specified in colr box*/ + movie->tk[0].jp2_struct.IPR = 0; /* IPR, no intellectual property*/ + movie->tk[0].jp2_struct.w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx); + movie->tk[0].jp2_struct.h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy); + + depth_0 = image->comps[0].prec - 1; + sign = image->comps[0].sgnd; + movie->tk[0].jp2_struct.bpc = depth_0 + (sign << 7); + + for (i = 1; i < image->numcomps; i++) { + depth = image->comps[i].prec - 1; + sign = image->comps[i].sgnd; + if (depth_0 != depth) + movie->tk[0].jp2_struct.bpc = 255; + } + + for (i = 0; i < image->numcomps; i++) + movie->tk[0].jp2_struct.comps[i].bpcc = + image->comps[i].prec - 1 + (image->comps[i].sgnd << 7); + + if ((image->numcomps == 1 || image->numcomps == 3) + && (movie->tk[0].jp2_struct.bpc != 255)) + movie->tk[0].jp2_struct.meth = 1; + else + movie->tk[0].jp2_struct.meth = 2; + + if (image->numcomps == 1) + movie->tk[0].jp2_struct.enumcs = 17; // Grayscale + + else + if ((image->comps[0].dx == 1) + && (image->comps[1].dx == 1) + && (image->comps[2].dx == 1) + && (image->comps[0].dy == 1) + && (image->comps[1].dy == 1) + && (image->comps[2].dy == 1)) + movie->tk[0].jp2_struct.enumcs = 16; // RGB + + else + if ((image->comps[0].dx == 1) + && (image->comps[1].dx == 2) + && (image->comps[2].dx == 2) + && (image->comps[0].dy == 1) + && (image->comps[1].dy == 2) + && (image->comps[2].dy == 2)) + movie->tk[0].jp2_struct.enumcs = 18; // YUV + + else + movie->tk[0].jp2_struct.enumcs = 0; // Unkown profile */ +} + +int main(int argc, char *argv[]) { + opj_cinfo_t* cinfo; + opj_event_mgr_t event_mgr; /* event manager */ + unsigned int snum; + opj_mj2_t *movie; + mj2_sample_t *sample; + unsigned char* frame_codestream; + FILE *mj2file, *j2kfile; + char j2kfilename[50]; + unsigned char *buf; + int offset, mdat_initpos; + opj_image_t img; + opj_cio_t *cio; + mj2_cparameters_t parameters; + + if (argc != 3) { + printf("Usage: %s source_location mj2_filename\n",argv[0]); + printf("Example: %s input/input output.mj2\n",argv[0]); + return 1; + } + + mj2file = fopen(argv[2], "wb"); + + if (!mj2file) { + fprintf(stderr, "failed to open %s for writing\n", argv[2]); + return 1; + } + + /* + configure the event callbacks (not required) + setting of each callback is optionnal + */ + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = error_callback; + event_mgr.warning_handler = warning_callback; + event_mgr.info_handler = info_callback; + + /* get a MJ2 decompressor handle */ + cinfo = mj2_create_compress(); + + /* catch events using our callbacks and give a local context */ + opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr); + + /* setup the decoder encoding parameters using user parameters */ + movie = (opj_mj2_t*) cinfo->mj2_handle; + mj2_setup_encoder((opj_mj2_t*)cinfo->mj2_handle, ¶meters); + + + /* Writing JP, FTYP and MDAT boxes + Assuming that the JP and FTYP boxes won't be longer than 300 bytes */ + + buf = (unsigned char*) malloc (300 * sizeof(unsigned char)); + cio = opj_cio_open(movie->cinfo, buf, 300); + mj2_write_jp(cio); + mj2_write_ftyp(movie, cio); + mdat_initpos = cio_tell(cio); + cio_skip(cio, 4); + cio_write(cio,MJ2_MDAT, 4); + fwrite(buf,cio_tell(cio),1,mj2file); + free(buf); + + // Insert each j2k codestream in a JP2C box + snum=0; + offset = 0; + while(1) + { + sample = &movie->tk[0].sample[snum]; + sprintf(j2kfilename,"%s_%05d.j2k",argv[1],snum); + j2kfile = fopen(j2kfilename, "rb"); + if (!j2kfile) { + if (snum==0) { // Could not open a single codestream + fprintf(stderr, "failed to open %s for reading\n",j2kfilename); + return 1; + } + else { // Tried to open a inexistant codestream + fprintf(stdout,"%d frames are being added to the MJ2 file\n",snum); + break; + } + } + + // Calculating offset for samples and chunks + offset += cio_tell(cio); + sample->offset = offset; + movie->tk[0].chunk[snum].offset = offset; // There will be one sample per chunk + + // Calculating sample size + fseek(j2kfile,0,SEEK_END); + sample->sample_size = ftell(j2kfile) + 8; // Sample size is codestream + JP2C box header + fseek(j2kfile,0,SEEK_SET); + + // Reading siz marker of j2k image for the first codestream + if (snum==0) + read_siz_marker(j2kfile, &img); + + // Writing JP2C box header + frame_codestream = (unsigned char*) malloc (sample->sample_size+8); + cio = opj_cio_open(movie->cinfo, frame_codestream, sample->sample_size); + cio_write(cio,sample->sample_size, 4); // Sample size + cio_write(cio,JP2_JP2C, 4); // JP2C + + // Writing codestream from J2K file to MJ2 file + fread(frame_codestream+8,sample->sample_size-8,1,j2kfile); + fwrite(frame_codestream,sample->sample_size,1,mj2file); + cio_skip(cio, sample->sample_size-8); + + // Ending loop + fclose(j2kfile); + snum++; + movie->tk[0].sample = (mj2_sample_t*) + realloc(movie->tk[0].sample, (snum+1) * sizeof(mj2_sample_t)); + movie->tk[0].chunk = (mj2_chunk_t*) + realloc(movie->tk[0].chunk, (snum+1) * sizeof(mj2_chunk_t)); + free(frame_codestream); + } + + // Writing the MDAT box length in header + offset += cio_tell(cio); + buf = (unsigned char*) malloc (4 * sizeof(unsigned char)); + cio = opj_cio_open(movie->cinfo, buf, 4); + cio_write(cio,offset-mdat_initpos,4); + fseek(mj2file,(long)mdat_initpos,SEEK_SET); + fwrite(buf,4,1,mj2file); + fseek(mj2file,0,SEEK_END); + free(buf); + + // Setting movie parameters + movie->tk[0].num_samples=snum; + movie->tk[0].num_chunks=snum; + setparams(movie, &img); + + // Writing MOOV box + buf = (unsigned char*) malloc ((TEMP_BUF+snum*20) * sizeof(unsigned char)); + cio = opj_cio_open(movie->cinfo, buf, (TEMP_BUF+snum*20)); + mj2_write_moov(movie, cio); + fwrite(buf,cio_tell(cio),1,mj2file); + + // Ending program + fclose(mj2file); + free(img.comps); + opj_cio_close(cio); + mj2_destroy_compress(movie); + + return 0; +} diff --git a/contrib/menuetlibc/openjpeg/openjpeg.xcodeproj/project.pbxproj b/contrib/menuetlibc/openjpeg/openjpeg.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..7aebb37764 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/openjpeg.xcodeproj/project.pbxproj @@ -0,0 +1,2115 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + 692CF258122BB2640010088E /* build OPJ_JPWL */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 692CF261122BB2640010088E /* Build configuration list for PBXAggregateTarget "build OPJ_JPWL" */; + buildPhases = ( + ); + dependencies = ( + 692CF265122BB2760010088E /* PBXTargetDependency */, + 692CF267122BB2760010088E /* PBXTargetDependency */, + 692CF269122BB2760010088E /* PBXTargetDependency */, + 694E0DD012913537008AFCC7 /* PBXTargetDependency */, + ); + name = "build OPJ_JPWL"; + productName = "build all"; + }; + 692CF26A122BB2850010088E /* build all */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 692CF271122BB2850010088E /* Build configuration list for PBXAggregateTarget "build all" */; + buildPhases = ( + ); + dependencies = ( + 692CF275122BB29A0010088E /* PBXTargetDependency */, + 692CF277122BB29A0010088E /* PBXTargetDependency */, + 6938D7E912D0F4C10017B83E /* PBXTargetDependency */, + ); + name = "build all"; + productName = "build all"; + }; + 694039A6117B7E090079DE22 /* build OPJ */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 694039A9117B7E2E0079DE22 /* Build configuration list for PBXAggregateTarget "build OPJ" */; + buildPhases = ( + ); + dependencies = ( + 694039AB117B7E390079DE22 /* PBXTargetDependency */, + 694039AD117B7E3D0079DE22 /* PBXTargetDependency */, + 694039AF117B7E420079DE22 /* PBXTargetDependency */, + 694E0DA412913354008AFCC7 /* PBXTargetDependency */, + 694E0DCE1291350B008AFCC7 /* PBXTargetDependency */, + ); + name = "build OPJ"; + productName = "build all"; + }; + 694E0D4412912A70008AFCC7 /* opj_config */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 694E0D4712912A8F008AFCC7 /* Build configuration list for PBXAggregateTarget "opj_config" */; + buildPhases = ( + 694E0D4312912A70008AFCC7 /* ShellScript */, + ); + dependencies = ( + ); + name = opj_config; + productName = opj_config; + }; + 694E0EFA12953FD2008AFCC7 /* build OPJ_MJ2 */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 694E0F0612953FF2008AFCC7 /* Build configuration list for PBXAggregateTarget "build OPJ_MJ2" */; + buildPhases = ( + ); + dependencies = ( + 694E0F0412953FDB008AFCC7 /* PBXTargetDependency */, + 694E0F0212953FDB008AFCC7 /* PBXTargetDependency */, + 694E0F0012953FDB008AFCC7 /* PBXTargetDependency */, + 694E0EFE12953FDB008AFCC7 /* PBXTargetDependency */, + ); + name = "build OPJ_MJ2"; + productName = "build OPJ_MJ2"; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 6904E34312B0EE5100C1426A /* color.c in Sources */ = {isa = PBXBuildFile; fileRef = 6904E33C12B0ED9500C1426A /* color.c */; }; + 6904E34412B0EE6D00C1426A /* color.c in Sources */ = {isa = PBXBuildFile; fileRef = 6904E33C12B0ED9500C1426A /* color.c */; }; + 6904E34612B0EE8F00C1426A /* color.c in Sources */ = {isa = PBXBuildFile; fileRef = 6904E33C12B0ED9500C1426A /* color.c */; }; + 6904E34712B0EEAD00C1426A /* color.c in Sources */ = {isa = PBXBuildFile; fileRef = 6904E33C12B0ED9500C1426A /* color.c */; }; + 692CF202122BAE220010088E /* libopenjpeg.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 69F985B60D40A63D00C2791C /* libopenjpeg.dylib */; }; + 692CF211122BAFA10010088E /* bio.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984FF0D40A41700C2791C /* bio.c */; }; + 692CF212122BAFA10010088E /* cio.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985020D40A41700C2791C /* cio.c */; }; + 692CF213122BAFA10010088E /* dwt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985060D40A41700C2791C /* dwt.c */; }; + 692CF214122BAFA10010088E /* event.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985090D40A41700C2791C /* event.c */; }; + 692CF215122BAFA10010088E /* image.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9850D0D40A41700C2791C /* image.c */; }; + 692CF216122BAFA10010088E /* j2k.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985110D40A41700C2791C /* j2k.c */; }; + 692CF217122BAFA10010088E /* j2k_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985140D40A41700C2791C /* j2k_lib.c */; }; + 692CF218122BAFA10010088E /* jp2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985170D40A41700C2791C /* jp2.c */; }; + 692CF219122BAFA10010088E /* jpt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9851A0D40A41700C2791C /* jpt.c */; }; + 692CF21A122BAFA10010088E /* mct.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9851D0D40A41700C2791C /* mct.c */; }; + 692CF21B122BAFA10010088E /* mqc.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985200D40A41700C2791C /* mqc.c */; }; + 692CF21C122BAFA10010088E /* openjpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985230D40A41700C2791C /* openjpeg.c */; }; + 692CF21D122BAFA10010088E /* pi.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985280D40A41700C2791C /* pi.c */; }; + 692CF21E122BAFA10010088E /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9852B0D40A41700C2791C /* raw.c */; }; + 692CF21F122BAFA10010088E /* t1.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9852E0D40A41700C2791C /* t1.c */; }; + 692CF220122BAFA10010088E /* t1_generate_luts.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985310D40A41700C2791C /* t1_generate_luts.c */; }; + 692CF221122BAFA10010088E /* t2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985330D40A41700C2791C /* t2.c */; }; + 692CF222122BAFA10010088E /* tcd.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985360D40A41700C2791C /* tcd.c */; }; + 692CF223122BAFA10010088E /* tgt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985390D40A41700C2791C /* tgt.c */; }; + 692CF225122BB0040010088E /* crc.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984F00D40A41700C2791C /* crc.c */; }; + 692CF226122BB0040010088E /* jpwl.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984F20D40A41700C2791C /* jpwl.c */; }; + 692CF227122BB0040010088E /* jpwl_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984F80D40A41700C2791C /* jpwl_lib.c */; }; + 692CF228122BB0040010088E /* rs.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984FC0D40A41700C2791C /* rs.c */; }; + 692CF23E122BB1D60010088E /* convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984BD0D40A41700C2791C /* convert.c */; }; + 692CF240122BB1D60010088E /* image_to_j2k.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984C10D40A41700C2791C /* image_to_j2k.c */; }; + 692CF241122BB1D60010088E /* index.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984C60D40A41700C2791C /* index.c */; }; + 692CF24C122BB2110010088E /* convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984BD0D40A41700C2791C /* convert.c */; }; + 692CF24E122BB2110010088E /* index.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984C60D40A41700C2791C /* index.c */; }; + 692CF24F122BB2110010088E /* j2k_to_image.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984C90D40A41700C2791C /* j2k_to_image.c */; }; + 694E0D9E129132F0008AFCC7 /* j2k_dump.c in Sources */ = {isa = PBXBuildFile; fileRef = 697D95B0125B3BF400FFCE8E /* j2k_dump.c */; }; + 694E0DA11291331D008AFCC7 /* convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984BD0D40A41700C2791C /* convert.c */; }; + 694E0DAF1291347F008AFCC7 /* bio.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984FF0D40A41700C2791C /* bio.c */; }; + 694E0DB01291347F008AFCC7 /* cio.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985020D40A41700C2791C /* cio.c */; }; + 694E0DB11291347F008AFCC7 /* crc.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984F00D40A41700C2791C /* crc.c */; }; + 694E0DB21291347F008AFCC7 /* dwt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985060D40A41700C2791C /* dwt.c */; }; + 694E0DB31291347F008AFCC7 /* event.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985090D40A41700C2791C /* event.c */; }; + 694E0DB41291347F008AFCC7 /* image.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9850D0D40A41700C2791C /* image.c */; }; + 694E0DB51291347F008AFCC7 /* j2k.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985110D40A41700C2791C /* j2k.c */; }; + 694E0DB61291347F008AFCC7 /* j2k_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985140D40A41700C2791C /* j2k_lib.c */; }; + 694E0DB71291347F008AFCC7 /* jp2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985170D40A41700C2791C /* jp2.c */; }; + 694E0DB81291347F008AFCC7 /* jpt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9851A0D40A41700C2791C /* jpt.c */; }; + 694E0DB91291347F008AFCC7 /* jpwl.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984F20D40A41700C2791C /* jpwl.c */; }; + 694E0DBA1291347F008AFCC7 /* jpwl_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984F80D40A41700C2791C /* jpwl_lib.c */; }; + 694E0DBB1291347F008AFCC7 /* mct.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9851D0D40A41700C2791C /* mct.c */; }; + 694E0DBC1291347F008AFCC7 /* mqc.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985200D40A41700C2791C /* mqc.c */; }; + 694E0DBD1291347F008AFCC7 /* openjpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985230D40A41700C2791C /* openjpeg.c */; }; + 694E0DBF1291347F008AFCC7 /* pi.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985280D40A41700C2791C /* pi.c */; }; + 694E0DC01291347F008AFCC7 /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9852B0D40A41700C2791C /* raw.c */; }; + 694E0DC11291347F008AFCC7 /* rs.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984FC0D40A41700C2791C /* rs.c */; }; + 694E0DC21291347F008AFCC7 /* t1.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9852E0D40A41700C2791C /* t1.c */; }; + 694E0DC31291347F008AFCC7 /* t1_generate_luts.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985310D40A41700C2791C /* t1_generate_luts.c */; }; + 694E0DC41291347F008AFCC7 /* t2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985330D40A41700C2791C /* t2.c */; }; + 694E0DC51291347F008AFCC7 /* tcd.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985360D40A41700C2791C /* tcd.c */; }; + 694E0DC61291347F008AFCC7 /* tgt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985390D40A41700C2791C /* tgt.c */; }; + 694E0DD71291357C008AFCC7 /* index.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984C60D40A41700C2791C /* index.c */; }; + 694E0EBE12953E2F008AFCC7 /* extract_j2k_from_mj2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985450D40A41700C2791C /* extract_j2k_from_mj2.c */; }; + 694E0EBF12953E2F008AFCC7 /* mj2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9854F0D40A41700C2791C /* mj2.c */; }; + 694E0EC012953E2F008AFCC7 /* mj2_convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985540D40A41700C2791C /* mj2_convert.c */; }; + 694E0EC812953EC7008AFCC7 /* mj2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9854F0D40A41700C2791C /* mj2.c */; }; + 694E0EC912953EC7008AFCC7 /* mj2_convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985540D40A41700C2791C /* mj2_convert.c */; }; + 694E0ECF12953F16008AFCC7 /* frames_to_mj2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985470D40A41700C2791C /* frames_to_mj2.c */; }; + 694E0ED712953F2B008AFCC7 /* mj2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9854F0D40A41700C2791C /* mj2.c */; }; + 694E0ED812953F2B008AFCC7 /* mj2_convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985540D40A41700C2791C /* mj2_convert.c */; }; + 694E0EDE12953F46008AFCC7 /* mj2_to_frames.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9855B0D40A41700C2791C /* mj2_to_frames.c */; }; + 694E0EEE12953F82008AFCC7 /* mj2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9854F0D40A41700C2791C /* mj2.c */; }; + 694E0EEF12953F82008AFCC7 /* mj2_convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985540D40A41700C2791C /* mj2_convert.c */; }; + 694E0EF512953F95008AFCC7 /* wrap_j2k_in_mj2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9856E0D40A41800C2791C /* wrap_j2k_in_mj2.c */; }; + 69F9860E0D40A7B000C2791C /* bio.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984FF0D40A41700C2791C /* bio.c */; }; + 69F9860F0D40A7B000C2791C /* cio.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985020D40A41700C2791C /* cio.c */; }; + 69F986100D40A7B000C2791C /* dwt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985060D40A41700C2791C /* dwt.c */; }; + 69F986110D40A7B000C2791C /* event.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985090D40A41700C2791C /* event.c */; }; + 69F986120D40A7B000C2791C /* image.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9850D0D40A41700C2791C /* image.c */; }; + 69F986130D40A7B000C2791C /* j2k.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985110D40A41700C2791C /* j2k.c */; }; + 69F986140D40A7B000C2791C /* j2k_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985140D40A41700C2791C /* j2k_lib.c */; }; + 69F986150D40A7B000C2791C /* jp2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985170D40A41700C2791C /* jp2.c */; }; + 69F986160D40A7B000C2791C /* jpt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9851A0D40A41700C2791C /* jpt.c */; }; + 69F986170D40A7B000C2791C /* mct.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9851D0D40A41700C2791C /* mct.c */; }; + 69F986180D40A7B000C2791C /* mqc.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985200D40A41700C2791C /* mqc.c */; }; + 69F986190D40A7B000C2791C /* openjpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985230D40A41700C2791C /* openjpeg.c */; }; + 69F9861A0D40A7B000C2791C /* pi.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985280D40A41700C2791C /* pi.c */; }; + 69F9861B0D40A7B000C2791C /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9852B0D40A41700C2791C /* raw.c */; }; + 69F9861C0D40A7B000C2791C /* t1.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9852E0D40A41700C2791C /* t1.c */; }; + 69F9861D0D40A7B000C2791C /* t1_generate_luts.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985310D40A41700C2791C /* t1_generate_luts.c */; }; + 69F9861E0D40A7B000C2791C /* t2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985330D40A41700C2791C /* t2.c */; }; + 69F9861F0D40A7B000C2791C /* tcd.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985360D40A41700C2791C /* tcd.c */; }; + 69F986200D40A7B000C2791C /* tgt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985390D40A41700C2791C /* tgt.c */; }; + 69F986210D40A7B100C2791C /* bio.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984FF0D40A41700C2791C /* bio.c */; }; + 69F986220D40A7B100C2791C /* cio.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985020D40A41700C2791C /* cio.c */; }; + 69F986230D40A7B100C2791C /* dwt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985060D40A41700C2791C /* dwt.c */; }; + 69F986240D40A7B100C2791C /* event.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985090D40A41700C2791C /* event.c */; }; + 69F986250D40A7B100C2791C /* image.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9850D0D40A41700C2791C /* image.c */; }; + 69F986260D40A7B100C2791C /* j2k.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985110D40A41700C2791C /* j2k.c */; }; + 69F986270D40A7B100C2791C /* j2k_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985140D40A41700C2791C /* j2k_lib.c */; }; + 69F986280D40A7B100C2791C /* jp2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985170D40A41700C2791C /* jp2.c */; }; + 69F986290D40A7B100C2791C /* jpt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9851A0D40A41700C2791C /* jpt.c */; }; + 69F9862A0D40A7B100C2791C /* mct.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9851D0D40A41700C2791C /* mct.c */; }; + 69F9862B0D40A7B100C2791C /* mqc.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985200D40A41700C2791C /* mqc.c */; }; + 69F9862C0D40A7B100C2791C /* openjpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985230D40A41700C2791C /* openjpeg.c */; }; + 69F9862D0D40A7B100C2791C /* pi.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985280D40A41700C2791C /* pi.c */; }; + 69F9862E0D40A7B100C2791C /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9852B0D40A41700C2791C /* raw.c */; }; + 69F9862F0D40A7B100C2791C /* t1.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F9852E0D40A41700C2791C /* t1.c */; }; + 69F986300D40A7B100C2791C /* t1_generate_luts.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985310D40A41700C2791C /* t1_generate_luts.c */; }; + 69F986310D40A7B100C2791C /* t2.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985330D40A41700C2791C /* t2.c */; }; + 69F986320D40A7B100C2791C /* tcd.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985360D40A41700C2791C /* tcd.c */; }; + 69F986330D40A7B100C2791C /* tgt.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F985390D40A41700C2791C /* tgt.c */; }; + 69F986520D40A84C00C2791C /* convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984BD0D40A41700C2791C /* convert.c */; }; + 69F986540D40A84C00C2791C /* image_to_j2k.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984C10D40A41700C2791C /* image_to_j2k.c */; }; + 69F986550D40A84C00C2791C /* index.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984C60D40A41700C2791C /* index.c */; }; + 69F986600D40A90E00C2791C /* convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984BD0D40A41700C2791C /* convert.c */; }; + 69F986620D40A90E00C2791C /* index.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984C60D40A41700C2791C /* index.c */; }; + 69F986630D40A90E00C2791C /* j2k_to_image.c in Sources */ = {isa = PBXBuildFile; fileRef = 69F984C90D40A41700C2791C /* j2k_to_image.c */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 692CF264122BB2760010088E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 692CF20D122BAF7A0010088E; + remoteInfo = openjpeg_JPWL; + }; + 692CF266122BB2760010088E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 692CF23C122BB1D60010088E; + remoteInfo = JPWL_image_to_j2k; + }; + 692CF268122BB2760010088E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 692CF24A122BB2110010088E; + remoteInfo = JPWL_j2k_to_image; + }; + 692CF274122BB29A0010088E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694039A6117B7E090079DE22; + remoteInfo = "build OPJ"; + }; + 692CF276122BB29A0010088E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 692CF258122BB2640010088E; + remoteInfo = "build OPJ_JPWL"; + }; + 6938D7E812D0F4C10017B83E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0EFA12953FD2008AFCC7 /* build OPJ_MJ2 */; + remoteInfo = "build OPJ_MJ2"; + }; + 694039AA117B7E390079DE22 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 69F985A00D40A48E00C2791C; + remoteInfo = openjpeg; + }; + 694039AC117B7E3D0079DE22 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 69F986380D40A7DA00C2791C; + remoteInfo = image_to_j2k; + }; + 694039AE117B7E420079DE22 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 69F9865B0D40A8E200C2791C; + remoteInfo = j2k_to_image; + }; + 694E0D4E12912DED008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0D5012912DFE008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0D5212912E09008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0D5412912E0E008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0D5612912E19008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0D5812912E1F008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0D5A12912E27008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0DA312913354008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D99129132D7008AFCC7; + remoteInfo = j2k_dump; + }; + 694E0DAD12913478008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0DCB129134F3008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0DCD1291350B008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 69F985B50D40A63D00C2791C; + remoteInfo = opj_dynamic; + }; + 694E0DCF12913537008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0DA81291340E008AFCC7; + remoteInfo = opj_JPWL_dynamic; + }; + 694E0EBB12953E05008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0EC512953EC7008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0ED412953F2B008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0EEB12953F82008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0D4412912A70008AFCC7; + remoteInfo = opj_config; + }; + 694E0EFD12953FDB008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0EE912953F82008AFCC7; + remoteInfo = wrap_j2k_in_mj2; + }; + 694E0EFF12953FDB008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0ED212953F2B008AFCC7; + remoteInfo = mj2_to_frames; + }; + 694E0F0112953FDB008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0EC312953EC7008AFCC7; + remoteInfo = frames_to_mj2; + }; + 694E0F0312953FDB008AFCC7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69F984A80D40A3AE00C2791C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 694E0EB612953DF3008AFCC7; + remoteInfo = extract_j2k_from_mj2; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 692CF1F8122BAD330010088E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = /usr/local/lib; + dstSubfolderSpec = 0; + files = ( + 692CF202122BAE220010088E /* libopenjpeg.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 6904E33C12B0ED9500C1426A /* color.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = color.c; sourceTree = ""; }; + 6904E33D12B0ED9500C1426A /* color.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = color.h; sourceTree = ""; }; + 6904E33E12B0ED9500C1426A /* format_defs.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = format_defs.h; sourceTree = ""; }; + 6904E33F12B0ED9500C1426A /* getopt.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = getopt.c; sourceTree = ""; }; + 6904E34012B0ED9500C1426A /* getopt.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = getopt.h; sourceTree = ""; }; + 692CF20E122BAF7A0010088E /* libopenjpeg_JPWL.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libopenjpeg_JPWL.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 692CF247122BB1D60010088E /* JPWL_image_to_j2k */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = JPWL_image_to_j2k; sourceTree = BUILT_PRODUCTS_DIR; }; + 692CF255122BB2110010088E /* JPWL_j2k_to_image */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = JPWL_j2k_to_image; sourceTree = BUILT_PRODUCTS_DIR; }; + 694E0D40129129D3008AFCC7 /* opj_config.h.in.user */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = opj_config.h.in.user; sourceTree = ""; }; + 694E0D8512913100008AFCC7 /* opj_config.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = opj_config.h; sourceTree = ""; }; + 694E0D9A129132D7008AFCC7 /* j2k_dump */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = j2k_dump; sourceTree = BUILT_PRODUCTS_DIR; }; + 694E0DA91291340E008AFCC7 /* libopenjpeg_JPWL.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libopenjpeg_JPWL.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; + 694E0EB712953DF3008AFCC7 /* extract_j2k_from_mj2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = extract_j2k_from_mj2; sourceTree = BUILT_PRODUCTS_DIR; }; + 694E0ECD12953EC7008AFCC7 /* frames_to_mj2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = frames_to_mj2; sourceTree = BUILT_PRODUCTS_DIR; }; + 694E0EDC12953F2B008AFCC7 /* mj2_to_frames */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mj2_to_frames; sourceTree = BUILT_PRODUCTS_DIR; }; + 694E0EF312953F82008AFCC7 /* wrap_j2k_in_mj2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = wrap_j2k_in_mj2; sourceTree = BUILT_PRODUCTS_DIR; }; + 6975151C127D722900CAD463 /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = INSTALL; sourceTree = ""; }; + 697D95B0125B3BF400FFCE8E /* j2k_dump.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = j2k_dump.c; sourceTree = ""; }; + 697D95B3125B3C7500FFCE8E /* image_to_j2k.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = image_to_j2k.1; sourceTree = ""; }; + 697D95B4125B3C7500FFCE8E /* j2k_dump.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = j2k_dump.1; sourceTree = ""; }; + 697D95B5125B3C7500FFCE8E /* j2k_to_image.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = j2k_to_image.1; sourceTree = ""; }; + 697D95B7125B3C7500FFCE8E /* libopenjpeg.3 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = libopenjpeg.3; sourceTree = ""; }; + 697D965A1262643900FFCE8E /* CHANGES */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = CHANGES; sourceTree = ""; }; + 69F984BD0D40A41700C2791C /* convert.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = convert.c; sourceTree = ""; }; + 69F984BE0D40A41700C2791C /* convert.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = convert.h; sourceTree = ""; }; + 69F984C10D40A41700C2791C /* image_to_j2k.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = image_to_j2k.c; sourceTree = ""; }; + 69F984C60D40A41700C2791C /* index.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = index.c; sourceTree = ""; }; + 69F984C70D40A41700C2791C /* index.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = index.h; sourceTree = ""; }; + 69F984C90D40A41700C2791C /* j2k_to_image.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = j2k_to_image.c; sourceTree = ""; }; + 69F984D10D40A41700C2791C /* Doxyfile.dox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Doxyfile.dox; sourceTree = ""; }; + 69F984F00D40A41700C2791C /* crc.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = crc.c; sourceTree = ""; }; + 69F984F10D40A41700C2791C /* crc.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = crc.h; sourceTree = ""; }; + 69F984F20D40A41700C2791C /* jpwl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = jpwl.c; sourceTree = ""; }; + 69F984F30D40A41700C2791C /* jpwl.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = jpwl.h; sourceTree = ""; }; + 69F984F80D40A41700C2791C /* jpwl_lib.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = jpwl_lib.c; sourceTree = ""; }; + 69F984FC0D40A41700C2791C /* rs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = rs.c; sourceTree = ""; }; + 69F984FD0D40A41700C2791C /* rs.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = rs.h; sourceTree = ""; }; + 69F984FF0D40A41700C2791C /* bio.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = bio.c; sourceTree = ""; }; + 69F985000D40A41700C2791C /* bio.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = bio.h; sourceTree = ""; }; + 69F985020D40A41700C2791C /* cio.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = cio.c; sourceTree = ""; }; + 69F985030D40A41700C2791C /* cio.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = cio.h; sourceTree = ""; }; + 69F985060D40A41700C2791C /* dwt.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = dwt.c; sourceTree = ""; }; + 69F985070D40A41700C2791C /* dwt.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = dwt.h; sourceTree = ""; }; + 69F985090D40A41700C2791C /* event.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = event.c; sourceTree = ""; }; + 69F9850A0D40A41700C2791C /* event.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = event.h; sourceTree = ""; }; + 69F9850C0D40A41700C2791C /* fix.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = fix.h; sourceTree = ""; }; + 69F9850D0D40A41700C2791C /* image.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = image.c; sourceTree = ""; }; + 69F9850E0D40A41700C2791C /* image.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = image.h; sourceTree = ""; }; + 69F985100D40A41700C2791C /* int.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = int.h; sourceTree = ""; }; + 69F985110D40A41700C2791C /* j2k.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = j2k.c; sourceTree = ""; }; + 69F985120D40A41700C2791C /* j2k.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = j2k.h; sourceTree = ""; }; + 69F985140D40A41700C2791C /* j2k_lib.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = j2k_lib.c; sourceTree = ""; }; + 69F985150D40A41700C2791C /* j2k_lib.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = j2k_lib.h; sourceTree = ""; }; + 69F985170D40A41700C2791C /* jp2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = jp2.c; sourceTree = ""; }; + 69F985180D40A41700C2791C /* jp2.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = jp2.h; sourceTree = ""; }; + 69F9851A0D40A41700C2791C /* jpt.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = jpt.c; sourceTree = ""; }; + 69F9851B0D40A41700C2791C /* jpt.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = jpt.h; sourceTree = ""; }; + 69F9851D0D40A41700C2791C /* mct.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = mct.c; sourceTree = ""; }; + 69F9851E0D40A41700C2791C /* mct.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = mct.h; sourceTree = ""; }; + 69F985200D40A41700C2791C /* mqc.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = mqc.c; sourceTree = ""; }; + 69F985210D40A41700C2791C /* mqc.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = mqc.h; sourceTree = ""; }; + 69F985230D40A41700C2791C /* openjpeg.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = openjpeg.c; sourceTree = ""; }; + 69F985240D40A41700C2791C /* openjpeg.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = openjpeg.h; sourceTree = ""; }; + 69F985260D40A41700C2791C /* opj_includes.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = opj_includes.h; sourceTree = ""; }; + 69F985270D40A41700C2791C /* opj_malloc.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = opj_malloc.h; sourceTree = ""; }; + 69F985280D40A41700C2791C /* pi.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = pi.c; sourceTree = ""; }; + 69F985290D40A41700C2791C /* pi.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = pi.h; sourceTree = ""; }; + 69F9852B0D40A41700C2791C /* raw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = raw.c; sourceTree = ""; }; + 69F9852C0D40A41700C2791C /* raw.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = raw.h; sourceTree = ""; }; + 69F9852E0D40A41700C2791C /* t1.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = t1.c; sourceTree = ""; }; + 69F9852F0D40A41700C2791C /* t1.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = t1.h; sourceTree = ""; }; + 69F985310D40A41700C2791C /* t1_generate_luts.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = t1_generate_luts.c; sourceTree = ""; }; + 69F985320D40A41700C2791C /* t1_luts.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = t1_luts.h; sourceTree = ""; }; + 69F985330D40A41700C2791C /* t2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = t2.c; sourceTree = ""; }; + 69F985340D40A41700C2791C /* t2.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = t2.h; sourceTree = ""; }; + 69F985360D40A41700C2791C /* tcd.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = tcd.c; sourceTree = ""; }; + 69F985370D40A41700C2791C /* tcd.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = tcd.h; sourceTree = ""; }; + 69F985390D40A41700C2791C /* tgt.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = tgt.c; sourceTree = ""; }; + 69F9853A0D40A41700C2791C /* tgt.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = tgt.h; sourceTree = ""; }; + 69F985450D40A41700C2791C /* extract_j2k_from_mj2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = extract_j2k_from_mj2.c; sourceTree = ""; }; + 69F985470D40A41700C2791C /* frames_to_mj2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = frames_to_mj2.c; sourceTree = ""; }; + 69F9854D0D40A41700C2791C /* meta_out.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = meta_out.c; sourceTree = ""; }; + 69F9854E0D40A41700C2791C /* meta_out.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = meta_out.h; sourceTree = ""; }; + 69F9854F0D40A41700C2791C /* mj2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = mj2.c; sourceTree = ""; }; + 69F985500D40A41700C2791C /* mj2.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = mj2.h; sourceTree = ""; }; + 69F985540D40A41700C2791C /* mj2_convert.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = mj2_convert.c; sourceTree = ""; }; + 69F985550D40A41700C2791C /* mj2_convert.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = mj2_convert.h; sourceTree = ""; }; + 69F9855B0D40A41700C2791C /* mj2_to_frames.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = mj2_to_frames.c; sourceTree = ""; }; + 69F985600D40A41700C2791C /* mj2_to_metadata.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = mj2_to_metadata.c; sourceTree = ""; }; + 69F985640D40A41700C2791C /* mj2_to_metadata.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = mj2_to_metadata.h; sourceTree = ""; }; + 69F9856E0D40A41800C2791C /* wrap_j2k_in_mj2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = wrap_j2k_in_mj2.c; sourceTree = ""; }; + 69F985A10D40A48E00C2791C /* libopenjpeg.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libopenjpeg.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 69F985B60D40A63D00C2791C /* libopenjpeg.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libopenjpeg.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; + 69F986390D40A7DA00C2791C /* image_to_j2k */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = image_to_j2k; sourceTree = BUILT_PRODUCTS_DIR; }; + 69F9865C0D40A8E200C2791C /* j2k_to_image */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = j2k_to_image; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + 6904E33B12B0ED9500C1426A /* common */ = { + isa = PBXGroup; + children = ( + 6904E33C12B0ED9500C1426A /* color.c */, + 6904E33D12B0ED9500C1426A /* color.h */, + 6904E33E12B0ED9500C1426A /* format_defs.h */, + 6904E33F12B0ED9500C1426A /* getopt.c */, + 6904E34012B0ED9500C1426A /* getopt.h */, + ); + path = common; + sourceTree = ""; + }; + 697D95B1125B3C7500FFCE8E /* man */ = { + isa = PBXGroup; + children = ( + 697D95B2125B3C7500FFCE8E /* man1 */, + 697D95B6125B3C7500FFCE8E /* man3 */, + ); + path = man; + sourceTree = ""; + }; + 697D95B2125B3C7500FFCE8E /* man1 */ = { + isa = PBXGroup; + children = ( + 697D95B3125B3C7500FFCE8E /* image_to_j2k.1 */, + 697D95B4125B3C7500FFCE8E /* j2k_dump.1 */, + 697D95B5125B3C7500FFCE8E /* j2k_to_image.1 */, + ); + path = man1; + sourceTree = ""; + }; + 697D95B6125B3C7500FFCE8E /* man3 */ = { + isa = PBXGroup; + children = ( + 697D95B7125B3C7500FFCE8E /* libopenjpeg.3 */, + ); + path = man3; + sourceTree = ""; + }; + 69F984A60D40A3AE00C2791C = { + isa = PBXGroup; + children = ( + 694E0D8512913100008AFCC7 /* opj_config.h */, + 694E0D40129129D3008AFCC7 /* opj_config.h.in.user */, + 6975151C127D722900CAD463 /* INSTALL */, + 697D965A1262643900FFCE8E /* CHANGES */, + 6904E33B12B0ED9500C1426A /* common */, + 69F984FE0D40A41700C2791C /* libopenjpeg */, + 69F984B80D40A41700C2791C /* codec */, + 69F984EE0D40A41700C2791C /* jpwl */, + 69F9853F0D40A41700C2791C /* mj2 */, + 69F984CF0D40A41700C2791C /* doc */, + 69F985A20D40A48E00C2791C /* Products */, + ); + sourceTree = ""; + }; + 69F984B80D40A41700C2791C /* codec */ = { + isa = PBXGroup; + children = ( + 697D95B0125B3BF400FFCE8E /* j2k_dump.c */, + 69F984BD0D40A41700C2791C /* convert.c */, + 69F984BE0D40A41700C2791C /* convert.h */, + 69F984C10D40A41700C2791C /* image_to_j2k.c */, + 69F984C60D40A41700C2791C /* index.c */, + 69F984C70D40A41700C2791C /* index.h */, + 69F984C90D40A41700C2791C /* j2k_to_image.c */, + ); + path = codec; + sourceTree = ""; + }; + 69F984CF0D40A41700C2791C /* doc */ = { + isa = PBXGroup; + children = ( + 697D95B1125B3C7500FFCE8E /* man */, + 69F984D10D40A41700C2791C /* Doxyfile.dox */, + ); + path = doc; + sourceTree = ""; + }; + 69F984EE0D40A41700C2791C /* jpwl */ = { + isa = PBXGroup; + children = ( + 69F984F00D40A41700C2791C /* crc.c */, + 69F984F10D40A41700C2791C /* crc.h */, + 69F984F20D40A41700C2791C /* jpwl.c */, + 69F984F30D40A41700C2791C /* jpwl.h */, + 69F984F80D40A41700C2791C /* jpwl_lib.c */, + 69F984FC0D40A41700C2791C /* rs.c */, + 69F984FD0D40A41700C2791C /* rs.h */, + ); + path = jpwl; + sourceTree = ""; + }; + 69F984FE0D40A41700C2791C /* libopenjpeg */ = { + isa = PBXGroup; + children = ( + 69F984FF0D40A41700C2791C /* bio.c */, + 69F985000D40A41700C2791C /* bio.h */, + 69F985020D40A41700C2791C /* cio.c */, + 69F985030D40A41700C2791C /* cio.h */, + 69F985060D40A41700C2791C /* dwt.c */, + 69F985070D40A41700C2791C /* dwt.h */, + 69F985090D40A41700C2791C /* event.c */, + 69F9850A0D40A41700C2791C /* event.h */, + 69F9850C0D40A41700C2791C /* fix.h */, + 69F9850D0D40A41700C2791C /* image.c */, + 69F9850E0D40A41700C2791C /* image.h */, + 69F985100D40A41700C2791C /* int.h */, + 69F985110D40A41700C2791C /* j2k.c */, + 69F985120D40A41700C2791C /* j2k.h */, + 69F985140D40A41700C2791C /* j2k_lib.c */, + 69F985150D40A41700C2791C /* j2k_lib.h */, + 69F985170D40A41700C2791C /* jp2.c */, + 69F985180D40A41700C2791C /* jp2.h */, + 69F9851A0D40A41700C2791C /* jpt.c */, + 69F9851B0D40A41700C2791C /* jpt.h */, + 69F9851D0D40A41700C2791C /* mct.c */, + 69F9851E0D40A41700C2791C /* mct.h */, + 69F985200D40A41700C2791C /* mqc.c */, + 69F985210D40A41700C2791C /* mqc.h */, + 69F985230D40A41700C2791C /* openjpeg.c */, + 69F985240D40A41700C2791C /* openjpeg.h */, + 69F985260D40A41700C2791C /* opj_includes.h */, + 69F985270D40A41700C2791C /* opj_malloc.h */, + 69F985280D40A41700C2791C /* pi.c */, + 69F985290D40A41700C2791C /* pi.h */, + 69F9852B0D40A41700C2791C /* raw.c */, + 69F9852C0D40A41700C2791C /* raw.h */, + 69F9852E0D40A41700C2791C /* t1.c */, + 69F9852F0D40A41700C2791C /* t1.h */, + 69F985310D40A41700C2791C /* t1_generate_luts.c */, + 69F985320D40A41700C2791C /* t1_luts.h */, + 69F985330D40A41700C2791C /* t2.c */, + 69F985340D40A41700C2791C /* t2.h */, + 69F985360D40A41700C2791C /* tcd.c */, + 69F985370D40A41700C2791C /* tcd.h */, + 69F985390D40A41700C2791C /* tgt.c */, + 69F9853A0D40A41700C2791C /* tgt.h */, + ); + path = libopenjpeg; + sourceTree = ""; + }; + 69F9853F0D40A41700C2791C /* mj2 */ = { + isa = PBXGroup; + children = ( + 69F985450D40A41700C2791C /* extract_j2k_from_mj2.c */, + 69F985470D40A41700C2791C /* frames_to_mj2.c */, + 69F9854D0D40A41700C2791C /* meta_out.c */, + 69F9854E0D40A41700C2791C /* meta_out.h */, + 69F9854F0D40A41700C2791C /* mj2.c */, + 69F985500D40A41700C2791C /* mj2.h */, + 69F985540D40A41700C2791C /* mj2_convert.c */, + 69F985550D40A41700C2791C /* mj2_convert.h */, + 69F9855B0D40A41700C2791C /* mj2_to_frames.c */, + 69F985600D40A41700C2791C /* mj2_to_metadata.c */, + 69F985640D40A41700C2791C /* mj2_to_metadata.h */, + 69F9856E0D40A41800C2791C /* wrap_j2k_in_mj2.c */, + ); + path = mj2; + sourceTree = ""; + }; + 69F985A20D40A48E00C2791C /* Products */ = { + isa = PBXGroup; + children = ( + 69F985A10D40A48E00C2791C /* libopenjpeg.a */, + 69F986390D40A7DA00C2791C /* image_to_j2k */, + 69F9865C0D40A8E200C2791C /* j2k_to_image */, + 69F985B60D40A63D00C2791C /* libopenjpeg.dylib */, + 692CF20E122BAF7A0010088E /* libopenjpeg_JPWL.a */, + 692CF247122BB1D60010088E /* JPWL_image_to_j2k */, + 692CF255122BB2110010088E /* JPWL_j2k_to_image */, + 694E0D9A129132D7008AFCC7 /* j2k_dump */, + 694E0DA91291340E008AFCC7 /* libopenjpeg_JPWL.dylib */, + 694E0EB712953DF3008AFCC7 /* extract_j2k_from_mj2 */, + 694E0ECD12953EC7008AFCC7 /* frames_to_mj2 */, + 694E0EDC12953F2B008AFCC7 /* mj2_to_frames */, + 694E0EF312953F82008AFCC7 /* wrap_j2k_in_mj2 */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 692CF20D122BAF7A0010088E /* opj_JPWL_static */ = { + isa = PBXNativeTarget; + buildConfigurationList = 692CF224122BAFBF0010088E /* Build configuration list for PBXNativeTarget "opj_JPWL_static" */; + buildPhases = ( + 692CF20B122BAF7A0010088E /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0D5712912E19008AFCC7 /* PBXTargetDependency */, + ); + name = opj_JPWL_static; + productName = openjpegWL; + productReference = 692CF20E122BAF7A0010088E /* libopenjpeg_JPWL.a */; + productType = "com.apple.product-type.library.static"; + }; + 692CF23C122BB1D60010088E /* JPWL_image_to_j2k */ = { + isa = PBXNativeTarget; + buildConfigurationList = 692CF244122BB1D60010088E /* Build configuration list for PBXNativeTarget "JPWL_image_to_j2k" */; + buildPhases = ( + 692CF23D122BB1D60010088E /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0D5912912E1F008AFCC7 /* PBXTargetDependency */, + ); + name = JPWL_image_to_j2k; + productName = image_to_j2k; + productReference = 692CF247122BB1D60010088E /* JPWL_image_to_j2k */; + productType = "com.apple.product-type.tool"; + }; + 692CF24A122BB2110010088E /* JPWL_j2k_to_image */ = { + isa = PBXNativeTarget; + buildConfigurationList = 692CF252122BB2110010088E /* Build configuration list for PBXNativeTarget "JPWL_j2k_to_image" */; + buildPhases = ( + 692CF24B122BB2110010088E /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0D5B12912E27008AFCC7 /* PBXTargetDependency */, + ); + name = JPWL_j2k_to_image; + productName = j2k_to_image; + productReference = 692CF255122BB2110010088E /* JPWL_j2k_to_image */; + productType = "com.apple.product-type.tool"; + }; + 694E0D99129132D7008AFCC7 /* j2k_dump */ = { + isa = PBXNativeTarget; + buildConfigurationList = 694E0D9F1291330E008AFCC7 /* Build configuration list for PBXNativeTarget "j2k_dump" */; + buildPhases = ( + 694E0D97129132D7008AFCC7 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0DCC129134F3008AFCC7 /* PBXTargetDependency */, + ); + name = j2k_dump; + productName = j2k_dump; + productReference = 694E0D9A129132D7008AFCC7 /* j2k_dump */; + productType = "com.apple.product-type.tool"; + }; + 694E0DA81291340E008AFCC7 /* opj_JPWL_dynamic */ = { + isa = PBXNativeTarget; + buildConfigurationList = 694E0DAC1291342C008AFCC7 /* Build configuration list for PBXNativeTarget "opj_JPWL_dynamic" */; + buildPhases = ( + 694E0DA61291340E008AFCC7 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0DAE12913478008AFCC7 /* PBXTargetDependency */, + ); + name = opj_JPWL_dynamic; + productName = opj_JPWL_dynamic; + productReference = 694E0DA91291340E008AFCC7 /* libopenjpeg_JPWL.dylib */; + productType = "com.apple.product-type.library.dynamic"; + }; + 694E0EB612953DF3008AFCC7 /* extract_j2k_from_mj2 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 694E0EBD12953E23008AFCC7 /* Build configuration list for PBXNativeTarget "extract_j2k_from_mj2" */; + buildPhases = ( + 694E0EB412953DF3008AFCC7 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0EBC12953E05008AFCC7 /* PBXTargetDependency */, + ); + name = extract_j2k_from_mj2; + productName = extract_j2k_from_mj2; + productReference = 694E0EB712953DF3008AFCC7 /* extract_j2k_from_mj2 */; + productType = "com.apple.product-type.tool"; + }; + 694E0EC312953EC7008AFCC7 /* frames_to_mj2 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 694E0ECA12953EC7008AFCC7 /* Build configuration list for PBXNativeTarget "frames_to_mj2" */; + buildPhases = ( + 694E0EC612953EC7008AFCC7 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0EC412953EC7008AFCC7 /* PBXTargetDependency */, + ); + name = frames_to_mj2; + productName = extract_j2k_from_mj2; + productReference = 694E0ECD12953EC7008AFCC7 /* frames_to_mj2 */; + productType = "com.apple.product-type.tool"; + }; + 694E0ED212953F2B008AFCC7 /* mj2_to_frames */ = { + isa = PBXNativeTarget; + buildConfigurationList = 694E0ED912953F2B008AFCC7 /* Build configuration list for PBXNativeTarget "mj2_to_frames" */; + buildPhases = ( + 694E0ED512953F2B008AFCC7 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0ED312953F2B008AFCC7 /* PBXTargetDependency */, + ); + name = mj2_to_frames; + productName = extract_j2k_from_mj2; + productReference = 694E0EDC12953F2B008AFCC7 /* mj2_to_frames */; + productType = "com.apple.product-type.tool"; + }; + 694E0EE912953F82008AFCC7 /* wrap_j2k_in_mj2 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 694E0EF012953F82008AFCC7 /* Build configuration list for PBXNativeTarget "wrap_j2k_in_mj2" */; + buildPhases = ( + 694E0EEC12953F82008AFCC7 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0EEA12953F82008AFCC7 /* PBXTargetDependency */, + ); + name = wrap_j2k_in_mj2; + productName = extract_j2k_from_mj2; + productReference = 694E0EF312953F82008AFCC7 /* wrap_j2k_in_mj2 */; + productType = "com.apple.product-type.tool"; + }; + 69F985A00D40A48E00C2791C /* opj_static */ = { + isa = PBXNativeTarget; + buildConfigurationList = 69F985A30D40A48F00C2791C /* Build configuration list for PBXNativeTarget "opj_static" */; + buildPhases = ( + 69F9859E0D40A48E00C2791C /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0D4F12912DED008AFCC7 /* PBXTargetDependency */, + ); + name = opj_static; + productName = openjpeg; + productReference = 69F985A10D40A48E00C2791C /* libopenjpeg.a */; + productType = "com.apple.product-type.library.static"; + }; + 69F985B50D40A63D00C2791C /* opj_dynamic */ = { + isa = PBXNativeTarget; + buildConfigurationList = 69F985B90D40A69400C2791C /* Build configuration list for PBXNativeTarget "opj_dynamic" */; + buildPhases = ( + 69F985B30D40A63D00C2791C /* Sources */, + 692CF1F8122BAD330010088E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 694E0D5112912DFE008AFCC7 /* PBXTargetDependency */, + ); + name = opj_dynamic; + productName = opjdyn; + productReference = 69F985B60D40A63D00C2791C /* libopenjpeg.dylib */; + productType = "com.apple.product-type.library.dynamic"; + }; + 69F986380D40A7DA00C2791C /* image_to_j2k */ = { + isa = PBXNativeTarget; + buildConfigurationList = 69F9864B0D40A7F200C2791C /* Build configuration list for PBXNativeTarget "image_to_j2k" */; + buildPhases = ( + 69F986360D40A7DA00C2791C /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0D5312912E09008AFCC7 /* PBXTargetDependency */, + ); + name = image_to_j2k; + productName = image_to_j2k; + productReference = 69F986390D40A7DA00C2791C /* image_to_j2k */; + productType = "com.apple.product-type.tool"; + }; + 69F9865B0D40A8E200C2791C /* j2k_to_image */ = { + isa = PBXNativeTarget; + buildConfigurationList = 69F986650D40A93B00C2791C /* Build configuration list for PBXNativeTarget "j2k_to_image" */; + buildPhases = ( + 69F986590D40A8E200C2791C /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 694E0D5512912E0E008AFCC7 /* PBXTargetDependency */, + ); + name = j2k_to_image; + productName = j2k_to_image; + productReference = 69F9865C0D40A8E200C2791C /* j2k_to_image */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 69F984A80D40A3AE00C2791C /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 69F984A90D40A3AE00C2791C /* Build configuration list for PBXProject "openjpeg" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 69F984A60D40A3AE00C2791C; + productRefGroup = 69F985A20D40A48E00C2791C /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 694E0D4412912A70008AFCC7 /* opj_config */, + 69F985A00D40A48E00C2791C /* opj_static */, + 69F986380D40A7DA00C2791C /* image_to_j2k */, + 69F9865B0D40A8E200C2791C /* j2k_to_image */, + 694E0D99129132D7008AFCC7 /* j2k_dump */, + 69F985B50D40A63D00C2791C /* opj_dynamic */, + 694039A6117B7E090079DE22 /* build OPJ */, + 692CF20D122BAF7A0010088E /* opj_JPWL_static */, + 692CF23C122BB1D60010088E /* JPWL_image_to_j2k */, + 692CF24A122BB2110010088E /* JPWL_j2k_to_image */, + 694E0DA81291340E008AFCC7 /* opj_JPWL_dynamic */, + 692CF258122BB2640010088E /* build OPJ_JPWL */, + 694E0EB612953DF3008AFCC7 /* extract_j2k_from_mj2 */, + 694E0EC312953EC7008AFCC7 /* frames_to_mj2 */, + 694E0ED212953F2B008AFCC7 /* mj2_to_frames */, + 694E0EE912953F82008AFCC7 /* wrap_j2k_in_mj2 */, + 694E0EFA12953FD2008AFCC7 /* build OPJ_MJ2 */, + 692CF26A122BB2850010088E /* build all */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 694E0D4312912A70008AFCC7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/opj_config.h.in.user", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/opj_config.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# shell script goes here\n\n# TODO : script to automatically check for libpng, libtiff and liblcms.\n\n# Copy opj_config.h.in.user to opj_config.h\n\ncp -a opj_config.h.in.user opj_config.h\n\nexit 0"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 692CF20B122BAF7A0010088E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 692CF225122BB0040010088E /* crc.c in Sources */, + 692CF226122BB0040010088E /* jpwl.c in Sources */, + 692CF227122BB0040010088E /* jpwl_lib.c in Sources */, + 692CF228122BB0040010088E /* rs.c in Sources */, + 692CF211122BAFA10010088E /* bio.c in Sources */, + 692CF212122BAFA10010088E /* cio.c in Sources */, + 692CF213122BAFA10010088E /* dwt.c in Sources */, + 692CF214122BAFA10010088E /* event.c in Sources */, + 692CF215122BAFA10010088E /* image.c in Sources */, + 692CF216122BAFA10010088E /* j2k.c in Sources */, + 692CF217122BAFA10010088E /* j2k_lib.c in Sources */, + 692CF218122BAFA10010088E /* jp2.c in Sources */, + 692CF219122BAFA10010088E /* jpt.c in Sources */, + 692CF21A122BAFA10010088E /* mct.c in Sources */, + 692CF21B122BAFA10010088E /* mqc.c in Sources */, + 692CF21C122BAFA10010088E /* openjpeg.c in Sources */, + 692CF21D122BAFA10010088E /* pi.c in Sources */, + 692CF21E122BAFA10010088E /* raw.c in Sources */, + 692CF21F122BAFA10010088E /* t1.c in Sources */, + 692CF220122BAFA10010088E /* t1_generate_luts.c in Sources */, + 692CF221122BAFA10010088E /* t2.c in Sources */, + 692CF222122BAFA10010088E /* tcd.c in Sources */, + 692CF223122BAFA10010088E /* tgt.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 692CF23D122BB1D60010088E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 692CF23E122BB1D60010088E /* convert.c in Sources */, + 692CF240122BB1D60010088E /* image_to_j2k.c in Sources */, + 692CF241122BB1D60010088E /* index.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 692CF24B122BB2110010088E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6904E34612B0EE8F00C1426A /* color.c in Sources */, + 692CF24C122BB2110010088E /* convert.c in Sources */, + 692CF24E122BB2110010088E /* index.c in Sources */, + 692CF24F122BB2110010088E /* j2k_to_image.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 694E0D97129132D7008AFCC7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6904E34412B0EE6D00C1426A /* color.c in Sources */, + 694E0DD71291357C008AFCC7 /* index.c in Sources */, + 694E0D9E129132F0008AFCC7 /* j2k_dump.c in Sources */, + 694E0DA11291331D008AFCC7 /* convert.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 694E0DA61291340E008AFCC7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 694E0DAF1291347F008AFCC7 /* bio.c in Sources */, + 694E0DB01291347F008AFCC7 /* cio.c in Sources */, + 694E0DB11291347F008AFCC7 /* crc.c in Sources */, + 694E0DB21291347F008AFCC7 /* dwt.c in Sources */, + 694E0DB31291347F008AFCC7 /* event.c in Sources */, + 694E0DB41291347F008AFCC7 /* image.c in Sources */, + 694E0DB51291347F008AFCC7 /* j2k.c in Sources */, + 694E0DB61291347F008AFCC7 /* j2k_lib.c in Sources */, + 694E0DB71291347F008AFCC7 /* jp2.c in Sources */, + 694E0DB81291347F008AFCC7 /* jpt.c in Sources */, + 694E0DB91291347F008AFCC7 /* jpwl.c in Sources */, + 694E0DBA1291347F008AFCC7 /* jpwl_lib.c in Sources */, + 694E0DBB1291347F008AFCC7 /* mct.c in Sources */, + 694E0DBC1291347F008AFCC7 /* mqc.c in Sources */, + 694E0DBD1291347F008AFCC7 /* openjpeg.c in Sources */, + 694E0DBF1291347F008AFCC7 /* pi.c in Sources */, + 694E0DC01291347F008AFCC7 /* raw.c in Sources */, + 694E0DC11291347F008AFCC7 /* rs.c in Sources */, + 694E0DC21291347F008AFCC7 /* t1.c in Sources */, + 694E0DC31291347F008AFCC7 /* t1_generate_luts.c in Sources */, + 694E0DC41291347F008AFCC7 /* t2.c in Sources */, + 694E0DC51291347F008AFCC7 /* tcd.c in Sources */, + 694E0DC61291347F008AFCC7 /* tgt.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 694E0EB412953DF3008AFCC7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 694E0EBE12953E2F008AFCC7 /* extract_j2k_from_mj2.c in Sources */, + 694E0EBF12953E2F008AFCC7 /* mj2.c in Sources */, + 694E0EC012953E2F008AFCC7 /* mj2_convert.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 694E0EC612953EC7008AFCC7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 694E0ECF12953F16008AFCC7 /* frames_to_mj2.c in Sources */, + 694E0EC812953EC7008AFCC7 /* mj2.c in Sources */, + 694E0EC912953EC7008AFCC7 /* mj2_convert.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 694E0ED512953F2B008AFCC7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 694E0EDE12953F46008AFCC7 /* mj2_to_frames.c in Sources */, + 6904E34712B0EEAD00C1426A /* color.c in Sources */, + 694E0ED712953F2B008AFCC7 /* mj2.c in Sources */, + 694E0ED812953F2B008AFCC7 /* mj2_convert.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 694E0EEC12953F82008AFCC7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 694E0EF512953F95008AFCC7 /* wrap_j2k_in_mj2.c in Sources */, + 694E0EEE12953F82008AFCC7 /* mj2.c in Sources */, + 694E0EEF12953F82008AFCC7 /* mj2_convert.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 69F9859E0D40A48E00C2791C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 69F9860E0D40A7B000C2791C /* bio.c in Sources */, + 69F9860F0D40A7B000C2791C /* cio.c in Sources */, + 69F986100D40A7B000C2791C /* dwt.c in Sources */, + 69F986110D40A7B000C2791C /* event.c in Sources */, + 69F986120D40A7B000C2791C /* image.c in Sources */, + 69F986130D40A7B000C2791C /* j2k.c in Sources */, + 69F986140D40A7B000C2791C /* j2k_lib.c in Sources */, + 69F986150D40A7B000C2791C /* jp2.c in Sources */, + 69F986160D40A7B000C2791C /* jpt.c in Sources */, + 69F986170D40A7B000C2791C /* mct.c in Sources */, + 69F986180D40A7B000C2791C /* mqc.c in Sources */, + 69F986190D40A7B000C2791C /* openjpeg.c in Sources */, + 69F9861A0D40A7B000C2791C /* pi.c in Sources */, + 69F9861B0D40A7B000C2791C /* raw.c in Sources */, + 69F9861C0D40A7B000C2791C /* t1.c in Sources */, + 69F9861D0D40A7B000C2791C /* t1_generate_luts.c in Sources */, + 69F9861E0D40A7B000C2791C /* t2.c in Sources */, + 69F9861F0D40A7B000C2791C /* tcd.c in Sources */, + 69F986200D40A7B000C2791C /* tgt.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 69F985B30D40A63D00C2791C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 69F986210D40A7B100C2791C /* bio.c in Sources */, + 69F986220D40A7B100C2791C /* cio.c in Sources */, + 69F986230D40A7B100C2791C /* dwt.c in Sources */, + 69F986240D40A7B100C2791C /* event.c in Sources */, + 69F986250D40A7B100C2791C /* image.c in Sources */, + 69F986260D40A7B100C2791C /* j2k.c in Sources */, + 69F986270D40A7B100C2791C /* j2k_lib.c in Sources */, + 69F986280D40A7B100C2791C /* jp2.c in Sources */, + 69F986290D40A7B100C2791C /* jpt.c in Sources */, + 69F9862A0D40A7B100C2791C /* mct.c in Sources */, + 69F9862B0D40A7B100C2791C /* mqc.c in Sources */, + 69F9862C0D40A7B100C2791C /* openjpeg.c in Sources */, + 69F9862D0D40A7B100C2791C /* pi.c in Sources */, + 69F9862E0D40A7B100C2791C /* raw.c in Sources */, + 69F9862F0D40A7B100C2791C /* t1.c in Sources */, + 69F986300D40A7B100C2791C /* t1_generate_luts.c in Sources */, + 69F986310D40A7B100C2791C /* t2.c in Sources */, + 69F986320D40A7B100C2791C /* tcd.c in Sources */, + 69F986330D40A7B100C2791C /* tgt.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 69F986360D40A7DA00C2791C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 69F986520D40A84C00C2791C /* convert.c in Sources */, + 69F986540D40A84C00C2791C /* image_to_j2k.c in Sources */, + 69F986550D40A84C00C2791C /* index.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 69F986590D40A8E200C2791C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6904E34312B0EE5100C1426A /* color.c in Sources */, + 69F986600D40A90E00C2791C /* convert.c in Sources */, + 69F986620D40A90E00C2791C /* index.c in Sources */, + 69F986630D40A90E00C2791C /* j2k_to_image.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 692CF265122BB2760010088E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 692CF20D122BAF7A0010088E /* opj_JPWL_static */; + targetProxy = 692CF264122BB2760010088E /* PBXContainerItemProxy */; + }; + 692CF267122BB2760010088E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 692CF23C122BB1D60010088E /* JPWL_image_to_j2k */; + targetProxy = 692CF266122BB2760010088E /* PBXContainerItemProxy */; + }; + 692CF269122BB2760010088E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 692CF24A122BB2110010088E /* JPWL_j2k_to_image */; + targetProxy = 692CF268122BB2760010088E /* PBXContainerItemProxy */; + }; + 692CF275122BB29A0010088E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694039A6117B7E090079DE22 /* build OPJ */; + targetProxy = 692CF274122BB29A0010088E /* PBXContainerItemProxy */; + }; + 692CF277122BB29A0010088E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 692CF258122BB2640010088E /* build OPJ_JPWL */; + targetProxy = 692CF276122BB29A0010088E /* PBXContainerItemProxy */; + }; + 6938D7E912D0F4C10017B83E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0EFA12953FD2008AFCC7 /* build OPJ_MJ2 */; + targetProxy = 6938D7E812D0F4C10017B83E /* PBXContainerItemProxy */; + }; + 694039AB117B7E390079DE22 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 69F985A00D40A48E00C2791C /* opj_static */; + targetProxy = 694039AA117B7E390079DE22 /* PBXContainerItemProxy */; + }; + 694039AD117B7E3D0079DE22 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 69F986380D40A7DA00C2791C /* image_to_j2k */; + targetProxy = 694039AC117B7E3D0079DE22 /* PBXContainerItemProxy */; + }; + 694039AF117B7E420079DE22 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 69F9865B0D40A8E200C2791C /* j2k_to_image */; + targetProxy = 694039AE117B7E420079DE22 /* PBXContainerItemProxy */; + }; + 694E0D4F12912DED008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0D4E12912DED008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0D5112912DFE008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0D5012912DFE008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0D5312912E09008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0D5212912E09008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0D5512912E0E008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0D5412912E0E008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0D5712912E19008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0D5612912E19008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0D5912912E1F008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0D5812912E1F008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0D5B12912E27008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0D5A12912E27008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0DA412913354008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D99129132D7008AFCC7 /* j2k_dump */; + targetProxy = 694E0DA312913354008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0DAE12913478008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0DAD12913478008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0DCC129134F3008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0DCB129134F3008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0DCE1291350B008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 69F985B50D40A63D00C2791C /* opj_dynamic */; + targetProxy = 694E0DCD1291350B008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0DD012913537008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0DA81291340E008AFCC7 /* opj_JPWL_dynamic */; + targetProxy = 694E0DCF12913537008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0EBC12953E05008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0EBB12953E05008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0EC412953EC7008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0EC512953EC7008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0ED312953F2B008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0ED412953F2B008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0EEA12953F82008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0D4412912A70008AFCC7 /* opj_config */; + targetProxy = 694E0EEB12953F82008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0EFE12953FDB008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0EE912953F82008AFCC7 /* wrap_j2k_in_mj2 */; + targetProxy = 694E0EFD12953FDB008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0F0012953FDB008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0ED212953F2B008AFCC7 /* mj2_to_frames */; + targetProxy = 694E0EFF12953FDB008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0F0212953FDB008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0EC312953EC7008AFCC7 /* frames_to_mj2 */; + targetProxy = 694E0F0112953FDB008AFCC7 /* PBXContainerItemProxy */; + }; + 694E0F0412953FDB008AFCC7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 694E0EB612953DF3008AFCC7 /* extract_j2k_from_mj2 */; + targetProxy = 694E0F0312953FDB008AFCC7 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 692CF20F122BAF7A0010088E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/lib; + OTHER_CFLAGS = "-DUSE_JPWL"; + PREBINDING = NO; + PRODUCT_NAME = openjpeg_JPWL; + }; + name = Debug; + }; + 692CF210122BAF7A0010088E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/lib; + OTHER_CFLAGS = "-DUSE_JPWL"; + PREBINDING = NO; + PRODUCT_NAME = openjpeg_JPWL; + ZERO_LINK = NO; + }; + name = Release; + }; + 692CF245122BB1D60010088E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_CFLAGS = "-DUSE_JPWL"; + OTHER_LDFLAGS = ( + "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg_JPWL.a", + "-lpng", + "-ltiff", + ); + PREBINDING = NO; + PRODUCT_NAME = JPWL_image_to_j2k; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = YES; + }; + name = Debug; + }; + 692CF246122BB1D60010088E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_CFLAGS = "-DUSE_JPWL"; + OTHER_LDFLAGS = ( + "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg_JPWL.a", + "-lpng", + "-ltiff", + ); + PREBINDING = NO; + PRODUCT_NAME = JPWL_image_to_j2k; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = NO; + }; + name = Release; + }; + 692CF253122BB2110010088E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_CFLAGS = "-DUSE_JPWL"; + OTHER_LDFLAGS = ( + "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg_JPWL.a", + "-lpng", + "-ltiff", + ); + PREBINDING = NO; + PRODUCT_NAME = JPWL_j2k_to_image; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = YES; + }; + name = Debug; + }; + 692CF254122BB2110010088E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_CFLAGS = "-DUSE_JPWL"; + OTHER_LDFLAGS = ( + "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg_JPWL.a", + "-lpng", + "-ltiff", + ); + PREBINDING = NO; + PRODUCT_NAME = JPWL_j2k_to_image; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = NO; + }; + name = Release; + }; + 692CF262122BB2640010088E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = "build all"; + }; + name = Debug; + }; + 692CF263122BB2640010088E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = "build all"; + ZERO_LINK = NO; + }; + name = Release; + }; + 692CF272122BB2850010088E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = "build all"; + }; + name = Debug; + }; + 692CF273122BB2850010088E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = "build all"; + ZERO_LINK = NO; + }; + name = Release; + }; + 694039A7117B7E0A0079DE22 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = "build all"; + }; + name = Debug; + }; + 694039A8117B7E0A0079DE22 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = "build all"; + ZERO_LINK = NO; + }; + name = Release; + }; + 694E0D4512912A71008AFCC7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = opj_config; + }; + name = Debug; + }; + 694E0D4612912A71008AFCC7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = opj_config; + ZERO_LINK = NO; + }; + name = Release; + }; + 694E0D9C129132D8008AFCC7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a"; + PREBINDING = NO; + PRODUCT_NAME = j2k_dump; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + }; + name = Debug; + }; + 694E0D9D129132D8008AFCC7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a"; + PREBINDING = NO; + PRODUCT_NAME = j2k_dump; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = NO; + }; + name = Release; + }; + 694E0DAA1291340E008AFCC7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + EXECUTABLE_PREFIX = lib; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = openjpeg_JPWL; + }; + name = Debug; + }; + 694E0DAB1291340E008AFCC7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + EXECUTABLE_PREFIX = lib; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = openjpeg_JPWL; + ZERO_LINK = NO; + }; + name = Release; + }; + 694E0EB912953DF4008AFCC7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a"; + PREBINDING = NO; + PRODUCT_NAME = extract_j2k_from_mj2; + }; + name = Debug; + }; + 694E0EBA12953DF4008AFCC7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a"; + PREBINDING = NO; + PRODUCT_NAME = extract_j2k_from_mj2; + ZERO_LINK = NO; + }; + name = Release; + }; + 694E0ECB12953EC7008AFCC7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a"; + PREBINDING = NO; + PRODUCT_NAME = frames_to_mj2; + }; + name = Debug; + }; + 694E0ECC12953EC7008AFCC7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a"; + PREBINDING = NO; + PRODUCT_NAME = frames_to_mj2; + ZERO_LINK = NO; + }; + name = Release; + }; + 694E0EDA12953F2B008AFCC7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a"; + PREBINDING = NO; + PRODUCT_NAME = mj2_to_frames; + }; + name = Debug; + }; + 694E0EDB12953F2B008AFCC7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a"; + PREBINDING = NO; + PRODUCT_NAME = mj2_to_frames; + ZERO_LINK = NO; + }; + name = Release; + }; + 694E0EF112953F82008AFCC7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a"; + PREBINDING = NO; + PRODUCT_NAME = wrap_j2k_in_mj2; + }; + name = Debug; + }; + 694E0EF212953F82008AFCC7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a"; + PREBINDING = NO; + PRODUCT_NAME = wrap_j2k_in_mj2; + ZERO_LINK = NO; + }; + name = Release; + }; + 694E0EFB12953FD2008AFCC7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = "build OPJ_MJ2"; + }; + name = Debug; + }; + 694E0EFC12953FD2008AFCC7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = "build OPJ_MJ2"; + ZERO_LINK = NO; + }; + name = Release; + }; + 69F984AA0D40A3AE00C2791C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(NATIVE_ARCH_ACTUAL)"; + COPY_PHASE_STRIP = NO; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + }; + name = Debug; + }; + 69F984AB0D40A3AE00C2791C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(NATIVE_ARCH_ACTUAL)"; + COPY_PHASE_STRIP = YES; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + }; + name = Release; + }; + 69F985A40D40A48F00C2791C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = openjpeg; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = YES; + }; + name = Debug; + }; + 69F985A50D40A48F00C2791C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = openjpeg; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = NO; + }; + name = Release; + }; + 69F985BA0D40A69400C2791C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + EXECUTABLE_PREFIX = lib; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = openjpeg; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = YES; + }; + name = Debug; + }; + 69F985BB0D40A69400C2791C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + EXECUTABLE_PREFIX = lib; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = openjpeg; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = NO; + }; + name = Release; + }; + 69F9864C0D40A7F200C2791C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a", + "-lpng", + "-ltiff", + ); + PREBINDING = NO; + PRODUCT_NAME = image_to_j2k; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = YES; + }; + name = Debug; + }; + 69F9864D0D40A7F200C2791C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a", + "-lpng", + "-ltiff", + ); + PREBINDING = NO; + PRODUCT_NAME = image_to_j2k; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = NO; + }; + name = Release; + }; + 69F986660D40A93B00C2791C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a", + "-lpng", + "-ltiff", + ); + PREBINDING = NO; + PRODUCT_NAME = j2k_to_image; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = YES; + }; + name = Debug; + }; + 69F986670D40A93B00C2791C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "$(BUILD_DIR)/$(CONFIGURATION)/libopenjpeg.a", + "-lpng", + "-ltiff", + ); + PREBINDING = NO; + PRODUCT_NAME = j2k_to_image; + USER_HEADER_SEARCH_PATHS = ./libopenjpeg; + ZERO_LINK = NO; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 692CF224122BAFBF0010088E /* Build configuration list for PBXNativeTarget "opj_JPWL_static" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 692CF20F122BAF7A0010088E /* Debug */, + 692CF210122BAF7A0010088E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 692CF244122BB1D60010088E /* Build configuration list for PBXNativeTarget "JPWL_image_to_j2k" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 692CF245122BB1D60010088E /* Debug */, + 692CF246122BB1D60010088E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 692CF252122BB2110010088E /* Build configuration list for PBXNativeTarget "JPWL_j2k_to_image" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 692CF253122BB2110010088E /* Debug */, + 692CF254122BB2110010088E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 692CF261122BB2640010088E /* Build configuration list for PBXAggregateTarget "build OPJ_JPWL" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 692CF262122BB2640010088E /* Debug */, + 692CF263122BB2640010088E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 692CF271122BB2850010088E /* Build configuration list for PBXAggregateTarget "build all" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 692CF272122BB2850010088E /* Debug */, + 692CF273122BB2850010088E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 694039A9117B7E2E0079DE22 /* Build configuration list for PBXAggregateTarget "build OPJ" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 694039A7117B7E0A0079DE22 /* Debug */, + 694039A8117B7E0A0079DE22 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 694E0D4712912A8F008AFCC7 /* Build configuration list for PBXAggregateTarget "opj_config" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 694E0D4512912A71008AFCC7 /* Debug */, + 694E0D4612912A71008AFCC7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 694E0D9F1291330E008AFCC7 /* Build configuration list for PBXNativeTarget "j2k_dump" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 694E0D9C129132D8008AFCC7 /* Debug */, + 694E0D9D129132D8008AFCC7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 694E0DAC1291342C008AFCC7 /* Build configuration list for PBXNativeTarget "opj_JPWL_dynamic" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 694E0DAA1291340E008AFCC7 /* Debug */, + 694E0DAB1291340E008AFCC7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 694E0EBD12953E23008AFCC7 /* Build configuration list for PBXNativeTarget "extract_j2k_from_mj2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 694E0EB912953DF4008AFCC7 /* Debug */, + 694E0EBA12953DF4008AFCC7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 694E0ECA12953EC7008AFCC7 /* Build configuration list for PBXNativeTarget "frames_to_mj2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 694E0ECB12953EC7008AFCC7 /* Debug */, + 694E0ECC12953EC7008AFCC7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 694E0ED912953F2B008AFCC7 /* Build configuration list for PBXNativeTarget "mj2_to_frames" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 694E0EDA12953F2B008AFCC7 /* Debug */, + 694E0EDB12953F2B008AFCC7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 694E0EF012953F82008AFCC7 /* Build configuration list for PBXNativeTarget "wrap_j2k_in_mj2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 694E0EF112953F82008AFCC7 /* Debug */, + 694E0EF212953F82008AFCC7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 694E0F0612953FF2008AFCC7 /* Build configuration list for PBXAggregateTarget "build OPJ_MJ2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 694E0EFB12953FD2008AFCC7 /* Debug */, + 694E0EFC12953FD2008AFCC7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 69F984A90D40A3AE00C2791C /* Build configuration list for PBXProject "openjpeg" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 69F984AA0D40A3AE00C2791C /* Debug */, + 69F984AB0D40A3AE00C2791C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 69F985A30D40A48F00C2791C /* Build configuration list for PBXNativeTarget "opj_static" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 69F985A40D40A48F00C2791C /* Debug */, + 69F985A50D40A48F00C2791C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 69F985B90D40A69400C2791C /* Build configuration list for PBXNativeTarget "opj_dynamic" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 69F985BA0D40A69400C2791C /* Debug */, + 69F985BB0D40A69400C2791C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 69F9864B0D40A7F200C2791C /* Build configuration list for PBXNativeTarget "image_to_j2k" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 69F9864C0D40A7F200C2791C /* Debug */, + 69F9864D0D40A7F200C2791C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 69F986650D40A93B00C2791C /* Build configuration list for PBXNativeTarget "j2k_to_image" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 69F986660D40A93B00C2791C /* Debug */, + 69F986670D40A93B00C2791C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 69F984A80D40A3AE00C2791C /* Project object */; +} diff --git a/contrib/menuetlibc/openjpeg/opj_config.h b/contrib/menuetlibc/openjpeg/opj_config.h new file mode 100644 index 0000000000..e34a8a0f78 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/opj_config.h @@ -0,0 +1,105 @@ +/* opj_config.h. Generated from opj_config.h.in by configure. */ +/* opj_config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#define HAVE_FSEEKO 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `lcms' library (-llcms). */ +#define HAVE_LIBLCMS 1 + +/* define to 1 if you have lcms version 1.x */ +#define HAVE_LIBLCMS1 1 + +/* define to 1 if you have lcms version 2.x */ +/* #undef HAVE_LIBLCMS2 */ + +/* define to 1 if you have libpng */ +#define HAVE_LIBPNG 1 + +/* define to 1 if you have libtiff */ +#define HAVE_LIBTIFF 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "openjpeg-1.4.0" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "OpenJPEG" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "OpenJPEG 1.4.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "openjpeg-1.4.0" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "http://www.openjpeg.org/" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.4.0" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "1.4.0" + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +/* #undef _LARGEFILE_SOURCE */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ diff --git a/contrib/menuetlibc/openjpeg/opj_config.h.in b/contrib/menuetlibc/openjpeg/opj_config.h.in new file mode 100644 index 0000000000..f4d5dfb266 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/opj_config.h.in @@ -0,0 +1,104 @@ +/* opj_config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#undef HAVE_FSEEKO + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `lcms' library (-llcms). */ +#undef HAVE_LIBLCMS + +/* define to 1 if you have lcms version 1.x */ +#undef HAVE_LIBLCMS1 + +/* define to 1 if you have lcms version 2.x */ +#undef HAVE_LIBLCMS2 + +/* define to 1 if you have libpng */ +#undef HAVE_LIBPNG + +/* define to 1 if you have libtiff */ +#undef HAVE_LIBTIFF + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +#undef _LARGEFILE_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES diff --git a/contrib/menuetlibc/openjpeg/opj_config.h.in.user b/contrib/menuetlibc/openjpeg/opj_config.h.in.user new file mode 100644 index 0000000000..f86ccce63f --- /dev/null +++ b/contrib/menuetlibc/openjpeg/opj_config.h.in.user @@ -0,0 +1,41 @@ +/* If you want to build the library manually without using + * 'configure' or 'CMake' + * then copy this file + * 'opj_config.h.in.user' + * to + * 'opj_config.h' + * + * Open 'opj_config.h' and change the file contents + * if you want to define something because you know you have + * BOTH installed the library AND the header file(s). + * Then e.g. write +#define HAVE_LIBPNG 1 + * + * + * The file 'opj_config.h' will be included in some source files. + * ==== YOU CAN NOT COMPILE WITHOUT IT. ==== + * === DO NOT FOREGET TO CHANGE 'config.nix' APPROPRIATELY. ==== +*/ + +/* DO NOT DEFINE BOTH VERSIONS OF LCMS */ +/* define to 1 if you have both liblcms and lcms.h installed */ +#undef HAVE_LIBLCMS1 +/* #define HAVE_LIBLCMS1 1 */ + +/* define to 1 if you have both liblcms2 and lcms2.h installed */ +#undef HAVE_LIBLCMS2 +/* #define HAVE_LIBLCMS2 1 */ + +/* define to 1 if you have both libpng and png.h installed */ +#undef HAVE_LIBPNG +/* #define HAVE_LIBPNG 1 */ + +/* define to 1 if you have both libtiff and tiff.h installed */ +#undef HAVE_LIBTIFF +/* #define HAVE_LIBTIFF 1 */ + +/*---------------- DO NOT CHANGE BELOW THIS LINE ----------------*/ +#define PACKAGE_URL "http://www.openjpeg.org/" +#define PACKAGE_BUGREPORT "http://code.google.com/p/openjpeg/" + +#define PACKAGE_VERSION "1.4.0" diff --git a/contrib/menuetlibc/openjpeg/opj_configh.cmake.in b/contrib/menuetlibc/openjpeg/opj_configh.cmake.in new file mode 100644 index 0000000000..d51453462e --- /dev/null +++ b/contrib/menuetlibc/openjpeg/opj_configh.cmake.in @@ -0,0 +1,22 @@ +/* create config.h for CMake */ +#define PACKAGE_VERSION "@PACKAGE_VERSION@" +# +#cmakedefine HAVE_INTTYPES_H @HAS_INTTYPES_H@ +#cmakedefine HAVE_MEMORY_H @HAS_MEMORY_H@ +#cmakedefine HAVE_STDINT_H @HAS_STDINT_H@ +#cmakedefine HAVE_STDLIB_H @HAS_STDLIB_H@ +#cmakedefine HAVE_STRINGS_H @HAS_STRINGS_H@ +#cmakedefine HAVE_STRING_H @HAS_STRING_H@ +#cmakedefine HAVE_SYS_STAT_H @HAS_SYS_STAT_H@ +#cmakedefine HAVE_SYS_TYPES_H @HAS_SYS_TYPES_H@ +#cmakedefine HAVE_UNISTD_H @HAS_UNISTD_H@ +#cmakedefine HAVE_LIBPNG @HAVE_LIBPNG@ +#cmakedefine HAVE_PNG_H @HAVE_PNG_H@ +#cmakedefine HAVE_LIBTIFF @HAVE_LIBTIFF@ +#cmakedefine HAVE_TIFF_H @HAVE_TIFF_H@ +# +#cmakedefine HAVE_LIBLCMS1 @HAVE_LCMS1_LIB@ +#cmakedefine HAVE_LIBLCMS2 @HAVE_LCMS2_LIB@ +#cmakedefine HAVE_LCMS1_H @HAVE_LCMS1_H@ +#cmakedefine HAVE_LCMS2_H @HAVE_LCMS2_H@ +# diff --git a/contrib/menuetlibc/openjpeg/stamp-h1 b/contrib/menuetlibc/openjpeg/stamp-h1 new file mode 100644 index 0000000000..805a6937b2 --- /dev/null +++ b/contrib/menuetlibc/openjpeg/stamp-h1 @@ -0,0 +1 @@ +timestamp for opj_config.h diff --git a/data/it/Makefile b/data/it/Makefile index d0bb1567b4..134f0dd5ed 100644 --- a/data/it/Makefile +++ b/data/it/Makefile @@ -295,7 +295,7 @@ CMM_PROGRAMS:=\ # Spaces should be represented as |. OTHER_FILES:=settings/autorun.dat:SETTINGS/AUTORUN.DAT \ default.skn:DEFAULT.SKN \ - graph:GRAPH \ + #graph:GRAPH \ settings/icon.ini:SETTINGS/ICON.INI \ ../common/iconstrp.png:ICONSTRP.PNG index_htm:INDEX.HTM \ kernel.mnt:KERNEL.MNT \ @@ -346,7 +346,7 @@ include Makefile.skins # Extra targets for LiveCD image in the syntax of mkisofs MKISOFS_EXTRA:=\ - emu/e80/e80=e80 \ + #emu/e80/e80=e80 \ emu/dosbox/=$(PROGS)/emulator/DosBox/dosbox \ emu/dosbox/=$(PROGS)/emulator/DosBox/dosbox.conf \ emu/dosbox/=$(PROGS)/emulator/DosBox/readme.txt \ @@ -484,7 +484,7 @@ $(BUILD_DIR)/kolibri.img: $(BUILD_DIR)/.dir \ mmd -i $(BUILD_DIR)/kolibri.img ::MEDIA/ImgF mmd -i $(BUILD_DIR)/kolibri.img ::NETWORK mmd -i $(BUILD_DIR)/kolibri.img ::SETTINGS - @echo $(CC) $(LD) $(CFLAGS) $(LDFLAGS) && $(mcopy_all_items) + $(mcopy_all_items) # The second goal: LiveCD image. $(BUILD_DIR)/kolibri.iso: $(BUILD_DIR)/kolibri.img $(mkisofs_extra_targets) @@ -713,4 +713,4 @@ $(REPOSITORY)/drivers/ddk/libcore.a: \ #Rules for updf UPDFDIR=$(REPOSITORY)/contrib/media/updf updf: - $(MAKE) -C $(REPOSITORY)/programs/develop/libraries/menuetlibc + $(MAKE) -C $(REPOSITORY)/contrib/menuetlibc diff --git a/programs/develop/libraries/menuetlibc/linuxtools/Makefile b/programs/develop/libraries/menuetlibc/linuxtools/Makefile index 1f6637b878..00c32d15f4 100755 --- a/programs/develop/libraries/menuetlibc/linuxtools/Makefile +++ b/programs/develop/libraries/menuetlibc/linuxtools/Makefile @@ -9,13 +9,14 @@ TOOLS = mgcc$(EXESUFFIX) mld$(EXESUFFIX) mgpp$(EXESUFFIX) mmkdep$(EXESUFFIX) \ mchmem$(EXESUFFIX) all: $(TOOLS) - + @echo $(MENUETDEV) + mgcc$(EXESUFFIX): mgcc.c gcc mgcc.c -o mgcc$(EXESUFFIX) -DHAS_DEVENV=$(HAS_DEVENV) -s $(WAIT) mgpp$(EXESUFFIX): mgpp.c - gcc mgpp.c -o mgpp$(EXESUFFIX) -DHAS_DEVENV=$(HAS_DEVENV) -s \ - -DTOOLNAME=\"$(GPP_TOOLNAME)\" $(WAIT) + gcc mgpp.c -o mgpp$(EXESUFFIX) -DHAS_DEVENV=$(HAS_DEVENV) -s \ + -DTOOLNAME=\"$(GPP_TOOLNAME)\" $(WAIT) mld$(EXESUFFIX): mld.c gcc mld.c -o mld$(EXESUFFIX) -DHAS_DEVENV=$(HAS_DEVENV) -s $(WAIT) diff --git a/programs/develop/libraries/menuetlibc/src/Makefile b/programs/develop/libraries/menuetlibc/src/Makefile index 82576af6a4..ae24b9d7ed 100755 --- a/programs/develop/libraries/menuetlibc/src/Makefile +++ b/programs/develop/libraries/menuetlibc/src/Makefile @@ -7,9 +7,6 @@ export MENUET_LIBC_OBJS export MENUET_LIBC_TOPDIR all: m_echo$(EXESUFFIX) mks$(EXESUFFIX) - @echo $(CC) $(LD) $(CFLAGS) $(LDFLAGS) - cc -v - ld -v make -C libc make -C libcon2 mk_lib make -C libcpp mk_lib

    td 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